diff elpa/auctex-12.2.4/style/fontspec.el @ 207:ded909e32640

auctex: new version from ELPA
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Fri, 08 Jan 2021 19:42:09 -0500
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/elpa/auctex-12.2.4/style/fontspec.el
@@ -0,0 +1,409 @@
+;;; fontspec.el --- AUCTeX style for `fontspec.sty' version 2.6a.
+
+;; Copyright (C) 2013, 2017, 2018 Free Software Foundation, Inc.
+
+;; Maintainer: auctex-devel@gnu.org
+;; Author: Mosè Giordano <mose@gnu.org>
+;; Keywords: tex
+
+;; This file is part of AUCTeX.
+
+;; AUCTeX is free software; you can redistribute it and/or modify it
+;; under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3, or (at your option)
+;; any later version.
+
+;; AUCTeX is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with AUCTeX; see the file COPYING.  If not, write to the Free
+;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+;; 02110-1301, USA.
+
+;;; Commentary:
+
+;; This file adds support for `fontspec.sty' version 2.6a.  Starting
+;; with `fontspec.sty' v2.4, the order of mandatory font names and
+;; optional font features in related macros has changed, i.e. optional
+;; argument comes after the mandatory one.  This change is now (April
+;; 2017) implemented in this file.  Fontification support retains
+;; backward compatibilty.
+
+;;; Code:
+
+;; Silence the compiler:
+(declare-function font-latex-add-keywords
+		  "font-latex"
+		  (keywords class))
+
+(declare-function LaTeX-color-definecolor-list "color" ())
+(declare-function LaTeX-xcolor-definecolor-list "xcolor" ())
+
+(defvar LaTeX-fontspec-font-features
+  '(;; 5 Font selection
+    ("Extension" (".otf" ".ttf" ".ttc" ".dfont"))
+    ("Path")
+    ;; 6.1 More control over font shape selection
+    ("BoldFont")
+    ("ItalicFont")
+    ("BoldItalicFont")
+    ("SlantedFont")
+    ("BoldSlantedFont")
+    ("SmallCapsFont")
+    ;; 6.2 Specifically choosing the NFSS family
+    ("NFSSFamily")
+    ("FontFace")
+    ;; 11 Different features for different font shapes
+    ("UprightFeatures")
+    ("BoldFeatures")
+    ("ItalicFeatures")
+    ("BoldItalicFeatures")
+    ("SlantedFeatures")
+    ("BoldSlantedFeatures")
+    ("SmallCapsFeatures")
+    ;; 13 Different features for different font sizes
+    ("SizeFeatures")
+    ;; 14 Font independent options
+    ("Color")
+    ("Scale" ("MatchLowercase" "MatchUppercase"))
+    ("WordSpace")
+    ("PunctuationSpace")
+    ("HyphenChar")
+    ("OpticalSize")
+    ("AutoFakeBold")
+    ("AutoFakeSlant")
+    ("FakeSlant")
+    ("FakeStretch")
+    ("FakeBold")
+    ("LetterSpace")
+    ;; 16 OpenType options
+    ("Ligatures" ("Required"      "RequiredOff"
+		  "Common"        "CommonOff"
+		  "Contextual"    "ContextualOff"
+		  "Rare"          "RareOff"
+		  "Discretionary" "DiscretionaryOff"
+		  "Historic"      "HistoricOff"
+		  "TeX"
+		  "ResetAll"))
+    ("Letters" ("Uppercase"           "UppercaseOff"
+		"SmallCaps"           "SmallCapsOff"
+		"PetiteCaps"          "PetiteCapsOff"
+		"UppercaseSmallCaps"  "UppercaseSmallCapsOff"
+		"UppercasePetiteCaps" "UppercasePetiteCapsOff"
+		"Unicase"             "UnicaseOff"
+		"ResetAll"))
+    ("Numbers" ("Uppercase"    "UppercaseOff"
+		"Lowercase"    "LowercaseOff"
+		"Lining"       "LiningOff"
+		"OldStyle"     "OldStyleOff"
+		"Proportional" "ProportionalOff"
+		"Monospaced"   "MonospacedOff"
+		"SlashedZero"  "SlashedZeroOff"
+		"Arabic"       "ArabicOff"
+		"ResetAll"))
+    ("Contextuals" ("Swash"       "SwashOff"
+		    "Alternate"   "AlternateOff"
+		    "WordInitial" "WordInitialOff"
+		    "WordFinal"   "WordFinalOff"
+		    "LineFinal"   "LineFinalOff"
+		    "Inner"       "InnerOff"
+		    "ResetAll"))
+    ("VerticalPosition" ("Superior"           "SuperiorOff"
+			 "Inferior"           "InferiorOff"
+			 "Numerator"          "NumeratorOff"
+			 "Denominator"        "DenominatorOff"
+			 "ScientificInferior" "ScientificInferiorOff"
+			 "Ordinal"            "OrdinalOff"
+			 "ResetAll"))
+    ("Fraction" ("On" "Off" "Reset" "Alternate" "AlternateOff" "ResetAll"))
+    ("StylisticSet")
+    ("CharacterVariant")
+    ("Alternate" ("Random"))
+    ("Style" ("Alternate"      "AlternateOff"
+	      "Italic"         "ItalicOff"
+	      "Ruby"           "RubyOff"
+	      "Swash"          "SwashOff"
+	      "Cursive"        "CursiveOff"
+	      "Historic"       "HistoricOff"
+	      "TitlingCaps"    "TitlingCapsOff"
+	      "HorizontalKana" "HorizontalKanaOff"
+	      "VerticalKana"   "VerticalKanaOff"
+	      "ResetAll"))
+    ("Diacritics" ("MarkToBase" "MarkToBaseOff"
+		   "MarkToMark" "MarkToMarkOff"
+		   "AboveBase"  "AboveBaseOff"
+		   "BelowBase"  "BelowBaseOff"
+		   "ResetAll"))
+    ("Kerning" ("Uppercase" "UppercaseOff" "On" "Off" "Reset" "ResetAll"))
+    ("CharacterWidth" ("Proportional"          "ProportionalOff"
+		       "Full"                  "FullOff"
+		       "Half"                  "HalfOff"
+		       "Third"                 "ThirdOff"
+		       "Quarter"               "QuarterOff"
+		       "AlternateProportional" "AlternateProportionalOff"
+		       "AlternateHalf"         "AlternateHalfOff"
+		       "ResetAll"))
+    ("Annotation")
+    ("CJKShape" ("Traditional"
+		 "Simplified"
+		 "JIS1978"
+		 "JIS1983"
+		 "JIS1990"
+		 "Expert"
+		 "NLC"))
+    ("Vertical" ("RotatedGlyphs"         "RotatedGlyphsOff"
+		 "AlternatesForRotation" "AlternatesForRotationOff"
+		 "Alternates"            "AlternatesOff"
+		 "KanaAlternates"        "KanaAlternatesOff"
+		 "Kerning"               "KerningOff"
+		 "AlternateMetrics"      "AlternateMetricsOff"
+		 "HalfMetrics"           "HalfMetricsOff"
+		 "ProportionalMetrics"   "ProportionalMetricsOff"
+		 "ResetAll"))
+    ;; 25 Going behind fontspec's back: Offer only an excerpt of all
+    ;; possible tags:
+    ("RawFeature" ("frac" "lnum" "onum" "pnum" "smcp" "tnum" "zero")))
+  "Font features options for macros of the fontspec package.")
+
+(defvar LaTeX-fontspec-font-features-local nil
+  "Buffer-local font features options for macros of the fontspec package.")
+(make-variable-buffer-local 'LaTeX-fontspec-font-features-local)
+
+(defvar LaTeX-fontspec-font-list nil
+  "List of the fonts accessible to fontspec.")
+
+(defun LaTeX-fontspec-arg-font (optional &optional prompt)
+  "Prompt for a font name with completion.
+If OPTIONAL is non-nil, insert the resulting value as an optional
+argument, otherwise as a mandatory one.  Use PROMPT as the prompt
+string.
+
+Customize `LaTeX-fontspec-arg-font-search' in order to decide how
+to retrieve the list of fonts."
+  (unless LaTeX-fontspec-font-list
+    (when (if (eq LaTeX-fontspec-arg-font-search 'ask)
+	      (not (y-or-n-p "Find font yourself? "))
+	    LaTeX-fontspec-arg-font-search)
+      (message "Searching for fonts...")
+      (with-temp-buffer
+	(shell-command "luaotfload-tool --list=basename" t)
+	;; Search for the font base names and full names, and add them to
+	;; `LaTeX-fontspec-font-list'.  The list is in the form
+	;;     <base name><TAB><full name><TAB><version>
+	(while
+	    (re-search-forward "^\\([^\n\r\t]*\\)\t\\([^\n\r\t]*\\)\t.*$" nil t)
+	  (add-to-list 'LaTeX-fontspec-font-list (match-string-no-properties 1))
+	  (add-to-list 'LaTeX-fontspec-font-list
+		       (match-string-no-properties 2))))
+      (message "Searching for fonts...done")))
+  (TeX-argument-insert
+   (completing-read
+    (TeX-argument-prompt optional prompt "Font name")
+    (or LaTeX-fontspec-font-list LaTeX-fontspec-font-list-default))
+   optional))
+
+(defun LaTeX-fontspec-update-font-features ()
+  "Update Color key=values in `LaTeX-fontspec-font-features-local'."
+  ;; Check if any color defininig package is loaded and update the
+  ;; key=values for coloring.  Prefer xcolor.sty if both packages are
+  ;; loaded.
+  (when (or (member "xcolor" (TeX-style-list))
+	    (member "color" (TeX-style-list)))
+    (let* ((colorcmd (if (member "xcolor" (TeX-style-list))
+			 #'LaTeX-xcolor-definecolor-list
+		       #'LaTeX-color-definecolor-list))
+	   (tmp (copy-alist LaTeX-fontspec-font-features)))
+      (setq tmp (assq-delete-all (car (assoc "Color" tmp)) tmp))
+      (push (list "Color" (mapcar #'car (funcall colorcmd))) tmp)
+      (setq LaTeX-fontspec-font-features-local
+	    (copy-alist tmp)))))
+
+;; Setup for \newfontfamily and \newfontface:
+(TeX-auto-add-type "fontspec-newfontcmd" "LaTeX")
+
+(defvar LaTeX-fontspec-newfontcmd-regexp
+  '("\\\\newfontfa\\(?:ce\\|mily\\)[ \t\n\r%]*\\\\\\([a-zA-Z]+\\)"
+    1 LaTeX-auto-fontspec-newfontcmd)
+  "Matches new macros defined with \\newfontface and \\newfontfamily.")
+
+(defun LaTeX-fontspec-auto-prepare ()
+  "Clear `LaTeX-auto-fontspec-newfontcmd' before parsing."
+  (setq LaTeX-auto-fontspec-newfontcmd nil))
+
+(defun LaTeX-fontspec-auto-cleanup ()
+  "Process parsed elements for fontspec package."
+  (dolist (mac (mapcar #'car (LaTeX-fontspec-newfontcmd-list)))
+    ;; Add macro to list of known macros
+    (TeX-add-symbols mac)
+    ;; Cater for fontification
+    (when (and (featurep 'font-latex)
+	       (eq TeX-install-font-lock 'font-latex-setup))
+      (font-latex-add-keywords `((,mac ""))
+			       'type-declaration)))
+  ;; Update values of Color key:
+  (LaTeX-fontspec-update-font-features))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-fontspec-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-fontspec-auto-cleanup t)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(TeX-add-style-hook
+ "fontspec"
+ (lambda ()
+   (TeX-check-engine-add-engines 'luatex 'xetex)
+   (TeX-run-style-hooks "expl3" "xparse")
+
+   ;; Add fontspec to the parser.
+   (TeX-auto-add-regexp LaTeX-fontspec-newfontcmd-regexp)
+
+   ;; Activate the buffer local version of font features:
+   (setq LaTeX-fontspec-font-features-local
+	 (copy-alist LaTeX-fontspec-font-features))
+
+   (TeX-add-symbols
+    ;; 4.3 Commands for old-style and lining numbers: \oldstylenums is
+    ;; already provided by LaTeX, so just add \liningnums here
+    '("liningnums" "Numbers")
+
+    ;; 4.5 Emphasis and nested emphasis
+    ;; \emshape seems to be an internal macro
+    "emshape"
+    '("emfontdeclare" t)
+    "emreset"
+
+    ;; 4.6 Strong emphasis
+    '("strong" t)
+    '("strongfontdeclare" t)
+    "strongreset"
+
+    ;; 5 Font selection
+    '("fontspec"
+      LaTeX-fontspec-arg-font
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+
+    ;; Default font families
+    '("setmainfont"
+      (LaTeX-fontspec-arg-font "Main font name")
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+    '("setsansfont"
+      (LaTeX-fontspec-arg-font "Sans font name")
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+    '("setmonofont"
+      (LaTeX-fontspec-arg-font "Mono font name")
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+
+    ;; 5.3 Querying whether a font exists
+    '("IfFontExistsTF" LaTeX-fontspec-arg-font 2)
+
+    ;; 6 commands to select font families
+    '("newfontfamily" TeX-arg-define-macro
+      LaTeX-fontspec-arg-font
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+
+    '("newfontface" TeX-arg-define-macro
+      LaTeX-fontspec-arg-font
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"])
+
+    ;; 6.4 Math(s) fonts
+    '("setmathrm" "Font name" [ "Font features" ])
+    '("setmathsf" "Font name" [ "Font features" ])
+    '("setmathtt" "Font name" [ "Font features" ])
+    '("setboldmathrm" "Font name" [ "Font features" ])
+
+    ;; 8 Default settings
+    '("defaultfontfeatures" [ LaTeX-fontspec-arg-font ]
+      (TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"))
+    '("defaultfontfeatures+" [ LaTeX-fontspec-arg-font ]
+      (TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"))
+
+    ;; 10 Working with the currently selected features
+    '("IfFontFeatureActiveTF"
+      [TeX-arg-key-val LaTeX-fontspec-font-features-local "Font feature"] 2)
+
+    ;; Changing the currently selected features
+    '("addfontfeatures"
+      (TeX-arg-key-val LaTeX-fontspec-font-features-local "Font features"))
+
+    ;; 23 Defining new features
+    '("newAATfeature"
+      (TeX-arg-eval completing-read
+		    (TeX-argument-prompt optional nil "Existing feature")
+		    LaTeX-fontspec-font-features-local)
+      "New option" 2)
+
+    '("newopentypefeature"
+      (TeX-arg-eval completing-read
+		    (TeX-argument-prompt optional nil "Existing feature")
+		    LaTeX-fontspec-font-features-local)
+      "New option" t)
+
+    '("newfontfeature" "New feature" t)
+
+    ;; 24 Defining new scripts and languages
+    '("newfontscript" "Script name" "OpenType tag")
+    '("newfontlanguage" "Language name" "OpenType tag")
+
+    ;; 26 Renaming existing features & options
+    '("aliasfontfeature"
+      (TeX-arg-eval completing-read
+		    (TeX-argument-prompt optional nil "Existing feature")
+		    LaTeX-fontspec-font-features-local)
+      "New name")
+
+    '("aliasfontfeatureoption"
+      (TeX-arg-eval
+       (lambda ()
+	 (let* ((key (completing-read
+		      (TeX-argument-prompt optional nil "Feature")
+		      LaTeX-fontspec-font-features-local))
+		(val (completing-read
+		      (TeX-argument-prompt optional nil "Existing name")
+		      (cadr (assoc key LaTeX-fontspec-font-features-local)))))
+	   (TeX-argument-insert key optional)
+	   (format "%s" val))))
+      "New name") )
+
+   (LaTeX-add-environments
+    ;; 4.6 Strong emphasis
+    '("strong"))
+
+   ;; Fontification
+   (when (and (featurep 'font-latex)
+	      (eq TeX-install-font-lock 'font-latex-setup))
+     (font-latex-add-keywords '(("fontspec"    "[{[")
+				("setmainfont" "[{[")
+				("setsansfont" "[{[")
+				("setmonofont" "[{[")
+				("newfontfamily" "\\[{[")
+				("newfontface"   "\\[{[")
+				("setmathrm" "[{[")
+				("setmathsf" "[{[")
+				("setmathtt" "[{[")
+				("setboldmathrm" "[{[")
+				("defaultfontfeatures" "+[{")
+				("addfontfeature"  "{")
+				("addfontfeatures" "{")
+				("newfontscript"   "{{")
+				("newfontlanguage" "{{")
+				("emfontdeclare"   "{")
+				("strongfontdeclare"  "{")
+				("newAATfeature"      "{{{{")
+				("newopentypefeature" "{{{")
+				("newfontfeature"     "{{")
+				("aliasfontfeature"   "{{")
+				("aliasfontfeatureoption" "{{{"))
+			      'function)
+     (font-latex-add-keywords '(("liningnums"    "{"))
+			      'type-command)
+     (font-latex-add-keywords '(("strong"    "{"))
+			      'bold-command)))
+ LaTeX-dialect)
+
+(defvar LaTeX-fontspec-package-options
+  '("tuenc" "euenc" "math" "no-math" "config" "no-config" "quiet" "silent")
+  "Package options for the fontspec package.")
+
+;;; fontspec.el ends here