2016-08-02 2 views
0

Что я пытаюсь сделать: Соберите все имена классов и идентификаторов в HTML-скрипте Ace Editor.Найти все имена классов и идентификаторов в редакторе Ace HTML-скрипт

Сейчас я планирую обнаружить изменения пользователя (.on('change'...)) и получить текущий токен, используя позицию курсора. Если токен не является типом «невостребованного» атрибута-значения, я хочу повторить его с помощью предыдущих токенов, чтобы найти маркер типа «атрибут-имя», к которому принадлежит это «значение атрибута», и определить, класс или id (я не могу просто определить создание токена «имя-атрибут», потому что пользователь может вернуться назад и изменить значения атрибута позже, не меняя имя, и мне нужно обнаружить эти изменения).

Я могу сделать все, кроме как получить предыдущие жетоны. Я просмотрел документацию, и TokenIterator должен это сделать, но когда я пытаюсь сделать что-то вроде var iter = new TokeIterator(), моя консоль говорит, что TokenIterator не определен. Я искал google снова и снова, но не нашел никаких результатов. Если правда есть, я, очевидно, не использую правильные слова, чтобы найти ее, но это единственные слова, которые у меня есть.

Есть ли какой-то способ, встроенный в Ace для итерации через жетоны? Я знаю, что я не вижу всех свойств и методов в объекте экземпляра редактора, когда консоль регистрирую его, потому что я могу использовать методы в своем сценарии, которые я не вижу в этом журнале. Есть ли там один, который делает то, что я хочу?

Если нет, как загрузить токен-активатор? Я думаю, что что-то подобное продолжалось, когда я пытался использовать SnippetManager некоторое время назад, и оказалось, что я на самом деле должен был сделать это, чтобы заставить его работать:

var tillPageLoaded = setInterval(function() { // Makes sure page doesn't load forever on startup 
    if(document.readyState === 'complete') { 
     clearInterval(tillPageLoaded); 
     ace.config.loadModule('ace/ext/language_tools', function() { 
      editor.insertSnippet(myString); 
     }); 
    } 
}, 5); 

Это такая же ситуация? Если да, то что должно быть в .loadModules(...)? Нужно ли мне ссылаться на скрипт где-нибудь? Нужно ли его загружать каким-то другим способом?

Есть ли встроенная функциональность для Ace, которая уже сделает все, что я хочу?

Помимо этого, если у кого-то есть лучшие идеи о том, как это сделать с Тузом, это было бы очень желанным.

ответ

0

вы можете получить TokenIterator с помощью

var TokenIterator = ace.require("ace/token_iterator").TokenIterator 

см https://github.com/ajaxorg/ace/blob/master/lib/ace/mode/folding/xml.js#L38 для примера его использования.

+0

Спасибо, я получил эту работу. Я обнаружил, что мне тогда нужно было: var var iter = new TokenIterator (editor.session, 0, 0); '. К сожалению, я нашел, что это будет не очень полезно для меня, потому что Ace решает свои жетоны на каждом ходу, поэтому мне придется каждый раз перестраивать свои данные, снова повторяя токены. – knod

+0

Почему регенерация жетонов является проблемой? он только восстанавливает токены, которые изменились из-за изменений. –

+0

Я хотел бы иметь возможность хранить токен и продолжать проверять его, чтобы увидеть, изменилось ли его значение. Если жетоны уничтожаются каждый раз, когда они меняются, я не могу этого сделать. Я должен был бы оценить весь документ каждый раз, когда происходят изменения, чтобы получить токены. Может быть, есть способ обнаружить создание новых токенов или уничтожение старых, но я не знаю об этом. Он просто удаляет большую часть преимуществ, которые я надеялся извлечь из использования токенов. Если нет другого выбора, я сделаю это, но в противном случае это может просто не стоить того. – knod

 Смежные вопросы

  • Нет связанных вопросов^_^