Dokumentacja dla modify-syntax-entry
mówi, co następuje:
(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.
Co to jest ogrodzenie i kiedy miałbym go użyć? Nic nie mogę znaleźć w instrukcji obsługi.
syntax-highlighting
syntax-table
Wilfred Hughes
źródło
źródło
M-x report-emacs-bug
."
może zostać zakończone tylko przez inną osobę"
. Jednak gdysyntax-propertize
do rozpoznania ciągu używana jest funkcja niestandardowa , nie jest to możliwe. Zamiast tego można oznaczyć punkty końcowe ciągów i komentarzy użyciu|
i!
, odpowiednio. (Dokumentacja mówi, że tych klas składniowych należy używać przede wszystkim podczas korzystania zsyntax-table
właściwości text, cosyntax-propertize
ustawia funkcja niestandardowa .)Odpowiedzi:
Są one udokumentowane w instrukcji, ale nie używa słowa „ogrodzenie”. Znaki
!
i|
są wymienione jako „ogólne ograniczniki komentarzy” i „ogólne ograniczniki ciągu” w odwołaniu do klasy składni .Te postacie zostały wprowadzone w Emacs 20.1. Cytując plik NEWS:
Nie mogę znaleźć żadnego zastosowania
!
w standardowych trybach Emacsa. Istnieje kilka zastosowań|
. Zamierzonym przypadkiem użycia są języki, które mają literały, które używają ograniczników innych niż zwykłe ograniczniki ciągów, zwykle ustawiane za pomocą nakładek dodawanych przez blokowanie czcionek na podstawie kontekstu. Na przykład w Perl, regularne spotkania wyrażenie można napisać/REGEXP/
, lubm/REGEXP/
lubm~REGEXP~
lubm[REGEXP]
lub dowolną liczbę wariantów. Ciągiem znaków można napisać'STRING'
, ale równieżq'STRING'
,q~STRING~
,q[STRING]
, itd. Gdy blokada czcionki rozpoznaje takie konstrukty, ustawia znaki cudzysłowu (/
//
lub'
/'
i~
/~
lub[
/]
w podanych przeze mnie przykładach) do ogólnej składni ogranicznika łańcucha. Nawet jeśli obecny jest zwykły ogranicznik łańcucha (np.q[foo"bar]
), Ten ogranicznik będzie uważany za zwykłą część łańcucha, nie zakończy łańcucha.Przyznaję, że nie widzę ostatecznej korzyści - na przykład tryb CPerl robi bardzo wymyślne rzeczy i nie korzysta z tej funkcji.
źródło
!
do podświetlania=begin
...=end
bloków.Zaczerpnięte ze składni.h:
Zakładając, że kody składniowe i klasy składniowe wyrażeń regularnych odnoszą się do tej samej rzeczy, zauważyłem użycie,
|
wcc-awk.el
których zastosowaniach"\\s|"
do podświetlania niezrównoważonych ciągów znaków.źródło
python-syntax-stringify
,ruby-syntax-propertize-percent-literal
i innych . Nie rozumiem jednak, jak to sięSstring
tutaj różni .