Строка документа для modify-syntax-entry
говорит следующее:
(modify-syntax-entry CHAR NEWENTRY &optional SYNTAX-TABLE)
...
The first character of NEWENTRY should be one of the following:
...
/ character-quote. @ inherit from parent table.
| generic string fence. ! generic comment fence.
Что такое забор и когда я его использую? Я не могу найти ничего в справочном руководстве.
syntax-highlighting
syntax-table
Уилфред Хьюз
источник
источник
M-x report-emacs-bug
."
может быть прекращено только другим"
. Однако, когда пользовательскаяsyntax-propertize
функция используется для распознавания строки, это невозможно. Вместо этого вы можете пометить конечные точки строк и комментариев с помощью|
и!
, соответственно. (В документации сказано, что эти синтаксические классы в первую очередь должны использоваться при использованииsyntax-table
свойства text, котороеsyntax-propertize
задает пользовательская функция.)Ответы:
Они задокументированы в руководстве, но в нем не используется слово «забор». Символы
!
и|
перечислены в качестве «общих разделителей комментариев» и «общих разделителей строк» в ссылке на синтаксический класс .Эти символы были введены в Emacs 20.1. Цитирование файла NEWS:
Я не могу найти применение
!
в стандартных режимах Emacs. Есть несколько вариантов использования|
. Предполагаемый вариант использования - это языки, в которых есть литералы, в которых используются разделители, отличные от обычных разделителей строк, обычно устанавливаемые с помощью наложений, добавляемых блокировкой шрифтов на основе контекста. Например, в perl может быть записано совпадение с регулярным выражением/REGEXP/
, илиm/REGEXP/
и /m~REGEXP~
илиm[REGEXP]
или любое количество вариантов. Буквальная строка может быть написана ,'STRING'
но иq'STRING'
,q~STRING~
,q[STRING]
и т.д. Когда замок шрифт распознает такие конструкции, он устанавливает символы кавычек (/
//
или'
/'
или~
/~
или[
/]
в приведенных мной примерах) к синтаксису общего строкового разделителя. Даже если присутствует обычный разделитель строк (напримерq[foo"bar]
), этот разделитель будет считаться обычной частью строки, он не завершит строку.Я признаю, что не вижу определенной выгоды - например, режим CPerl делает некоторые очень причудливые вещи и не использует эту возможность.
источник
!
для выделения=begin
...=end
блоков.Взято из синтаксиса.h:
Предполагая, что синтаксические коды и классы синтаксиса регулярных выражений ссылаются на одно и то же, я заметил использование,
|
вcc-awk.el
котором используются"\\s|"
для выделения несбалансированных разделителей строк.источник
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
и другие . Я не вижу, как это отличается отSstring
здесь, хотя.