끈 펜스 또는 주석 펜스 란 무엇입니까?


9

에 대한 docstring 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.

펜스 란 무엇이며 언제 사용합니까? 정보 설명서에서 아무것도 찾을 수 없습니다.


이것은 Emacs 자체가 대답해야 할 질문입니다. doc 문자열은 " fence " 라는 용어를 정의하거나 적어도 설명해야합니다 . 문서 버그 신고를 고려하십시오 : M-x report-emacs-bug.
Drew

일반적으로 문자열 또는 주석 구분 기호는 문자열을 종료 할 문자를 지정할 수 있습니다. 예를 들어 a "는 다른 사람 만 종료 할 수 있습니다 ". 그러나 사용자 정의 syntax-propertize함수를 사용하여 문자열을 인식하는 경우에는 불가능합니다. 대신하여 문자열과 의견의 끝 지점을 표시 할 수 있습니다 |!각각. (문서에 따르면 이러한 구문 클래스는 주로 syntax-table사용자 정의 syntax-propertize함수가 설정 하는 텍스트 속성을 사용할 때 사용해야 합니다.)
Lindydancer 2016 년

답변:


8

설명서에 설명되어 있지만 "울타리"라는 단어는 사용하지 않습니다. 문자 !와는 |에서 "일반적인 주석 분리"와 "일반 문자열 구분 기호"로 표시됩니다 구문 클래스 참조 .

이 문자들은 Emacs 20.1에서 소개되었습니다. 뉴스 파일 인용하기 :

두 개의 새로운 구문 코드 !|숫자 값 14와 15가 있습니다. 코드 !가있는 문자 는 주석을 시작하고 주석이없는 한 동일한 코드를 가진 다른 문자로만 끝납니다. 코드 |가있는 문자 는 문자열을 시작하며 문자열은 인용 부호가없는 한 동일한 코드를 가진 다른 문자로만 끝납니다.

이 코드는 주로 '구문 테이블'텍스트 속성의 값으로 사용됩니다.

!표준 Emacs 모드에서 사용할 수 없습니다 . 의 여러 용도가 |있습니다. 의도 된 유스 케이스는 일반적인 문자열 분리 문자 이외의 분리 문자를 사용하는 리터럴이있는 언어이며, 일반적으로 컨텍스트에 따라 글꼴 잠금으로 추가 된 오버레이를 통해 설정됩니다. 예를 들어, 펄, 정규 표현식 매치를 기록 할 수 /REGEXP/또는 m/REGEXP/또는 m~REGEXP~또는 m[REGEXP]또는 변화의 수. 리터럴 문자열을 쓸 수 있습니다 'STRING'뿐만 아니라 q'STRING', q~STRING~, q[STRING]글꼴 잠금이 같은 구조를 인식하면, 등, 그것은 (인용 문자 설정 // /'/ '~/ ~또는 [/]예를 들어 일반 문자열 구분 기호 구문을 사용했습니다. 습관적인 문자열 구분 기호 (예 q[foo"bar]:)가 있어도 해당 구분 기호는 문자열의 일반적인 부분으로 간주되며 문자열을 종료하지 않습니다.

CPerl 모드는 매우 멋진 기능을 수행하며이 기능을 사용하지 않는 등 확실한 이점이 보이지 않습니다.


2
루비 모드를 사용 !하여 =begin... =end블록 을 강조 표시 합니다.
Lindydancer

5

syntax.h에서 가져온 것 :

/* A syntax table is a chartable whose elements are cons cells
   (CODE+FLAGS . MATCHING-CHAR).  MATCHING-CHAR can be nil if the char
   is not a kind of parenthesis.

   The low 8 bits of CODE+FLAGS is a code, as follows:  */

enum syntaxcode
  {
    Swhitespace, /* for a whitespace character */
    Spunct,      /* for random punctuation characters */
    Sword,       /* for a word constituent */
    Ssymbol,     /* symbol constituent but not word constituent */
    Sopen,       /* for a beginning delimiter */
    Sclose,      /* for an ending delimiter */
    Squote,      /* for a prefix character like Lisp ' */
    Sstring,     /* for a string-grouping character like Lisp " */
    Smath,       /* for delimiters like $ in Tex.  */
    Sescape,     /* for a character that begins a C-style escape */
    Scharquote,  /* for a character that quotes the following character */
    Scomment,    /* for a comment-starting character */
    Sendcomment, /* for a comment-ending character */
    Sinherit,    /* use the standard syntax table for this character */
    Scomment_fence, /* Starts/ends comment which is delimited on the
                       other side by any char with the same syntaxcode.  */
    Sstring_fence,  /* Starts/ends string which is delimited on the
                       other side by any char with the same syntaxcode.  */
    Smax         /* Upper bound on codes that are meaningful */
  };

구문 코드와 정규식 구문 클래스는 같은 일을 참조한다고 가정하면, 나는의 발견 사용했습니다 |cc-awk.el있는 사용 "\\s|"불균형 문자열 구분 기호를 강조 표시합니다.


2
그들은 몇 군데 예에서 사용되는 python-syntax-stringify, ruby-syntax-propertize-percent-literal다른 사람 . Sstring그래도 여기서 어떻게 다른지 알 수 없습니다 .
Wilfred Hughes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.