emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 23ecd63: * lisp/mail/footnote.el: Reduce redundancy


From: Stefan Monnier
Subject: [Emacs-diffs] master 23ecd63: * lisp/mail/footnote.el: Reduce redundancy in roman&hebrew defs
Date: Tue, 26 Dec 2017 00:08:56 -0500 (EST)

branch: master
commit 23ecd63ba498aa616e2a768090bca360e6d32309
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * lisp/mail/footnote.el: Reduce redundancy in roman&hebrew defs
    
    (footnote-roman-lower-regexp, footnote-roman-upper-regexp)
    (footnote-roman-upper-list): Auto-generate from footnote-roman-lower-list.
    (footnote-hebrew-numeric-regex): Auto-generate from footnote-hebrew-numeric.
    (footnote--hebrew-numeric): Simplify.
    (footnote-hebrew-symbolic-regex): Generate from footnote-hebrew-symbolic.
---
 lisp/mail/footnote.el | 44 ++++++++++++++++++++++++++------------------
 1 file changed, 26 insertions(+), 18 deletions(-)

diff --git a/lisp/mail/footnote.el b/lisp/mail/footnote.el
index 2448211..121e771 100644
--- a/lisp/mail/footnote.el
+++ b/lisp/mail/footnote.el
@@ -245,7 +245,8 @@ Wrapping around the alphabet implies successive repetitions 
of letters."
     (50 . "l") (100 . "c") (500 . "d") (1000 . "m"))
   "List of roman numerals with their values.")
 
-(defconst footnote-roman-lower-regexp "[ivxlcdm]+"
+(defconst footnote-roman-lower-regexp
+  (concat "[" (mapconcat #'cdr footnote-roman-lower-list "") "]+")
   "Regexp of roman numerals.")
 
 (defun footnote--roman-lower (n)
@@ -254,11 +255,11 @@ Wrapping around the alphabet implies successive 
repetitions of letters."
 
 ;;; ROMAN UPPER
 (defconst footnote-roman-upper-list
-  '((1 . "I") (5 . "V") (10 . "X")
-    (50 . "L") (100 . "C") (500 . "D") (1000 . "M"))
+  (mapcar (lambda (x) (cons (car x) (upcase (cdr x))))
+          footnote-roman-lower-list)
   "List of roman numerals with their values.")
 
-(defconst footnote-roman-upper-regexp "[IVXLCDM]+"
+(defconst footnote-roman-upper-regexp (upcase footnote-roman-lower-regexp)
   "Regexp of roman numerals.  Not complete")
 
 (defun footnote--roman-upper (n)
@@ -355,14 +356,15 @@ Use Unicode characters for footnoting."
 
 ;; Hebrew
 
-(defconst footnote-hebrew-numeric-regex "[אבגדהוזחטיכלמנסעפצקרשת']+")
-; (defconst footnote-hebrew-numeric-regex 
"\\([אבגדהוזחט]'\\)?\\(ת\\)?\\(ת\\)?\\([קרשת]\\)?\\([טיכלמנסעפצ]\\)?\\([אבגדהוזחט]\\)?")
-
 (defconst footnote-hebrew-numeric
   '(
     ("א" "ב" "ג" "ד" "ה" "ו" "ז" "ח" "ט")
     ("י" "כ" "ל" "מ" "נ" "ס" "ע" "פ" "צ")
-    ("ק" "ר" "ש" "ת" "תק" "תר"" תש" "תת" "תתק")))
+    ("ק" "ר" "ש" "ת" "תק" "תר" "תש" "תת" "תתק")))
+
+(defconst footnote-hebrew-numeric-regex
+  (concat "[" (apply #'concat (apply #'append footnote-hebrew-numeric)) "']+"))
+;; (defconst footnote-hebrew-numeric-regex 
"\\([אבגדהוזחט]'\\)?\\(ת\\)?\\(ת\\)?\\([קרשת]\\)?\\([טיכלמנסעפצ]\\)?\\([אבגדהוזחט]\\)?")
 
 (defun footnote--hebrew-numeric (n)
   "Supports 9999 footnotes, then rolls over."
@@ -371,25 +373,27 @@ Use Unicode characters for footnoting."
          (hundreds (/ (mod n 1000) 100))
          (tens (/ (mod n 100) 10))
          (units (mod n 10))
-         (special (if (not (= tens 1)) nil
-                    (or (when (= units 5) "טו")
-                        (when (= units 6) "טז")))))
+         (special (cond
+                   ((not (= tens 1)) nil)
+                   ((= units 5) "טו")
+                   ((= units 6) "טז"))))
     (concat
      (when (/= 0 thousands)
        (concat (nth (1- thousands) (nth 0 footnote-hebrew-numeric)) "'"))
      (when (/= 0 hundreds)
        (nth (1- hundreds) (nth 2 footnote-hebrew-numeric)))
-     (if special special
-      (concat
-        (when (/= 0 tens) (nth (1- tens) (nth 1 footnote-hebrew-numeric)))
-        (when (/= 0 units) (nth (1- units) (nth 0 
footnote-hebrew-numeric))))))))
-
-(defconst footnote-hebrew-symbolic-regex "[אבגדהוזחטיכלמנסעפצקרשת]")
+     (or special
+         (concat
+          (when (/= 0 tens) (nth (1- tens) (nth 1 footnote-hebrew-numeric)))
+          (when (/= 0 units) (nth (1- units) (nth 0 
footnote-hebrew-numeric))))))))
 
 (defconst footnote-hebrew-symbolic
   '(
     "א" "ב" "ג" "ד" "ה" "ו" "ז" "ח" "ט" "י" "כ" "ל" "מ" "נ" "ס" "ע" "פ" "צ" 
"ק" "ר" "ש" "ת"))
 
+(defconst footnote-hebrew-symbolic-regex
+  (concat "[" (apply #'concat footnote-hebrew-symbolic) "]"))
+
 (defun footnote--hebrew-symbolic (n)
   "Only 22 elements, per the style of eg. 'פירוש שפתי חכמים על רש״י'.
 Proceeds from `י' to `כ', from `צ' to `ק'. After `ת', rolls over to `א'."
@@ -409,7 +413,11 @@ Proceeds from `י' to `כ', from `צ' to `ק'. After `ת', 
rolls over to `א'."
   "Styles of footnote tags available.
 By default, Arabic numbers, English letters, Roman Numerals,
 Latin and Unicode superscript characters, and Hebrew numerals
-are available.")
+are available.
+Each element of the list should be of the form (NAME FUNCTION REGEXP)
+where NAME is a symbol, FUNCTION takes a footnote number and
+returns the corresponding representation in that style as a string,
+and REGEXP should be a regexp that matches any output of FUNCTION.")
 
 (defcustom footnote-style 'numeric
   "Default style used for footnoting.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]