कैसे पता लगाने के लिए अगर एक मिलान जोड़ी के अंदर?


16

प्रश्न: एक मैच्योर जोड़ी के अंदर बिंदु है या नहीं, इसका पता लगाने का एक सामान्य तरीका है?

वह है: क्या एक सामान्य विधेय कार्य (या कुछ) है जो यह निर्धारित कर सकता है कि बिंदु एक मिलान जोड़ी या कुछ मनमाने ढंग से चुने गए पात्रों के बीच है? मैं एक के बारे में सोच रहा हूं जो बिंदु के संदर्भ tमें निम्नलिखित परिदृश्यों का मूल्यांकन करेगा , कहेगा !:

"!"   (quotes in general)
``!'' (LaTeX quotes)
$!$   (LaTeX math)
(!)   (lisp parens)
*!*   (org emphasis)

संपादित करें : syntax-ppssयह एक अच्छा प्रारंभिक बिंदु प्रतीत होता है, लेकिन यह मेरे लिए स्पष्ट नहीं है कि कोई इसे बहु-चरित्र मिलान वाले जोड़े (जैसे, `` LaTeX उद्धरण '', या यहां तक ​​कि मिलान <b>html tags</b>) के लिए कैसे अनुकूलित करेगा । अगर वहाँ एक सामान्य समाधान है, या अगर यह एक उद्देश्य से निर्मित parser की आवश्यकता होगी मैं सोच रहा हूँ।

जवाबों:


16

syntax-ppssयहाँ मदद हो सकती है। यह एक सूची देता है जिसमें ये तत्व भी हैं:

  • तत्व ०: परनों में गहराई
  • तत्व 3: गैर-शून्य अगर एक स्ट्रिंग के अंदर

आप इसे इस तरह इस्तेमाल कर सकते हैं:

(or (> (nth 0 (syntax-ppss)) 0)
    (nth 3 (syntax-ppss)))

बफर (तार और मिलान के लिए मिलान) में एक उचित रूप से सेट-सिंटैक्स-टेबल के साथ फ़ंक्शन को वह करना चाहिए जो आप अपेक्षा करते हैं। यदि मोड का सिंटैक्स-टेबल का उपयोग करना संभव नहीं है तो आप उपयोग करने का सहारा ले सकते हैं with-syntax-table


मुझे यह इंगित करना चाहिए कि parse-partial-sexpडेटा संरचना बताती है कि syntax-ppssमैं जिस एलिस्सिपल मैनुअल अनुभाग से जुड़ा था , उससे अधिक विस्तार से डेटा संरचना वापस आ गई ।
पेपरिका

2

यदि आप उदाहरण के लिए जाँच करना चाहते हैं कि घुंघराले ब्रेसिज़ के बीच, इसका उपयोग करें:

(and (looking-back "{") (looking-at "}"))

ज़रूर, आप जो चाहें घुंघराले ब्रेसिज़ को बदल सकते हैं।

संपादित करें:

एक अधिक उपयोगी फ़ंक्शन इसके करीब कुछ होगा:

(defun test-inside-curly-braces ()
 (interactive)
 (when (and (looking-back "{\\(.*?\\)") (looking-at "\\(.*?\\)}"))
  (message "inside curly braces")))

2
यदि केवल बिंदु बंद होने पर काम करता है }, और इसके बीच कुछ भी नहीं है {}। Regexps के साथ युग्मित सीमांकक प्राप्त करना मुश्किल हो सकता है। syntax-ppsसुझाव दिया @paprika के रूप में उपयोग करने के लिए बेहतर है ।
टायलर

@ टायलर केवल तभी काम करता है जब समापन पर बिंदु }वह व्यवहार नहीं है जिसे मैंने देखा है: \
_

looking-atबिंदु पर शुरू होने वाले पाठ की जांच करता है। जब तक कि }आपके पहले कथन पर बिंदु काम न करे, तब तक काम नहीं करना चाहिए? शायद Emacs संस्करणों के बीच एक अंतर। : /
टायलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.