From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: [RFC] Alternative to sub/superscript regexp Date: Wed, 18 Dec 2013 23:13:22 +0100 Message-ID: <87sitp7qpp.fsf@gmail.com> References: <87wqjw8kuk.fsf@gmail.com> <7CF22FEC-70F1-46A5-BDE0-A07832F9EDAF@gmail.com> <87k3fv862d.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:43961) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtPMf-0007Wr-1Z for emacs-orgmode@gnu.org; Wed, 18 Dec 2013 17:13:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtPMW-0003Zf-KK for emacs-orgmode@gnu.org; Wed, 18 Dec 2013 17:13:12 -0500 Received: from mail-we0-x236.google.com ([2a00:1450:400c:c03::236]:63711) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtPMW-0003ZW-9O for emacs-orgmode@gnu.org; Wed, 18 Dec 2013 17:13:04 -0500 Received: by mail-we0-f182.google.com with SMTP id q59so270175wes.41 for ; Wed, 18 Dec 2013 14:13:03 -0800 (PST) In-Reply-To: <87k3fv862d.fsf@gmail.com> (Nicolas Goaziou's message of "Tue, 26 Nov 2013 17:46:02 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Carsten Dominik Cc: Org Mode List --=-=-= Content-Type: text/plain Completing myself, > OTOH, while we're at it, I wonder if we should keep grouping with > parenthesis. I guess that if you want to use parenthesis, you're going > to need math mode anyway, so there's no real need to make it easy to > type, e.g. : > > x^(2-i) > > which will become x$^\text{(2-i)}$ anyway. I attach the suggested patch. I removed parenthesis-grouping for the reasons I gave above. Carsten: if you'd rather keep this feature, let me know, I'll provide another patch. I also slightly changed the simplified regexp, as [:word:] includes underscores in Org syntax. I used [:alnum:] instead. Regards, --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-Change-no-brace-sub-superscript-syntax.patch >From ffda7d038326aececd9337850d4384e4fd207459 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 18 Dec 2013 22:32:13 +0100 Subject: [PATCH] Change no brace sub/superscript syntax * lisp/org.el (org-match-substring-regexp): Simplify syntax when not using braces. Also remove parenthesis as grouping characters and make the variable a defconst. (org-match-substring-with-braces-regexp): Make the variable a defconst and remove a useless group in regexp. (org-use-sub-superscripts): Update docstring. * lisp/org-element.el (org-element-subscript-parser, org-element-superscript-parser): Adapt to group changes. --- lisp/org-element.el | 17 ++++++++--------- lisp/org.el | 19 +++++++------------ 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 31add7b..17062a9 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -3372,13 +3372,12 @@ Return a list whose CAR is `subscript' and CDR a plist with Assume point is at the underscore." (save-excursion (unless (bolp) (backward-char)) - (let ((bracketsp (if (looking-at org-match-substring-with-braces-regexp) - t - (not (looking-at org-match-substring-regexp)))) + (looking-at org-match-substring-regexp) + (let ((bracketsp (match-beginning 4)) (begin (match-beginning 2)) - (contents-begin (or (match-beginning 5) + (contents-begin (or (match-beginning 4) (match-beginning 3))) - (contents-end (or (match-end 5) (match-end 3))) + (contents-end (or (match-end 4) (match-end 3))) (post-blank (progn (goto-char (match-end 0)) (skip-chars-forward " \t"))) (end (point))) @@ -3421,12 +3420,12 @@ Return a list whose CAR is `superscript' and CDR a plist with Assume point is at the caret." (save-excursion (unless (bolp) (backward-char)) - (let ((bracketsp (if (looking-at org-match-substring-with-braces-regexp) t - (not (looking-at org-match-substring-regexp)))) + (looking-at org-match-substring-regexp) + (let ((bracketsp (match-beginning 4)) (begin (match-beginning 2)) - (contents-begin (or (match-beginning 5) + (contents-begin (or (match-beginning 4) (match-beginning 3))) - (contents-end (or (match-end 5) (match-end 3))) + (contents-end (or (match-end 4) (match-end 3))) (post-blank (progn (goto-char (match-end 0)) (skip-chars-forward " \t"))) (end (point))) diff --git a/lisp/org.el b/lisp/org.el index 59f55a8..4722714 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -882,7 +882,7 @@ will be parsed as single sub- or superscripts: 10^-12 or 10^-tau a leading sign with digits or a word x^2-y^3 will be read as x^2 - y^3, because items are terminated by almost any nonword/nondigit char. - x_{i^2} or x^(2-i) braces or parenthesis do grouping. + x_{i^2} braces do grouping. Still, ambiguity is possible. So when in doubt, use {} to enclose the sub/superscript. If you set this variable to the symbol `{}', @@ -5636,21 +5636,18 @@ stacked delimiters is N. Escaping delimiters is not possible." next (concat "\\(?:" nothing left next right "\\)+" nothing))) (concat left "\\(" re "\\)" right))) -(defvar org-match-substring-regexp +(defconst org-match-substring-regexp (concat "\\(\\S-\\)\\([_^]\\)\\(" - "\\(" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)" + "\\(?:" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)" "\\|" - "\\(" (org-create-multibrace-regexp "(" ")" org-match-sexp-depth) "\\)" - "\\|" - "\\(\\(?:\\*\\|[-+]?[^-+*!@#$%^_ \t\r\n,:\"?<>~;./{}=()]+\\)\\)\\)") + "\\(?:\\*\\|[+-]?[[:alnum:].,\\]*[[:alnum:]]\\)\\)") "The regular expression matching a sub- or superscript.") -(defvar org-match-substring-with-braces-regexp +(defconst org-match-substring-with-braces-regexp (concat - "\\(\\S-\\)\\([_^]\\)\\(" - "\\(" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)" - "\\)") + "\\(\\S-\\)\\([_^]\\)" + "\\(" (org-create-multibrace-regexp "{" "}" org-match-sexp-depth) "\\)") "The regular expression matching a sub- or superscript, forcing braces.") (defun org-make-link-regexps () @@ -6087,8 +6084,6 @@ by a #." (defvar org-latex-and-related-regexp nil "Regular expression for highlighting LaTeX, entities and sub/superscript.") -(defvar org-match-substring-regexp) -(defvar org-match-substring-with-braces-regexp) (defun org-compute-latex-and-related-regexp () "Compute regular expression for LaTeX, entities and sub/superscript. -- 1.8.5.2 --=-=-=--