diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/fontspec.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/fontspec.el | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/fontspec.el b/elpa/auctex-13.1.3/style/fontspec.el new file mode 100644 index 0000000..6970b75 --- /dev/null +++ b/elpa/auctex-13.1.3/style/fontspec.el @@ -0,0 +1,449 @@ +;;; fontspec.el --- AUCTeX style for `fontspec.sty' version 2.7i. -*- lexical-binding: t; -*- + +;; Copyright (C) 2013--2021 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.7i. 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 compatibility. + +;;; Code: + +(require 'tex) +(require 'latex) + +;; 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 + '(;; I General font selection + ("Extension" (".otf" ".ttf" ".ttc" ".dfont")) + ("Path") + ;; I 4.1 More control over font shape selection + ("UprightFont") + ("BoldFont") + ("ItalicFont") + ("BoldItalicFont") + ("SlantedFont") + ("BoldSlantedFont") + ("SmallCapsFont") + ;; I 4.2 Specifically choosing the NFSS family + ("NFSSFamily") + ;; I 4.3 Choosing additional NFSS font faces + ("FontFace") + ;; III 3. Different features for different font shapes + ("BoldFeatures") + ("ItalicFeatures") + ("BoldItalicFeatures") + ("SlantedFeatures") + ("BoldSlantedFeatures") + ("SmallCapsFeatures") + ("UprightFeatures") + ;; III 4. Different features for different font sizes + ("SizeFeatures") + ;; III 6. Font independent options + ("Color") + ("Scale" ("MatchLowercase" "MatchUppercase")) + ("WordSpace") + ("PunctuationSpace") + ("HyphenChar" ("None")) + ("OpticalSize") + ("AutoFakeBold") + ("AutoFakeSlant") + ("FakeSlant") + ("FakeStretch") + ("FakeBold") + ("LetterSpace") + ;; IV.3 OpenType options + ;; IV.3.1.1 Alternates. The next 2 are synonyms: + ("Alternate" ("Random")) + ("StylisticAlternate" ("Random")) + ;; IV.3.1.2 Character Variants + ("CharacterVariant") + ;; IV 3.1.3 Contextuals + ("Contextuals" ("Swash" "SwashOff" "SwashReset" + "Alternate" "AlternateOff" "AlternateReset" + "WordInitial" "WordInitialOff" "WordInitialReset" + "WordFinal" "WordFinalOff" "WordFinalReset" + "LineFinal" "LineFinalOff" "LineFinal" + "Inner" "InnerOff" "InnerReset" + "ResetAll")) + ;; IV 3.1.4 Diacritics + ("Diacritics" ("MarkToBase" "MarkToBaseOff" "MarkToBaseReset" + "MarkToMark" "MarkToMarkOff" "MarkToMarkReset" + "AboveBase" "AboveBaseOff" "AboveBaseReset" + "BelowBase" "BelowBaseOff" "BelowBaseReset" + "ResetAll")) + ;; IV 3.1.5 Fractions + ("Fractions" ("On" "Off" "Reset" "Alternate" + "AlternateOff" "AlternateReset" "ResetAll")) + ;; IV 3.1.6 Kerning + ("Kerning" ("On" "Off" "Reset" "ResetAll" + "Uppercase" "UppercaseOff" "UppercaseReset")) + ;; IV 3.1.7 Letters + ("Letters" ("SmallCaps" "SmallCapsOff" "SmallCapsReset" + "PetiteCaps" "PetiteCapsOff" "PetiteCapsReset" + "UppercaseSmallCaps" "UppercaseSmallCapsOff" "UppercaseSmallCapsReset" + "UppercasePetiteCaps" "UppercasePetiteCapsOff" "UppercasePetiteCapsReset" + "Unicase" "UnicaseOff" "UnicaseReset" + "ResetAll")) + ;; IV 3.1.8 Ligatures + ("Ligatures" ("Required" "RequiredOff" "RequiredReset" + "Common" "CommonOff" "CommonReset" + "Contextual" "ContextualOff" "ContextualReset" + "Rare" "RareOff" "RareReset" + "Discretionary" "DiscretionaryOff" "DiscretionaryReset" + "Historic" "HistoricOff" "HistoricReset" + "TeX" "TeXOff" "TeXReset" + "ResetAll")) + ;; IV 3.1.9 Localised Forms + ("LocalForms" ("On" "Off" "Reset")) + ;; IV 3.1.10 Numbers + ("Numbers" ("Uppercase" "UppercaseOff" "UppercaseReset" + "Lowercase" "LowercaseOff" "LowercaseReset" + "Lining" "LiningOff" "LiningReset" + "OldStyle" "OldStyleOff" "OldStyleReset" + "Proportional" "ProportionalOff" "ProportionalReset" + "Monospaced" "MonospacedOff" "MonospacedReset" + "SlashedZero" "SlashedZeroOff" "SlashedZeroReset" + "Arabic" "ArabicOff" "ArabicReset" + "ResetAll")) + ;; IV 3.1.11 Ornament + ("Ornament") + ;; IV 3.1.12 Style + ("Style" ("Alternate" "AlternateOff" "AlternateReset" + "Italic" "ItalicOff" "ItalicReset" + "Ruby" "RubyOff" "RubyReset" + "Swash" "SwashOff" "SwashReset" + "Cursive" "CursiveOff" "CursiveReset" + "Historic" "HistoricOff" "HistoricReset" + "Titling" "TitlingOff" "TitlingReset" + "HorizontalKana" "HorizontalKanaOff" "HorizontalKanaReset" + "VerticalKana" "VerticalKanaOff" "VerticalKanaReset" + "Uppercase" "UppercaseOff" "UppercaseReset" + "ResetAll")) + ;; IV 3.1.13 Stylistic Set variations. The next 2 are synonyms: + ("StylisticSet") + ("Variant") + ;; IV 3.1.14 Vertical Position + ("VerticalPosition" ("Superior" "SuperiorOff" "SuperiorReset" + "Inferior" "InferiorOff" "InferiorReset" + "Numerator" "NumeratorOff" "NumeratorReset" + "Denominator" "DenominatorOff" "DenominatorReset" + "ScientificInferior" "ScientificInferiorOff" "ScientificInferiorReset" + "Ordinal" "OrdinalOff" "OrdinalReset" + "ResetAll")) + ;; IV 3.2.1 Annotation + ("Annotation") + ;; IV 3.2.2 Character width + ("CharacterWidth" ("Proportional" "ProportionalOff" "ProportionalReset" + "Full" "FullOff" "FullReset" + "Half" "HalfOff" "HalfReset" + "Third" "ThirdOff" "ThirdReset" + "Quarter" "QuarterOff" "QuarterReset" + "AlternateProportional" "AlternateProportionalOff" "AlternateProportionalReset" + "AlternateHalf" "AlternateHalfOff" "AlternateHalfReset" + "ResetAll")) + ;; IV 3.2.3 CJK shape + ("CJKShape" ("Traditional" + "Simplified" + "JIS1978" + "JIS1983" + "JIS1990" + "Expert" + "NLC")) + ;; IV 3.2.4 Vertical typesetting + ("Vertical" ("RotatedGlyphs" "RotatedGlyphsOff" "RotatedGlyphsReset" + "AlternatesForRotation" "AlternatesForRotationOff" "AlternatesForRotationReset" + "Alternates" "AlternatesOff" "AlternatesReset" + "KanaAlternates" "KanaAlternatesOff" "KanaAlternatesReset" + "Kerning" "KerningOff" "KerningReset" + "AlternateMetrics" "AlternateMetricsOff" "AlternateMetricsReset" + "HalfMetrics" "HalfMetricsOff" "HalfMetricsReset" + "ProportionalMetrics" "ProportionalMetricsOff" "ProportionalMetricsReset" + "ResetAll")) + ;; VIII 3. 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-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-font-features () + "Return an updated list of font features. +This function retrieves values from various sources and adds them +to appropriate keys which are eventually prepended to +`LaTeX-fontspec-font-features' shadowing the predefined one." + (append + ;; Check for color packages, prefer xcolor over color. Note that + ;; we run the function `TeX-style-list' only once and after that we + ;; use the updated `TeX-active-styles'. + (when (or (member "xcolor" (TeX-style-list)) + (member "color" TeX-active-styles)) + (let ((colorcmd (if (member "xcolor" TeX-active-styles) + #'LaTeX-xcolor-definecolor-list + #'LaTeX-color-definecolor-list))) + `(("Color" ,(mapcar #'car (funcall colorcmd)))))) + ;; If `LaTeX-fontspec-font-list' is set, use it for other `*Font' + ;; related keys: + (when LaTeX-fontspec-font-list + `(("UprightFont" ,LaTeX-fontspec-font-list) + ("BoldFont" ,LaTeX-fontspec-font-list) + ("ItalicFont" ,LaTeX-fontspec-font-list) + ("BoldItalicFont" ,LaTeX-fontspec-font-list) + ("SlantedFont" ,LaTeX-fontspec-font-list) + ("BoldSlantedFont" ,LaTeX-fontspec-font-list) + ("SmallCapsFont" ,LaTeX-fontspec-font-list))) + ;; This is a LuaTeX only feature. VI. 1 Different font + ;; technologies and shapers + (when (eq TeX-engine 'luatex) + '(("Renderer" ("Harfbuzz" "OpenType" "AAT" "Graphite")))) + ;; This is a XeTeX only feature. VII. 1 Different font + ;; technologies + (when (eq TeX-engine 'xetex) + '(("Renderer" ("OpenType" "AAT" "Graphite")))) + ;; Predefined features: + LaTeX-fontspec-font-features)) + +;; 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)))) + +(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) + + (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) "Font features"]) + + ;; Default font families + '("setmainfont" + (LaTeX-fontspec-arg-font "Main font name") + [TeX-arg-key-val (LaTeX-fontspec-font-features) "Font features"]) + '("setsansfont" + (LaTeX-fontspec-arg-font "Sans font name") + [TeX-arg-key-val (LaTeX-fontspec-font-features) "Font features"]) + '("setmonofont" + (LaTeX-fontspec-arg-font "Mono font name") + [TeX-arg-key-val (LaTeX-fontspec-font-features) "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) "Font features"]) + + '("newfontface" TeX-arg-define-macro + LaTeX-fontspec-arg-font + [TeX-arg-key-val (LaTeX-fontspec-font-features) "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) "Font features")) + '("defaultfontfeatures+" [ LaTeX-fontspec-arg-font ] + (TeX-arg-key-val (LaTeX-fontspec-font-features) "Font features")) + + ;; 10 Working with the currently selected features + '("IfFontFeatureActiveTF" + [TeX-arg-key-val (LaTeX-fontspec-font-features) "Font feature"] 2) + + ;; Changing the currently selected features + '("addfontfeatures" + (TeX-arg-key-val (LaTeX-fontspec-font-features) "Font features")) + + ;; 23 Defining new features + '("newAATfeature" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Existing feature") + (LaTeX-fontspec-font-features)) + "New option" 2) + + '("newopentypefeature" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Existing feature") + (LaTeX-fontspec-font-features)) + "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 nil nil "Existing feature") + (LaTeX-fontspec-font-features)) + "New name") + + '("aliasfontfeatureoption" + (TeX-arg-eval + (lambda () + (let* ((key (completing-read + (TeX-argument-prompt nil nil "Feature") + (LaTeX-fontspec-font-features))) + (val (completing-read + (TeX-argument-prompt nil nil "Existing name") + (cadr (assoc key (LaTeX-fontspec-font-features)))))) + (TeX-argument-insert key nil) + (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))) + TeX-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 |