branch: externals/bnf-mode commit 7c98cc9edb9dba80309f8ce3ceadf3f3e51f4c7e Author: Serghei Iakovlev <serg...@phalconphp.com> Commit: Serghei Iakovlev <serg...@phalconphp.com>
Fixed misspelling, updated change log --- CHANGELOG.org | 11 ++++++++-- bnf-mode.el | 54 ++++++++++++++++------------------------------ test/bnf-mode-font-test.el | 27 +++++++---------------- test/test-helper.el | 1 + 4 files changed, 36 insertions(+), 57 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 3375510..af429f1 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -6,6 +6,13 @@ All notable changes to this project will be documented in this file. The format is based on [[http://keepachangelog.com][Keep a Changelog]] and this project adheres to [[http://semver.org][Semantic Versioning]]. ** [[https://github.com/sergeyklay/bnf-mode/compare/0.4.1...HEAD][Unreleased]] +*** Added +- Introduce ALGOL 60 comments style [[https://github.com/sergeyklay/bnf-mode/pull/4][#4]] + +*** Changed +- Only setting =bnf-mode-algol-comments-style= to non-nil will allow use + semicolons as a regular terminal symbols + ** [[https://github.com/sergeyklay/bnf-mode/compare/0.4.0...0.4.1][0.4.1]] - 2019-04-21 *** Fixes - Minor fix related to build & deploy BNF Mode on Travis CI @@ -21,7 +28,7 @@ The format is based on [[http://keepachangelog.com][Keep a Changelog]] and this ** [[https://github.com/sergeyklay/bnf-mode/compare/0.3.1...0.3.2][0.3.2]] - 2019-03-24 *** Changed -- Publish package on MELPA [[https://github.com/melpa/melpa/pull/6074][(melpa/melpa#6074)]] +- Published package on MELPA [[https://github.com/melpa/melpa/pull/6074][(melpa/melpa#6074)]] *** Fixed - In the BNF there are no strings thus treat ' and " as a regular symbols @@ -29,7 +36,7 @@ The format is based on [[http://keepachangelog.com][Keep a Changelog]] and this - In the BNF there are no grouping brackets except angle ones. Fixed *** Removed -- Removing the ~bnf-mode-version~ function. Users can easily call ~describe-package~ +- Removed the ~bnf-mode-version~ function. Users can easily call ~describe-package~ or ~pkg-info-package-version~ interactively if they want to get this information [[https://github.com/sergeyklay/bnf-mode/issues/1][(#1)]] ** [[https://github.com/sergeyklay/bnf-mode/compare/0.3.0...0.3.1][0.3.1]] - 2019-03-17 diff --git a/bnf-mode.el b/bnf-mode.el index a16739f..8b24758 100644 --- a/bnf-mode.el +++ b/bnf-mode.el @@ -84,11 +84,11 @@ :type 'hook :group 'bnf) -(defcustom bnf-mode-algol-commets-style nil +(defcustom bnf-mode-algol-comments-style nil "Non-nil means use for BNF comments style introduced in ALGOL 60. -For the purpose of including text among the symbols of a program the following -\"comment\" conventions will hold: +For the purpose of including text among the symbols of a program the +following \"comment\" conventions will hold: :------------------------------------------------:------------------: | The sequence of basic symbols: | is equivalent to | @@ -97,7 +97,8 @@ For the purpose of including text among the symbols of a program the following | begin comment <any sequence not containing ;>; | begin | :------------------------------------------------:------------------: -Note: Enabling this feature disables ABNF/EBN comments style (just \";\")." +Note: Enabling this feature will disable comments recognition which use +semicolon only (\";\")." :group 'bnf :type 'boolean) @@ -204,7 +205,7 @@ See `rx' documentation for more information about REGEXPS param." (modify-syntax-entry ?\> ")<" table) ;; Comments setup - (if bnf-mode-algol-commets-style + (if bnf-mode-algol-comments-style (modify-syntax-entry ?\; ">" table) (progn (modify-syntax-entry ?\; "<" table) @@ -213,31 +214,16 @@ See `rx' documentation for more information about REGEXPS param." table) "Syntax table in use in `bnf-mode' buffers.") -(defun bnf--bnf-syntax-propertize-function (start end) - "Apply syntax table properties to special constructs in region START to END. -Currently handled: - - - Fontify terminals with ';' character correctly" - (save-excursion - (goto-char start) - ;; Search for terminals like "<abc;>" or "<a;bc>". - ;; Does not work for terminals like "<a;bc;>". - (while (re-search-forward "\\(?:<[^>]*\\);" end t) - (when (looking-at "\\(?:[^>]\\)*>") - ;; Mark the ";" character as an extra character used in terminals - ;; along with word constituents. - (put-text-property (1- (point)) (point) - 'syntax-table (string-to-syntax "_")))))) - - -;;; Initialization - -(defconst bnf--bnf-syntax-propertize-macro +(defconst bnf--syntax-propertize (syntax-propertize-rules + ;; Fontify comments in ALGOL 60 style. ("\\(?:begin\\s-+\\|;\\s-*\\)\\(comment\\)\\(;\\|\\s-+[^;]*;\\)" (1 "<"))) - "Fontify comments in ALGOL 60 style. + "Apply syntax table properties to special constructs. Provide a macro to apply syntax table properties to comments in ALGOL 60 style. -Will be used only if `bnf-mode-algol-commets-style' is set to t") +Will be used only if `bnf-mode-algol-comments-style' is set to t") + + +;;; Initialization ;;;###autoload (define-derived-mode bnf-mode prog-mode "BNF" @@ -247,19 +233,16 @@ Will be used only if `bnf-mode-algol-commets-style' is set to t") ;; Comments setup (setq-local comment-use-syntax nil) - (if bnf-mode-algol-commets-style + (if bnf-mode-algol-comments-style (progn (setq-local comment-start "; comment ") (setq-local comment-end ";") (setq-local comment-start-skip "\\(?:\\(\\W\\|^\\)comment\\)\\s-+") - (setq-local syntax-propertize-function - bnf--bnf-syntax-propertize-macro)) + (setq-local syntax-propertize-function bnf--syntax-propertize)) (progn (setq-local comment-start "; ") (setq-local comment-end "") - (setq-local comment-start-skip "\\(?:\\(\\W\\|^\\);+\\)\\s-+") - (setq-local syntax-propertize-function - #'bnf--bnf-syntax-propertize-function))) + (setq-local comment-start-skip "\\(?:\\(\\W\\|^\\);+\\)\\s-+"))) ;; Basically `syntax-propertize-function' is a construct which belongs ;; to `font-lock'. But correct indentation depends on @@ -273,9 +256,8 @@ Will be used only if `bnf-mode-algol-commets-style' is set to t") ;; To patch our way around this, we issue a `syntax-propertize' call ;; manually, `font-lock' enabled or not. (with-silent-modifications - (if bnf-mode-algol-commets-style - (funcall syntax-propertize-function (point-min) (point-max)) - (bnf--bnf-syntax-propertize-function (point-min) (point-max)))) + (when bnf-mode-algol-comments-style + (funcall syntax-propertize-function (point-min) (point-max)))) ;; Font locking (setq font-lock-defaults diff --git a/test/bnf-mode-font-test.el b/test/bnf-mode-font-test.el index 5ac0179..0d1ade0 100644 --- a/test/bnf-mode-font-test.el +++ b/test/bnf-mode-font-test.el @@ -45,8 +45,9 @@ (should-not (bnf-test-face-at 31)) (should-not (bnf-test-face-at 35)))) -(ert-deftest bnf-mode-syntax-table/fontify-line-comment () +(ert-deftest bnf-mode-syntax-table/fontify-line-comments () :tags '(fontification syntax-table) + (custom-set-variables '(bnf-mode-algol-comments-style nil)) (bnf-test-with-temp-buffer "; A @@ -56,6 +57,12 @@ (should-not (bnf-test-face-at 5)) (should (eq (bnf-test-face-at 24) 'font-lock-comment-face)))) +;; TODO +(ert-deftest bnf-mode-syntax-table/fontify-algol-comments () + :tags '(fontification syntax-table) + (custom-set-variables '(bnf-mode-algol-comments-style t)) + (bnf-test-with-temp-buffer "" )) + (ert-deftest bnf-mode-syntax-table/fontify-nonterminals () :tags '(fontification syntax-table) (bnf-test-with-temp-buffer @@ -163,23 +170,5 @@ angle-brackets ::= are-optional" (should (eq (bnf-test-face-at 90) 'font-lock-builtin-face)) (should (eq (bnf-test-face-at 94) 'font-lock-builtin-face)))) -(ert-deftest bnf-mode-syntax-table/fontify-dotcomma-inside-rule () - :tags '(fontification syntax-table) - (bnf-test-with-temp-buffer - "<a rule> ::= <abc;> -; <foo> ::= <bar> -<a> ::= <ab;c>" - ;; "abc;" - (should (eq (bnf-test-face-at 16) 'font-lock-builtin-face)) - (should (eq (bnf-test-face-at 18) 'font-lock-builtin-face)) - ;; "; <foo> ::= <bar>" - (should (eq (bnf-test-face-at 22) 'font-lock-comment-delimiter-face)) - (should (eq (bnf-test-face-at 22) 'font-lock-comment-delimiter-face)) - (should (eq (bnf-test-face-at 23) 'font-lock-comment-face)) - (should (eq (bnf-test-face-at 37) 'font-lock-comment-face)) - ;; "ab;c" - (should (eq (bnf-test-face-at 48) 'font-lock-builtin-face)) - (should (eq (bnf-test-face-at 51) 'font-lock-builtin-face)))) - (provide 'bnf-mode-font-test) ;;; bnf-mode-font-test.el ends here diff --git a/test/test-helper.el b/test/test-helper.el index a8db9f6..c1524f7 100644 --- a/test/test-helper.el +++ b/test/test-helper.el @@ -57,6 +57,7 @@ ,(if (fboundp 'font-lock-ensure) '(font-lock-ensure) '(with-no-warnings (font-lock-fontify-buffer))) + (goto-char (point-min)) ,@body))