प्रमुख मोड सिर्फ चेहरों का निरीक्षण क्यों नहीं करते?


10

जब एक प्रमुख मोड लिखते हैं, तो यह अक्सर जानना उपयोगी होता है 'एक स्ट्रिंग में बिंदु?' 'एक टिप्पणी में इंगित है?'

अधिकांश प्रमुख मोड प्रोग्रामिंग भाषा को पार्स करने का प्रयास करते हैं। उदाहरण के लिए:

  • python-syntax-content कॉल syntax-ppss
  • haskell-fill-paragraphकॉल syntax-ppssऔरre-search-forward
  • c-in-comment-line-prefix-p चारों ओर कदम और कॉल looking-at
  • sp-point-in-commentकॉल syntax-ppssकरता है, लेकिन यह भी जाँचता है कि यह एक टिप्पणी परिधि पर है

हालाँकि, यह कुछ मामलों में काम नहीं करता है। ऑर्ग-मोड बफ़र्स में, इन तरीकों से स्रोत ब्लॉक में टिप्पणियों का सही ढंग से पता नहीं लगाया जाता है।

यह भी व्यर्थ लगता है, क्योंकि बफर पहले से ही हाइलाइट किए गए टिप्पणियों को दिखा रहा है

इसके बजाय, आप बस बिंदु पर चेहरों का निरीक्षण कर सकते हैं:

(defun wh--get-faces (pos)
  "Get all the font faces at POS."
  (remq nil
        (list
         (get-char-property pos 'read-face-name)
         (get-char-property pos 'face)
         (plist-get (text-properties-at pos) 'face))))

(defun wh-string-p (pos)
  "Return non-nil if POS is inside a string."
  (memq 'font-lock-string-face (wh--get-faces pos)))

प्रमुख मोड ऐसा क्यों नहीं करते हैं? बफ़र पहले से ही फ़ॉन्टबद्ध है, इसलिए मुझे उम्मीद है कि यह तेज़, अधिक मजबूत होगा, और कम कोड की आवश्यकता होगी।


1
मुझे यह सवाल पसंद है। हालांकि, अगर आप उपयोग नहीं करते हैं तो क्या होगा font-lock-mode? (ऐसा नहीं है कि मुझे लगता है कि आपको चाहिए।)
mbork

जवाबों:


12

समस्या यह है कि यह अधिक मजबूत नहीं है।

सबसे पहले, प्रमुख मोड ठीक वही होते हैं जो यह तय करने के लिए जिम्मेदार होते हैं कि टिप्पणी या स्ट्रिंग क्या है। यदि वे फ़ॉन्ट-लॉकिंग के उद्देश्य से उन्हें सफलतापूर्वक परिभाषित करने में सक्षम थे, तो उन्हें अन्य उद्देश्यों के लिए भी ऐसा करने में सक्षम होना चाहिए।

दूसरे, उस बिंदु के संदर्भ को निर्धारित करने के लिए सिंटैक्स को पढ़ना, जो अंदर है, इसे सही तरीके से करने का अधिक मजबूत तरीका है। यदि आपको ऐसे उदाहरण मिले हैं जो विफल हो जाते हैं, तो यह प्रमुख-मोड लेखक को बग रिपोर्ट प्रस्तुत करने के लायक है।


चेहरे का निरीक्षण करने का कारण कम मजबूत है, क्योंकि यह कुछ स्थितियों में विफल हो सकता है।

  1. शुरुआत के लिए, उपयोगकर्ता अक्षम हो सकता है font-lock-mode(शायद यह एक बड़ा बफर है), लेकिन font-lock-modeसक्षम के साथ भी , चेहरे कुछ अस्थिर हैं।

  2. साथ ही, उपयोगकर्ता के पास एक मामूली-मोड हो सकता है जो कुछ जोड़ता है font-lock-keywords(जैसे TODOटिप्पणियों में हाइलाइटिंग )। या एक छोटी सी विधा हो सकती है जो फ़ॉन्ट-लॉक के बफर को संशोधित करने के बाद गतिशील रूप से कुछ चेहरे पर लागू होती है।

सारांश में, प्रमुख मोड की कोई गारंटी नहीं है कि इसके द्वारा परिभाषित चेहरे वर्तमान में लागू किए गए चेहरे हैं।


2

मुझे लगता है कि मुख्य कारण यह है कि फ़ॉन्ट-लॉक का उपयोग होता है syntax-ppss

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.