एक स्ट्रिंग बाड़ या टिप्पणी बाड़ क्या है?


9

modify-syntax-entryनिम्नलिखित के लिए docstring कहता है:

(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 को खुद देना चाहिए। डॉक्टर स्ट्रिंग को कम से कम " बाड़ " शब्द का वर्णन करना चाहिए । कृपया डॉक बग दाखिल करने पर विचार करें M-x report-emacs-bug:।
ड्रू

आम तौर पर, एक स्ट्रिंग या टिप्पणी सीमांकक निर्दिष्ट कर सकता है कि कौन सा चरित्र एक स्ट्रिंग को समाप्त करता है। उदा । "केवल दूसरे द्वारा समाप्त किया जा सकता है "। हालांकि, जब एक syntax-propertizeस्ट्रिंग को पहचानने के लिए एक कस्टम फ़ंक्शन का उपयोग किया जाता है, तो यह संभव नहीं है। इसके बजाय, आप क्रमशः |और !, का उपयोग करके तार और टिप्पणियों के अंतिम बिंदुओं को चिह्नित कर सकते हैं। (दस्तावेज़ीकरण कहता है कि इन वाक्यविन्यास वर्गों को मुख्य रूप से syntax-tableपाठ संपत्ति का उपयोग करते समय उपयोग किया जाना चाहिए , जो कि एक कस्टम syntax-propertizeफ़ंक्शन सेट है।)
लिंडनाइडेंट

जवाबों:


8

वे मैनुअल में प्रलेखित हैं, लेकिन यह "बाड़" शब्द का उपयोग नहीं करता है। वाक्यविन्यास वर्ग संदर्भ में वर्ण !और |"सामान्य टिप्पणी सीमांकक" और "सामान्य स्ट्रिंग प्रलापकर्ता" के रूप में सूचीबद्ध हैं ।

इन पात्रों को Emacs 20.1 में पेश किया गया था। NEWS फाइल का हवाला देते हुए:

दो नए वाक्यविन्यास-कोड हैं, !और |(संख्यात्मक मान 14 और 15)। एक कोड वाला एक चरित्र !एक टिप्पणी शुरू करता है जो केवल उसी कोड के साथ किसी अन्य वर्ण द्वारा समाप्त होता है (जब तक कि उद्धृत नहीं किया जाता है)। एक कोड वाला एक वर्ण |एक स्ट्रिंग शुरू करता है जो केवल उसी कोड के साथ किसी अन्य वर्ण द्वारा समाप्त होता है (जब तक कि उद्धृत नहीं किया जाता है)।

ये कोड मुख्य रूप से 'सिंटैक्स-टेबल' टेक्स्ट प्रॉपर्टी के मान के रूप में उपयोग के लिए हैं।

मुझे !मानक Emacs मोड में कोई उपयोग नहीं मिल रहा है । के कई उपयोग हैं |। अभिप्रेरित उपयोग का मामला ऐसी भाषाएं हैं जिनमें शाब्दिक रूप से स्ट्रिंग स्ट्रिंग के अलावा अन्य सीमांकक का उपयोग होता है, जो आमतौर पर संदर्भ के आधार पर फ़ॉन्ट लॉकिंग द्वारा जोड़े गए ओवरले के माध्यम से निर्धारित होता है। उदाहरण के लिए, पर्ल में, एक नियमित अभिव्यक्ति मैच लिखा जा सकता है /REGEXP/, m/REGEXP/या m~REGEXP~या m[REGEXP]या किसी भी संख्या में भिन्नता हो सकती है। एक शाब्दिक स्ट्रिंग लिखा जा सकता है 'STRING', लेकिन यह भी q'STRING', q~STRING~, q[STRING], आदि फ़ॉन्ट ताला ऐसे निर्माणों पहचान लेता है, यह उद्धरण वर्ण (सेट // /या '/ 'या ~/ ~या [/]मैंने जो उदाहरण दिए हैं) जेनेरिक स्ट्रिंग सीमांकक सिंटैक्स के लिए। यहां तक ​​कि अगर एक अभ्यस्त स्ट्रिंग सीमांकक मौजूद है (उदाहरण के लिए q[foo"bar]), तो उस सीमांकक को स्ट्रिंग का एक साधारण हिस्सा माना जाएगा, यह स्ट्रिंग को समाप्त नहीं करेगा।

मैं स्वीकार करता हूं कि मुझे कोई निश्चित लाभ दिखाई नहीं देता - उदाहरण के लिए CPerl मोड कुछ बहुत फैंसी चीजें करता है और इस सुविधा का उपयोग नहीं करता है।


2
रूबी मोड का उपयोग !हाइलाइट करने के लिए =begin... =endब्लॉक।
लिंडनाइडर

5

वाक्य-रचना से लिया गया:

/* 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यहाँ से अलग कैसे है ।
विल्फ्रेड ह्यूजेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.