Язык шаблонов, определить текущую область - PullRequest
0 голосов
/ 16 октября 2011

Я работаю с заманчивым языком, который поддерживает изменение области видимости с помощью специальных разделителей, например:

%% scope Foo %%
Stuff
%% end %%

Блоки могут быть вложены бесконечно, например:

%% scope Foo %%
Stuff in the Foo namespace
  %% scope Bar %%
     Stuff in the bar namespace
  %% end %%
%% end %%

При редактированииодин из этих шаблонов в текстовой области, я хотел бы запустить функцию Javascript, чтобы сообщить о текущей области.Текущий номер строки и положение курсора уже известны и могут быть переданы в функцию.

Другими словами, используя приведенный выше пример, если мой курсор находится где-нибудь во второй строке, функция должна записать 'Foo',Точно так же, если я на 4-й строке, он должен записать «Бар».Если я нахожусь в самом начале третьей строки (перед %%), он должен записать «Foo».

1 Ответ

0 голосов
/ 16 октября 2011

Это может работать для вас:

value = "%% scope Foo %% \nStuff in the Foo namespace\n  %% scope Bar %% \n     Stuff in the bar namespace \n  %% end %% \n%% end %%" // the value of the text area
cursor= Math.round(Math.random() * value.length) //just to get a random cursor position for testing

console.log(logTag(cursor,value), cursor); // should be foo or bar

function logTag (pos,string) {
    string = string.slice(0,pos);
    string = string.match(/%%\s*scope\s*(\w*)\s*%%/g);
    string = string[string.length - 1].match(/%%\s*scope\s*(\w*)\s*%%/)[1];
    return string;
}

Эта функция просто получает все %% scope <something> %% и возвращает самую последнюю, которая была бы областью, в которой печатает пользователь. Пробелы можно игнорировать. И может содержать только буквенно-цифровые и подчеркивания.

...