[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/auctex 5dd4f21 35/78: Style file for polyglossia packag
From: |
Tassilo Horn |
Subject: |
[elpa] externals/auctex 5dd4f21 35/78: Style file for polyglossia package. |
Date: |
Mon, 19 Oct 2015 09:10:52 +0000 |
branch: externals/auctex
commit 5dd4f21cf5c044743552232fc01b65932edd9b1a
Author: Mosè Giordano <address@hidden>
Commit: Mosè Giordano <address@hidden>
Style file for polyglossia package.
* style/polyglossia.el: New style file.
* Makefile.in (STYLESRC): Activate it.
---
ChangeLog | 6 +
Makefile.in | 4 +-
style/polyglossia.el | 355 ++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 363 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e094aff..cb5f7de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-09-09 Mos� Giordano <address@hidden>
+
+ * style/polyglossia.el: New style file.
+
+ * Makefile.in (STYLESRC): Activate it.
+
2015-09-08 Arash Esbati <address@hidden>
* style/hyperref.el ("hyperref"): Add completion for starred
diff --git a/Makefile.in b/Makefile.in
index 9a3b859..d080257 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -149,8 +149,8 @@ STYLESRC = style/prosper.el \
style/geometry.el style/ltablex.el style/ltxtable.el \
style/mn2e.el style/colortbl.el style/attachfile.el \
style/newpxtext.el style/newpxmath.el style/pdfpages.el \
- style/mnras.el style/environ.el style/textpos.el \
- style/vwcol.el style/transparent.el
+ style/mnras.el style/environ.el style/polyglossia.el \
+ style/vwcol.el style/textpos.el style/transparent.el
STYLEELC = $(STYLESRC:.el=.elc)
diff --git a/style/polyglossia.el b/style/polyglossia.el
new file mode 100644
index 0000000..20249f0
--- /dev/null
+++ b/style/polyglossia.el
@@ -0,0 +1,355 @@
+;;; polyglossia.el --- AUCTeX style for `polyglossia.sty' version 1.42.0.
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Maintainer: address@hidden
+;; Author: Mosè Giordano <address@hidden>
+;; 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 `polyglossia.sty' version 1.42.0.
+
+;;; TODO:
+
+;; Create language specific styles with names `gloss-<lang>.el'. They should
+;; add `text<lang>' macros, `<lang>' environments (`Arabic' for `arabic'
+;; language), and the others language-specific commands.
+
+;;; Code:
+
+(require 'tex) ;Indispensable when compiling the call to `TeX-auto-add-type'.
+
+(TeX-auto-add-type "polyglossia-lang" "LaTeX")
+
+;; Self Parsing -- see (info "(auctex)Hacking the Parser").
+(defvar LaTeX-polyglossia-lang-regexp
+ (concat "\\\\set\\(defaultlanguage\\|mainlanguage\\|otherlanguages?\\)"
+ "[ \t\n\r]*\\(?:\\[\\(.*\\)\\]\\)?[ \t\n\r]*{\\([A-Za-z, ]+\\)}")
+ "Matches languages set with polyglossia macros.")
+
+(defvar LaTeX-polyglossia-setkeys-regexp
+ (concat "\\\\setkeys"
+ "[ \t\n\r]*{\\([A-Za-z]+\\)}[ \t\n\r]*{\\([^}]\\)}")
+ "Matches polyglossia languages options set using \"\setkeys\".")
+
+(defvar LaTeX-auto-polyglossia-lang nil
+ "Temporary for parsing polyglossia languages.")
+
+(defvar LaTeX-auto-polyglossia-setkeys nil
+ "Temporary for parsing polyglossia language options.")
+
+(defun LaTeX-polyglossia-prepare ()
+ "Clear `LaTex-auto-polyglossia-lang' before use."
+ (setq LaTeX-auto-polyglossia-lang nil
+ LaTeX-auto-polyglossia-setkeys nil))
+
+(defun LaTeX-polyglossia-cleanup ()
+ "Move languages and their options from
+`LaTeX-auto-polyglossia-lang' to `LaTeX-polyglossia-lang-list'."
+ ;; Example: now the value of `LaTeX-auto-polyglossia-lang' is something like
+ ;; '(("danish" "defaultlanguage" "")
+ ;; ("arabic" "otherlanguage" "locale=tunisia,numerals=maghrib")
+ ;; ("german" "otherlanguage" "spelling=new,script=latin")
+ ;; ("icelandic,brazil,sanskrit" "otherlanguages" ""))
+ ;; We want to end up with a list like
+ ;; '(("danish" "defaultlanguage")
+ ;; ("arabic" "otherlanguage" "locale=tunisia" "numerals=maghrib")
+ ;; ("german" "otherlanguage" "spelling=new" "script=latin")
+ ;; ("icelandic" "otherlanguages")
+ ;; ("brazil" "otherlanguages")
+ ;; ("sanskrit" "otherlanguages" "script=Devanagari"))
+ ;; with "script=Devanagari" option to "sanskrit" language set using
+ ;; "\setkeys".
+ ;; In each element of the alist, the key is the language, the second value is
+ ;; the polyglossia command which set the language, the rest of values is the
+ ;; list of options given to the language.
+ (let (tmp newelt opts otheropts)
+ (mapc
+ (lambda (elt)
+ (mapc
+ (lambda (language)
+ ;; `opts' is the string of options for `language', set using
+ ;; "\setdefaultlanguage" or "\setotherlanguage".
+ (setq opts (cdr (cdr elt)))
+ ;; `otheropts' is the string of options for `language' set using
+ ;; "\setkeys".
+ (setq otheropts
+ (car (cdr (assoc language LaTeX-auto-polyglossia-setkeys))))
+ (setq newelt
+ (append
+ (list language) (list (nth 1 elt))
+ (unless (equal opts '(""))
+ (LaTeX-listify-package-options (car opts)))
+ (if otheropts (LaTeX-listify-package-options otheropts))))
+ (add-to-list 'LaTeX-polyglossia-lang-list newelt t)
+ (add-to-list 'tmp newelt t))
+ (LaTeX-listify-package-options (car elt))))
+ LaTeX-auto-polyglossia-lang)
+ (setq LaTeX-auto-polyglossia-lang tmp)))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-polyglossia-prepare)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-polyglossia-cleanup)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(defvar LaTeX-polyglossia-language-list
+ '("albanian" "amharic" "arabic" "armenian" "asturian" "bahasai" "bahasam"
+ "basque" "bengali" "brazil" "breton" "bulgarian" "catalan" "coptic"
+ "croatian" "czech" "danish" "divehi" "dutch" "english" "esperanto"
+ "estonian" "farsi" "finnish" "french" "friulan" "galician" "german" "greek"
+ "hebrew" "hindi" "icelandic" "interlingua" "irish" "italian" "kannada"
+ "khmer" "korean" "lao" "latin" "latvian" "lithuanian" "lsorbian" "magyar"
+ "malayalam" "marathi" "nko" "norsk" "nynorsk" "occitan" "piedmontese"
+ "polish" "portuges" "romanian" "romansh" "russian" "samin" "sanskrit"
+ "scottish" "serbian" "slovak" "slovenian" "spanish" "swedish" "syriac"
+ "tamil" "telugu" "thai" "tibetan" "turkish" "turkmen" "ukrainian" "urdu"
+ "usorbian" "vietnamese" "welsh")
+ "List of languages supported by the polyglossia LaTeX package.")
+
+(defun LaTeX-polyglossia-active-languages ()
+ "Return a list of polyglossia languages used in the document.
+The last language is the default one."
+ (let (active-languages default)
+ (mapc
+ (lambda (elt)
+ (setq default (or (string-equal "defaultlanguage" (nth 1 elt))
+ (string-equal "mainlanguage" (nth 1 elt))))
+ ;; Append the language to the list if it's the default one.
+ (add-to-list 'active-languages (car elt) default))
+ (LaTeX-polyglossia-lang-list))
+ active-languages))
+
+(defun LaTeX-polyglossia-lang-option-member (language option)
+ "Return non-nil if OPTION has been given to polyglossia LANGUAGE.
+The value is actually the tail of the list of options given to LANGUAGE."
+ (member option (cdr (cdr (assoc language (LaTeX-polyglossia-lang-list))))))
+
+(defun LaTeX-arg-polyglossia-lang (_optional default multiple setkeys)
+ "Prompt for language and its options with completion and insert them
+as arguments.
+
+This function is triggered by \"\setdefaultlanguage\",
+\"\setotherlanguage\", \"\setotherlanguages\", and \"\setkeys\"
+macros by polyglossia package.
+
+OPTIONAL is ignored, if DEFAULT is non-nil treat inserted
+language as default, if MULTIPLE is non-nil prompt for multiple
+languages, if SETKEYS is non-nil insert options as second
+mandatory argument."
+ ;; DEFAULT = t , MULTIPLE = nil, SETKEYS = nil: "\setdefaultlanguage".
+ ;; DEFAULT = nil, MULTIPLE = nil, SETKEYS = nil: "\setotherlanguage".
+ ;; DEFAULT = nil, MULTIPLE = t , SETKEYS = nil: "\setotherlanguages".
+ ;; DEFAULT = nil, MULTIPLE = nil, SETKEYS = t : "\setkeys".
+ (let ((language (funcall
+ (if multiple
+ 'TeX-completing-read-multiple
+ 'completing-read)
+ (if multiple "Languages: " "Language: ")
+ (if setkeys
+ (LaTeX-polyglossia-active-languages)
+ LaTeX-polyglossia-language-list)))
+ var options)
+ (if multiple
+ (mapc (lambda (elt) (TeX-run-style-hooks (concat "gloss-" elt)))
+ language)
+ (TeX-run-style-hooks (concat "gloss-" language)))
+ ;; "\setotherlanguages" doesn't take options, don't prompt for them.
+ (setq options
+ (if multiple ""
+ (setq var (intern (format "LaTeX-polyglossia-%s-options-list"
language)))
+ (if (and (boundp var) (symbol-value var))
+ ;; "\setdefaultlanguage" and "\setotherlanguage" use `options'
+ ;; as first optional argument; "\setkeys" uses `options' as
+ ;; second mandatory argument.
+ (TeX-read-key-val (not setkeys) (symbol-value var))
+ ;; When `LaTeX-polyglossia-<lang>-options-list' is nil or not
+ ;; defined, don't prompt for options.
+ "")))
+ (unless setkeys
+ (let ((TeX-arg-opening-brace LaTeX-optop)
+ (TeX-arg-closing-brace LaTeX-optcl))
+ (TeX-argument-insert options t)))
+ (if multiple
+ (setq language (mapconcat 'identity language ",")))
+ (TeX-argument-insert language nil)
+ (if setkeys
+ (TeX-argument-insert options nil))))
+
+(defun LaTeX-arg-polyglossiasetup-options (optional)
+ "Prompt for setup options of polyglossia package.
+If OPTIONAL is non-nil, insert the resulting value as an optional
+argument, otherwise as a mandatory one."
+ (TeX-arg-key-val optional
+ '(("language") ;; TODO: add completion in `fontspec.el', see
+ ;; "\newfontlanguage"s in
`fontspec-xetex.sty'.
+ ("hyphennames")
+ ("script") ;; TODO: add completion in `fontspec.el', see
+ ;; "\newfontscript"s in `fontspec-xetex.sty'.
+ ("direction" ("RL" "LR"))
+ ("scripttag")
+ ("langtag")
+ ("hyphenmins")
+ ("frenchspacing" ("true" "false"))
+ ("indentfirst" ("true" "false"))
+ ("fontsetup" ("true" "false"))
+ ;; The following options aren't already implemented but are
+ ;; present in `polyglossia.sty' comments.
+ ;; ("nouppercase" ("true" "false"))
+ ;; ("localalph")
+ ;; ("localnumber")
+ )))
+
+(TeX-add-style-hook
+ "polyglossia"
+ (lambda ()
+ (TeX-check-engine-add-engines 'luatex 'xetex)
+ (TeX-auto-add-regexp
+ `(,LaTeX-polyglossia-lang-regexp (3 1 2) LaTeX-auto-polyglossia-lang))
+ (TeX-auto-add-regexp
+ `(,LaTeX-polyglossia-setkeys-regexp (1 2) LaTeX-auto-polyglossia-setkeys))
+ ;; Run style hooks for every active language.
+ (mapc (lambda (elt) (TeX-run-style-hooks (concat "gloss-" elt)))
+ (LaTeX-polyglossia-active-languages))
+ (TeX-run-style-hooks "etoolbox" "makecmds" "xkeyval" "fontspec")
+ (TeX-add-symbols
+ '("setdefaultlanguage" (LaTeX-arg-polyglossia-lang t nil nil))
+ '("setmainlanguage" (LaTeX-arg-polyglossia-lang t nil nil))
+ '("setotherlanguage" (LaTeX-arg-polyglossia-lang nil nil nil))
+ '("setotherlanguages" (LaTeX-arg-polyglossia-lang nil t nil))
+ '("setkeys" (LaTeX-arg-polyglossia-lang nil nil t ))
+ '("PolyglossiaSetup" (TeX-arg-eval completing-read "Language: "
+ (LaTeX-polyglossia-active-languages))
+ LaTeX-arg-polyglossiasetup-options)
+ "selectbackgroundlanguage"
+ '("resetdefaultlanguage" ["argument"] 1)
+ "normalfontlatin"
+ "rmfamilylatin"
+ "sffamilylatin"
+ "ttfamilylatin"
+ "selectlanguage"
+ "foreignlanguage")
+
+ (TeX-declare-expert-macros
+ "polyglossia"
+ "PolyglossiaSetup" "selectbackgroundlanguage" "resetdefaultlanguage"
+ "normalfontlatin" "rmfamilylatin" "sffamilylatin" "ttfamilylatin"
+ "selectlanguage" "foreignlanguage")
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("setdefaultlanguage" "[{")
+ ("setmainlanguage" "[{")
+ ("setotherlanguage" "[{")
+ ("setotherlanguages" "{")
+ ("setkeys" "{{"))
+ 'function)))
+ LaTeX-dialect)
+
+;; TODO: move each option variable in its specific `gloss-<lang>.el' file.
+(defvar LaTeX-polyglossia-arabic-options-list
+ '(("calendar" ("gregorian" "islamic"))
+ ("locale" ("default" "mashriq" "libya" "algeria" "tunisia" "morocco"
"mauritania"))
+ ("numerals" ("mashriq" "maghrib"))
+ ("abjadjimnotail" ("false" "true")))
+ "Arabic language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-bengali-options-list
+ '(("numerals" ("Western" "Devanagari"))
+ ("changecounternumbering" ("true" "false")))
+ "Bengali language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-catalan-options-list
+ '(("babelshorthands" ("true" "false")))
+ "Catalan language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-dutch-options-list
+ '(("babelshorthands" ("true" "false")))
+ "Dutch language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-english-options-list
+ '(("variant" ("american" "usmax" "british" "australian" "newzealand"))
+ ("ordinalmonthday" ("true" "false")))
+ "English language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-farsi-options-list
+ '(("numerals" ("western" "eastern"))
+ ;; ("locale") ;; not yet implemented
+ ;; ("calendar") ;; not yet implemented
+ )
+ "Farsi language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-german-options-list
+ '(("variant" ("german" "austrian" "swiss"))
+ ("spelling" ("new" "old"))
+ ("latesthyphen" ("true" "false"))
+ ("babelshorthands" ("true" "false"))
+ ("script" ("latin" "fraktur")))
+ "German language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-greek-options-list
+ '(("variant" ("monotonic" "polytonic" "ancient"))
+ ("numerals" ("greek" "arabic"))
+ ("attic" ("true" "false")))
+ "Greek language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-hebrew-options-list
+ '(("numerals" ("hebrew" "arabic"))
+ ("calendar" ("hebrew" "gregorian")))
+ "Hebrew language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-hindi-options-list
+ '(("numerals" ("Western" "Devanagari")))
+ "Hindi language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-italian-options-list
+ '(("babelshorthands" ("true" "false")))
+ "Italian language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-lao-options-list
+ '(("numerals" ("lao" "arabic")))
+ "Lao language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-russian-options-list
+ '(("spelling" ("modern" "old"))
+ ("babelshorthands" ("true" "false")))
+ "Russian language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-sanskrit-options-list
+ '(("Script" ("Devanagari")))
+ "Sanskrit language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-serbian-options-list
+ '(("script" ("cyrillic" "latin")))
+ "Serbian language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-syriac-options-list
+ '(("numerals" ("western" "eastern" "abjad")))
+ "Syriac language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-thai-options-list
+ '(("numerals" ("thai" "arabic")))
+ "Thai language options for the polyglossia package.")
+
+(defvar LaTeX-polyglossia-package-options
+ '("babelshorthands" "localmarks" "nolocalmarks" "quiet")
+ "Package options for the polyglossia package.")
+
+;;; polyglossia.el ends here
- [elpa] externals/auctex 05cf5be 43/78: Append `-list' to `LaTeX-eso-pic-package-options'., (continued)
- [elpa] externals/auctex 05cf5be 43/78: Append `-list' to `LaTeX-eso-pic-package-options'., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex d4ba585 30/78: Fix missing unfontification of invisible property, Tassilo Horn, 2015/10/19
- [elpa] externals/auctex f470df8 51/78: Make `LaTeX-indent-environment-list' local., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 4cfe30e 46/78: Do not reference auto.el in Makefile and gitignore., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 0ac0fa8 57/78: Avoid searching with kpathsea in duplicate directories., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 48093fa 58/78: Use LaTeX-add-lengths for LaTeX-lengths., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 2da69ab 11/78: Add fontification for `\newcolumntype'., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex f4c5af9 37/78: Fix loading of polyglossia language style files., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 8359f08 39/78: Fix in Italian language polyglossia style file., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 0377238 31/78: Add TeX-compile-run-all to AUCTeX reference card., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 5dd4f21 35/78: Style file for polyglossia package.,
Tassilo Horn <=
- [elpa] externals/auctex 4810753 41/78: Add new style Alegreya.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 2b648fe 38/78: Remove one TODO in style/polyglossia.el., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 22c7d9f 27/78: Implement "run-all" for regions and sections, Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 6b3cbea 32/78: Suggest to run Index when appropriate., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex a76afdf 49/78: Add abstract env only to classes defining it., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex a864241 55/78: Fixup space-before-tab git warned about., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 9b5827c 44/78: Fix typo in error message., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 3bb1cbe 56/78: Add font-latex specific prettify-symbols-compose-predicate, Tassilo Horn, 2015/10/19
- [elpa] externals/auctex 8a2bd0b 68/78: Fix previous commit., Tassilo Horn, 2015/10/19
- [elpa] externals/auctex e85968c 66/78: Support caption.el and some other fixes., Tassilo Horn, 2015/10/19