如何查询语法类成分作为字符串的字符串?

时间:2014-04-07 00:16:41

标签: emacs elisp

使用elisp我试图使用语法表将emacs语法类\ s_转换为构成此类的字符串。我找不到一些参考代码或我能识别的例子。

是否有人可以分享参考或代码段?

谢谢,马特

更新1 :进一步阅读后,我发现可以使用map-char-table遍历该表,累积所需的字符。

1 个答案:

答案 0 :(得分:0)

此处使用的一些实用程序来自

https://launchpad.net/s-x-emacs-werkstatt/

(defun ar-syntax-class-atpt (&optional pos)
  "Return the syntax class part of the syntax at point. "
  (interactive)
  (let* ((pos (or pos (point)))
     (erg (logand (car (syntax-after pos)) 65535)))
    (when (interactive-p) (message "%s" erg)) erg))

(defun syntax-class-bfpt ()
  "Return the syntax class part of the syntax at point. "
  (interactive)
  (let ((erg (logand (car (syntax-after (1- (point)))) 65535)))
    (when (interactive-p) (message "%s" erg)) erg))

(defun ar-syntax-atpt (&optional docu pos)
  (interactive)
  (when pos
    (goto-char pos))
  (let* ((elt (car (if (featurep 'xemacs)
                       (char-syntax (char-after))
                     (syntax-after (point)))))
         (stax (cond ((eq elt 0) "0 whitespace")
                     ((eq elt 5) "5 close parenthesis")
                     ((eq elt 10) "10 character quote")
                     ((eq elt 1) "1 punctuation")
                     ((eq elt 6) "6 expression prefix")
                     ((eq elt 11) "11 comment-start")
                     ((eq elt 2) "2 word")
                     ((eq elt 7) "7 string quote")
                     ((eq elt 12) "12 comment-end")
                     ((eq elt 3) "3 symbol")
                     ((eq elt 8) "8 paired delimiter")
                     ((eq elt 13) "13 inherit")
                     ((eq elt 4) "4 open parenthesis")
                     ((eq elt 9) "9 escape")
                     ((eq elt 14) "14 generic comment")
                     ((eq elt 15) "15 generic string"))))
    (when (interactive-p)
      (message (format "%s" stax)))
    (if docu
        (format "%s" stax)
      elt)))

(defun ar-syntax-in-region-atpt (beg end)
  (interactive "r")
  (save-excursion
    (goto-char beg)
    (let (erg)
      (while (< (point) end)
        (setq erg (concat erg "\n" "\"" (char-to-string (char-after)) "\"" "  is " (ar-syntax-atpt t)))
        (forward-char 1))
      (message "%s" erg)
      erg)))

(defun syntax-bfpt ()
  (interactive)
  (let ((stax (syntax-after (1- (point)))))
    (when (interactive-p)
      (message (format "%s" stax)))
    stax))