]> git.lyx.org Git - features.git/commitdiff
Align fontenc with document fonts
authorJuergen Spitzmueller <spitz@lyx.org>
Sun, 22 Apr 2018 17:06:46 +0000 (19:06 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sun, 22 Apr 2018 17:06:46 +0000 (19:06 +0200)
Following a request by Günter, we consider the document fonts (only rm
for now) when selecting an appropriate font encoding.

See #9741

The new default font encoding setting "auto" does

* consider the font encoding needed by the language(s), which can now
  have fallback alternatives
* Consider which font encoding is provided by the document font

Thus, cm now will result in OT1 fontenc, if the language can deal with
that.

The font_enc pref is ditched: it is no longer needed.

The automatism is still very basic and is subject to extension.

File format and prefs format change.

24 files changed:
development/FORMAT
lib/RELEASE-NOTES
lib/configure.py
lib/doc/UserGuide.lyx
lib/languages
lib/latexfonts
lib/lyx2lyx/lyx_2_4.py
lib/scripts/prefs2prefs_prefs.py
src/BufferParams.cpp
src/LaTeXFeatures.cpp
src/LaTeXFonts.cpp
src/LaTeXFonts.h
src/Language.cpp
src/Language.h
src/LyXRC.cpp
src/LyXRC.h
src/Paragraph.cpp
src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/GuiPrefs.cpp
src/frontends/qt4/GuiPrefs.h
src/frontends/qt4/ui/PrefLatexUi.ui
src/insets/InsetQuotes.cpp
src/tex2lyx/Preamble.cpp
src/version.h

index 6f5ee2e48dcfe51ae2da98ba29d5539534232595..ce0bd800430edf3751203f4268ff04aa85f50079 100644 (file)
@@ -7,7 +7,11 @@ changes happened in particular if possible. A good example would be
 
 -----------------------
 
-2018-04-24  Jürgen Spitzmüller <spitz@lyx.org>
+2018-04-22  Jürgen Spitzmüller <spitz@lyx.org>
+       * format incremented to 550: rename \fontencoding global to \fontencoding auto.
+         Semantic change: this is now automatically set depending on the document fonts.
+
+2018-04-21  Jürgen Spitzmüller <spitz@lyx.org>
        * format incremented to 549: change \textcyr to \textcyrillic.
          Dummy format change for now (in case it turns out we need to do something).
 
index 52c14276a98bbab27ae316df23ba9978b28ec99b..5dceaa1486e12c60d4e302ee71a2a53fd1c766e9 100644 (file)
 
 !!!The following pref variables are obsoleted in 2.4:
 
+* \font_encoding
+  The font encoding is now automatically set depending on the document
+  fonts and languages.
+
 * \use_qimage
   This is no longer necessary due to the rewrite of the painter.
 
index 34916d8e6a1336ff4bb547267c4246e0105db544..8c6c1688d75872bc171cf4eca5ed269a1a92feab 100644 (file)
@@ -1442,18 +1442,13 @@ def checkLatexConfig(check_config, bool_docbook):
     if rmcopy:
         removeFiles( [ 'chkconfig.ltx' ] )
     #
-    # currently, values in chkconfig are only used to set
-    # \font_encoding
-    values = {}
-    for line in open('chkconfig.vars').readlines():
-        key, val = re.sub('-', '_', line).split('=')
-        val = val.strip()
-        values[key] = val.strip("'")
-    # chk_fontenc may not exist
-    try:
-        addToRC(r'\font_encoding "%s"' % values["chk_fontenc"])
-    except:
-        pass
+    # values in chkconfig were only used to set
+    # \font_encoding, which is obsolete
+#    values = {}
+#    for line in open('chkconfig.vars').readlines():
+#        key, val = re.sub('-', '_', line).split('=')
+#        val = val.strip()
+#        values[key] = val.strip("'")
     # if configure successed, move textclass.lst.tmp to textclass.lst
     # and packages.lst.tmp to packages.lst
     if (os.path.isfile('textclass.lst.tmp')
@@ -1795,7 +1790,7 @@ if __name__ == '__main__':
     lyx_check_config = True
     lyx_kpsewhich = True
     outfile = 'lyxrc.defaults'
-    lyxrc_fileformat = 25
+    lyxrc_fileformat = 26
     rc_entries = ''
     lyx_keep_temps = False
     version_suffix = ''
index fb8cac9d103474b371befeb68e4568b4488b7e5a..30fa45903d5087216a6e6a37c00a9bddc2118729 100644 (file)
@@ -140,11 +140,12 @@ enumitem
 \papercolumns 1
 \papersides 2
 \paperpagestyle default
-\tracking_changes false
+\tracking_changes true
 \output_changes false
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict true
+\author -712698321 "Jürgen Spitzmüller"
 \end_header
 
 \begin_body
@@ -8335,12 +8336,14 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim
+
 This is Verbatim.
 \end_layout
 
 \begin_layout Verbatim
 \noindent
 \align block
+
 The following 2 lines are empty:
 \end_layout
 
@@ -8353,6 +8356,7 @@ The following 2 lines are empty:
 \end_layout
 
 \begin_layout Verbatim
+
 Almost everything is allowed in Verbatim:"%&$§#~'`
 \backslash
 }][{|
@@ -8376,6 +8380,7 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim*
+
 This is Verbatim*.
 \end_layout
 
@@ -12842,8 +12847,44 @@ Default
 Default,
 \family default
  the font that is preset by the current document class is used.
- With LyX's default font encoding, this is a look-alike of the standard
- \SpecialChar TeX
+ With LyX's 
+\change_deleted -712698321 1524413696
+default
+\change_inserted -712698321 1524413700
+automatic
+\change_unchanged
+ font encoding, this is
+\change_inserted -712698321 1524413733
+, depending on the document language,
+\change_unchanged
+\change_inserted -712698321 1524413747
+either the the standard \SpecialChar TeX
+ font 
+\begin_inset Quotes eld
+\end_inset
+
+
+\family typewriter
+Computer
+\begin_inset space ~
+\end_inset
+
+Modern
+\family default
+
+\begin_inset Quotes erd
+\end_inset
+
+ (
+\family typewriter
+cm
+\family default
+) or 
+\change_unchanged
+a look-alike of
+\change_deleted -712698321 1524413754
+ the standard \SpecialChar TeX
  font 
 \begin_inset Quotes eld
 \end_inset
@@ -12864,7 +12905,11 @@ Modern
 \family typewriter
 cm
 \family default
-): either 
+)
+\change_inserted -712698321 1524413756
+ this font
+\change_unchanged
+: either 
 \begin_inset Quotes eld
 \end_inset
 
@@ -13244,6 +13289,8 @@ status collapsed
 
 \end_inset
 
+
+\change_deleted -712698321 1524413571
  (see also section
 \begin_inset space ~
 \end_inset
@@ -13255,11 +13302,19 @@ reference "subsec:LaTeX-settings"
 
 \end_inset
 
-).
+)
+\change_unchanged
+.
  Normally, you do not need to change (or even understand) this.
  Unless you have specific reasons, use 
+\change_deleted -712698321 1524413471
+
 \family sans
 Default
+\change_inserted -712698321 1524413474
+Automatic
+\change_unchanged
+
 \family default
 .
 \end_layout
@@ -47833,6 +47888,8 @@ Settings ! \SpecialChar LaTeX
 \end_layout
 
 \begin_layout Description
+
+\change_deleted -712698321 1524413534
 Use
 \begin_inset space ~
 \end_inset
@@ -47893,6 +47950,8 @@ T1, T2B
  \SpecialChar LyX
  sets up in the background.
  So there is no need to change the default encoding.
+\change_unchanged
+
 \end_layout
 
 \begin_layout Description
index 65640d9b5c7e0315cb826735dec6fc8b332b270e..ccde204fa0dc6c041cb9f019219060d5b47fafc2 100644 (file)
 #      BabelName          <babelname>
 #      PolyglossiaName    <polyglossianame>
 #      PolyglossiaOpts    "<language-specific options>"
-#      Encoding           <encoding>
-#      FontEncoding       <font encoding>
 #      QuoteStyle         <british|danish|english|french|frenchin|
 #                           german|polish|russian|swedish|swedishg|swiss|plain>
+#      Encoding           <encoding>
+#      FontEncoding       <font encoding|font encoding|...]>
 #      InternalEncoding   <true|false>
 #      RTL                <true|false>
 #      AsBabelOptions     <true|false>
 #   is set to "Language Default" and "use non-TeX fonts" is FALSE.
 #   Encoding "inherit" means: keep encoding of the context (used by
 #   latex_language).
+# * FontEncoding is a bar-separated list of font encodings.
+#   The first value is the required font encoding for correct hyphenation with
+#   8-bit TeX (http://www.hyphenation.org). Eventually following values may be
+#   used if the selected font is unavailable in FontEncoding. They provide all
+#   letters used in the language, but some only as "surrogate pairs" with
+#   possible problems for hyphenation and drag-and-drop from the generated
+#   documents.
+#   If not given, all standard text encodings (T<n>) as well as OT1 work.
+# * "FontEncoding none" tells LyX that fontenc should not be loaded with this
+#   language.
+# * "FontEncoding ASCII" means: "works with any standard text encoding
+#   as well as OT1".
 # * InternalEncoding is used to tell LyX that babel internally sets a
 #   non-standard font encoding (such as hebrew to LHE or greek to LGR).
-#   If True, LyX cares for characters/macros that do not exist in
+#   If True, LyX takes care for characters/macros that do not exist in
 #   some font encodings ("<", ">", "|" and straight quote).
 #   It is not required for standard encodings like T2A. See bug #5091.
-# * "FontEncoding none" tells LyX that fontenc should not be loaded with this
-#   language.
 # * AsBabelOptions advices LyX to pass the languages locally to babel, not
 #   globally to the class. Some languages (basically those not directly
 #   supported by babel) need this.
@@ -126,15 +136,18 @@ Language afrikaans
        BabelName        afrikaans
        QuoteStyle       polish
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         af_ZA
 End
 
+# FontEncoding: no hyphenation, but uses Ç/ç und Ë/ë
 Language albanian
        GuiName          "Albanian"
        BabelName        albanian
        PolyglossiaName  albanian
        QuoteStyle       swiss
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         sq_AL
 End
 
@@ -145,6 +158,7 @@ Language american
        PolyglossiaOpts  "variant=american"
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         en_US
 End
 
@@ -217,12 +231,14 @@ Language asturian
        LangCode         ast_ES
 End
 
+
 Language australian
        GuiName          "English (Australia)"
        BabelName        australian
        PolyglossiaName  english
        PolyglossiaOpts  "variant=australian"
        Encoding         iso8859-15
+       FontEncoding     ASCII
        QuoteStyle       english
        LangCode         en_AU
 End
@@ -236,6 +252,7 @@ Language austrian
        PolyglossiaOpts  "variant=austrian,spelling=old,babelshorthands=true"
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de_AT
 End
 
@@ -248,6 +265,7 @@ Language naustrian
        PolyglossiaOpts  "variant=austrian,spelling=new,babelshorthands=true"
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de_AT
 End
 
@@ -258,6 +276,7 @@ Language bahasa
        PolyglossiaName  bahasai
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         id_ID
 End
 
@@ -277,6 +296,7 @@ Language basque
        PolyglossiaName  basque
        QuoteStyle       swiss
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         eu_ES
        PostBabelPreamble
        \addto\extrasbasque{\bbl@deactivate{~}}
@@ -289,6 +309,7 @@ Language belarusian
        BabelName        belarusian
        QuoteStyle       french
        Encoding         cp1251
+       FontEncoding     T2A
        LangCode         be_BY
        AsBabelOptions   true
 End
@@ -299,6 +320,7 @@ Language bosnian
        BabelName        bosnian
        QuoteStyle       polish
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         bs_BA
 End
 
@@ -309,15 +331,18 @@ Language brazilian
        PolyglossiaName  brazil
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         pt_BR
 End
 
+# FontEncoding: # ? no hyphenation, but uses ñ
 Language breton
        GuiName          "Breton"
        BabelName        breton
        PolyglossiaName  breton
        QuoteStyle       french
        Encoding         iso8859-15
+       #FontEncoding    T1
        LangCode         br_FR
 End
 
@@ -328,6 +353,7 @@ Language british
        PolyglossiaOpts  "variant=british"
        QuoteStyle       british
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         en_GB
 End
 
@@ -350,6 +376,7 @@ Language canadian
 #      PolyglossiaOpts  "variant=canadian"
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         en_CA
 End
 
@@ -363,6 +390,7 @@ Language canadien
 #      PolyglossiaOpts  "variant=canadien"
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         fr_CA
 End
 
@@ -374,6 +402,7 @@ Language catalan
        PolyglossiaOpts  "babelshorthands=true"
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         ca_ES
 End
 
@@ -411,6 +440,7 @@ Language croatian
        PolyglossiaName  croatian
        QuoteStyle       polish
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         hr_HR
 End
 
@@ -421,6 +451,7 @@ Language czech
        PolyglossiaName  czech
        QuoteStyle       german
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         cs_CZ
 End
 
@@ -431,6 +462,7 @@ Language danish
        PolyglossiaName  danish
        QuoteStyle       danish
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         da_DK
 End
 
@@ -450,6 +482,7 @@ Language dutch
        PolyglossiaOpts  "babelshorthands=true"
        QuoteStyle       polish
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         nl_NL
 End
 
@@ -461,6 +494,7 @@ Language english
        PolyglossiaOpts  "variant=american"
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         en_US
 End
 
@@ -472,6 +506,7 @@ Language esperanto
        PolyglossiaName  esperanto
        QuoteStyle       english
        Encoding         iso8859-3
+       FontEncoding     IL3|T1|OT1
        LangCode         eo_EO
 End
 
@@ -481,6 +516,7 @@ Language estonian
        PolyglossiaName  estonian
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         et_EE
        PostBabelPreamble
        \addto\extrasestonian{\bbl@deactivate{~}}
@@ -511,6 +547,7 @@ Language finnish
        PolyglossiaName  finnish
        QuoteStyle       swedish
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         fi_FI
 End
 
@@ -522,6 +559,7 @@ Language french
        PolyglossiaName  french
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         fr_FR
        PostBabelPreamble
        \addto\extrasfrench{%
@@ -538,6 +576,7 @@ Language friulan
        PolyglossiaName  friulan
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         fur_IT
 End
 
@@ -548,6 +587,7 @@ Language galician
        PolyglossiaName  galician
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         gl_ES
        PostBabelPreamble
        \addto\shorthandsgalician{\galiciandeactivate{~}}
@@ -571,6 +611,7 @@ Language german
        PolyglossiaOpts  "variant=german,spelling=old,babelshorthands=true"
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de
        LangVariety      alt
 End
@@ -583,6 +624,7 @@ Language ngerman
        PolyglossiaOpts  "variant=german,spelling=new,babelshorthands=true"
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de_DE
 End
 
@@ -597,6 +639,7 @@ Language german-ch
        PolyglossiaOpts  "variant=swiss,spelling=new,babelshorthands=true"
        QuoteStyle       swiss
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de_CH
 End
 
@@ -610,6 +653,7 @@ Language german-ch-old
        PolyglossiaOpts  "variant=swiss,spelling=old,babelshorthands=true"
        QuoteStyle       swiss
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         de_CH
 End
 
@@ -675,12 +719,14 @@ End
 #       QuoteStyle      polish
 #End
 
+# FontEncoding: OT1 misses ð and Þ
 Language icelandic
        GuiName          "Icelandic"
        BabelName        icelandic
        PolyglossiaName  icelandic
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     T1
        LangCode         is_IS
 End
 
@@ -692,6 +738,7 @@ Language interlingua
        BabelName        interlingua
        PolyglossiaName  interlingua
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         ia_IA
        QuoteStyle       english
 End
@@ -702,6 +749,7 @@ Language irish
        PolyglossiaName  irish
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         ga_IE
 End
 
@@ -712,6 +760,7 @@ Language italian
        PolyglossiaName  italian
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         it_IT
 End
 
@@ -753,9 +802,10 @@ End
 # not yet supported by polyglossia
 # not supported by babel
 Language kazakh
-       GuiName         "Kazakh"
-       Encoding        ascii
-       LangCode        kk_KZ
+       GuiName          "Kazakh"
+       Encoding         ascii
+       FontEncoding     T2A
+       LangCode         kk_KZ
        PostBabelPreamble
        \input{t2aenc.def}
        \AtBeginDocument{\fontencoding{T2A}\selectfont}
@@ -783,6 +833,7 @@ Language kurmanji
        GuiName          "Kurmanji"
        BabelName        kurmanji
        Encoding         utf8
+       FontEncoding     T1|OT1
        LangCode         kmr
        AsBabelOptions   true
 End
@@ -802,24 +853,27 @@ Language latin
        BabelName        latin
        PolyglossiaName  latin
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         la_LA
 End
 
 # latvian must be loaded locally with babel options,
 # not globally via class options
+# FontEncoding: L7x required for hyphenation but not set by Babel
 Language latvian
        GuiName          "Latvian"
        BabelName        latvian
        PolyglossiaName  latvian
        QuoteStyle       german
        Encoding         iso8859-4
-#      FontEncoding     L7x # (required for hyphenation but not set by babel)
+       FontEncoding     L7x|T1|OT1
        LangCode         lv_LV
        AsBabelOptions   true
 End
 
 # lithuanian must be loaded locally with babel options,
 # not globally via class options
+# FontEncoding: L7x set by Babel
 Language lithuanian
        GuiName          "Lithuanian"
        BabelName        lithuanian
@@ -837,6 +891,7 @@ Language lowersorbian
        PolyglossiaName  lsorbian
        QuoteStyle       german
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         dsb_DE
 End
 
@@ -847,6 +902,7 @@ Language magyar
        PolyglossiaName  magyar
        QuoteStyle       polish
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         hu_HU
 End
 
@@ -889,6 +945,7 @@ Language newzealand
        PolyglossiaOpts  "variant=newzealand"
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         en_NZ
 End
 
@@ -899,6 +956,7 @@ Language norsk
        PolyglossiaName  norsk
        QuoteStyle       swiss
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         nb_NO
 End
 
@@ -909,6 +967,7 @@ Language nynorsk
        PolyglossiaName  nynorsk
        QuoteStyle       swiss
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         nn_NO
 End
 
@@ -941,9 +1000,11 @@ Language piedmontese
        PolyglossiaName  piedmontese
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         pms_IT
 End
 
+# FontEncoding: QX required for hyphenation but not set by babel
 Language polish
        GuiName          "Polish"
        HasGuiSupport    true
@@ -951,7 +1012,7 @@ Language polish
        PolyglossiaName  polish
        QuoteStyle       polish
        Encoding         iso8859-2
-#      FontEncoding     QX # (required for hyphenation but not set by babel)
+       FontEncoding     QX|T1|OT1
        LangCode         pl_PL
 End
 
@@ -962,6 +1023,7 @@ Language portuguese
        PolyglossiaName  portuges
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         pt_PT
 End
 
@@ -972,6 +1034,7 @@ Language romanian
        PolyglossiaName  romanian
        QuoteStyle       polish
        Encoding         iso8859-16
+       FontEncoding     T1|OT1
        LangCode         ro_RO
 End
 
@@ -982,6 +1045,7 @@ Language romansh
        PolyglossiaName  romansh
        QuoteStyle       german
        Encoding         iso8859-15
+       FontEncoding     ASCII
        LangCode         rm_CH
 End
 
@@ -997,11 +1061,13 @@ Language russian
        Provides         textcyrillic
 End
 
+# FontEncoding: no hyphenation, but diacritics
 Language samin
        GuiName          "North Sami"
        BabelName        samin
        PolyglossiaName  samin
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         se_NO
 End
 
@@ -1013,12 +1079,15 @@ Language sanskrit
        LangCode         sa_IN
 End
 
+# Gaidhlig (Scottish Gaelic)
+# FontEncoding: no hyphenation, grave accent (à, è, ì, ò, ù)
 Language scottish
        GuiName          "Scottish"
        BabelName        scottish
        PolyglossiaName  scottish
        QuoteStyle       english
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         gd_GB
 End
 
@@ -1046,6 +1115,7 @@ Language serbian-latin
        PolyglossiaOpts  "script=Latin"
        QuoteStyle       polish
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         sr_RS-Latin
 End
 
@@ -1056,6 +1126,7 @@ Language slovak
        PolyglossiaName  slovak
        QuoteStyle       german
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         sk_SK
 End
 
@@ -1065,6 +1136,7 @@ Language slovene
        PolyglossiaName  slovenian
        QuoteStyle       german
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         sl_SI
 End
 
@@ -1075,6 +1147,7 @@ Language spanish
        PolyglossiaName  spanish
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         es_ES
        PostBabelPreamble
        \addto\shorthandsspanish{\spanishdeactivate{~<>}}
@@ -1088,6 +1161,7 @@ Language spanish-mexico
        PolyglossiaName  spanish
        QuoteStyle       french
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         es_MX
        PostBabelPreamble
        \addto\shorthandsspanish{\spanishdeactivate{~<>.}}
@@ -1101,6 +1175,7 @@ Language swedish
        PolyglossiaName  swedish
        QuoteStyle       swedish
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         sv_SE
 End
 
@@ -1135,7 +1210,7 @@ Language thai
        PolyglossiaName  thai
        QuoteStyle       english
        Encoding         tis620-0
-#      FontEncoding     LTH
+       FontEncoding     LTH
        LangCode         th_TH
        PostBabelPreamble
        \usepackage{thswitch}
@@ -1157,6 +1232,7 @@ Language turkish
        PolyglossiaName  turkish
        QuoteStyle       english
        Encoding         iso8859-9
+       FontEncoding     T1|OT1
        LangCode         tr_TR
        PostBabelPreamble
        \usepackage{xkeyval}
@@ -1171,6 +1247,7 @@ Language turkmen
        PolyglossiaName  turkmen
        QuoteStyle       swiss
        Encoding         utf8
+       FontEncoding     T1|OT1
        LangCode         tk_TM
        AsBabelOptions   true
 End
@@ -1193,6 +1270,7 @@ Language uppersorbian
        PolyglossiaName  usorbian
        QuoteStyle       german
        Encoding         iso8859-2
+       FontEncoding     T1|OT1
        LangCode         hsb_DE
 End
 
@@ -1211,6 +1289,7 @@ Language vietnamese
        PolyglossiaName  vietnamese
        QuoteStyle       english
        Encoding         utf8
+       FontEncoding     T5
        LangCode         vi_VN
 End
 
@@ -1220,5 +1299,6 @@ Language welsh
        PolyglossiaName  welsh
        QuoteStyle       british
        Encoding         iso8859-15
+       FontEncoding     T1|OT1
        LangCode         cy_GB
 End
index 0b87742241d3f8dccf6c2875b7431adb02eab892..f3a438a5577e29347ebded9c7435393e8208f1c9 100644 (file)
@@ -7,6 +7,7 @@
 # Font <name>
 #      GuiName            "<Gui Name>"
 #      Family             <rm|sf|tt|math>
+#      FontEncoding       <font encoding>
 #      SwitchDefault      <0|1>
 #      Package            <LaTeX package to be loaded>
 #      Requires           <LaTeX package to test for>
@@ -33,6 +34,7 @@
 # * Adding a new font results in a FILE FORMAT CHANGE. So if a new font
 #   is added for the LyX distribution, the according changes need to be
 #   done.
+# * If FontEncoding is not specified, T1 is assumed.
 # * "SwitchDefault 1" makes the font to be loaded by switching the default
 #   family to <name> (e.g., \renewcommand{\rmdefault}{cmr}), whereas
 #   Package <package> loads it via \usepackage{package}. Only one of these
@@ -141,6 +143,7 @@ EndFont
 Font cmr
        GuiName          "Computer Modern Roman"
        Family           rm
+       FontEncoding     OT1
        SwitchDefault    1
        OsfFont          eco
 EndFont
@@ -521,6 +524,7 @@ EndFont
 Font cmss
        GuiName          "Computer Modern Sans"
        Family           sf
+       FontEncoding     OT1
        SwitchDefault    1
 EndFont
 
@@ -652,6 +656,7 @@ EndFont
 Font cmtt
        GuiName          "Computer Modern Typewriter"
        Family           tt
+       FontEncoding     OT1
        SwitchDefault    1
 EndFont
 
index 43542866c1f41baea30edb2c1fce156388aa3249..ac84d6a2a1c06d3093f7e1c8ba591c8b69033c1b 100644 (file)
@@ -182,6 +182,26 @@ def revert_lscape(document):
         # no need to reset i
 
 
+def convert_fontenc(document):
+    " Convert default fontenc setting "
+
+    i = find_token(document.header, "\\fontencoding global", 0)
+    if i == -1:
+        return
+
+    document.header[i] = document.header[i].replace("global", "auto")
+
+
+def revert_fontenc(document):
+    " Revert default fontenc setting "
+
+    i = find_token(document.header, "\\fontencoding auto", 0)
+    if i == -1:
+        return
+
+    document.header[i] = document.header[i].replace("auto", "global")
+
+
 ##
 # Conversion hub
 #
@@ -192,10 +212,12 @@ convert = [
            [546, []],
            [547, []],
            [548, []],
-           [549, []]
+           [549, []],
+           [550, [convert_fontenc]]
           ]
 
 revert =  [
+           [549, [revert_fontenc]],
            [548, []],# dummy format change
            [547, [revert_lscape]],
            [546, [revert_xcharter]],
index 6f245f638d46414b426c99ba10e8a462e742ece9..6007a95cc3535f44453a32f6df976696b7e14109 100644 (file)
 # Incremented to format 25, by lasgouttes
 #   Remove use_qimage preference
 
+# Incremented to format 26, by spitz
+#   Rename font_encoding preference
+
 # NOTE: The format should also be updated in LYXRC.cpp and
 # in configure.py.
 
@@ -394,6 +397,11 @@ def remove_use_qimage(line):
                return no_match
        return (True, "")
 
+def remove_font_encoding(line):
+       if not line.lower().startswith("\\font_encoding "):
+               return no_match
+       return (True, "")
+
 # End conversions for LyX 2.3 to 2.4
 ####################################
 
@@ -433,5 +441,6 @@ conversions = [
        [ 22, []],
        [ 23, []],
        [ 24, [rename_collapsible]],
-       [ 25, [remove_use_qimage]]
+       [ 25, [remove_use_qimage]],
+       [ 26, [remove_font_encoding]]
 ]
index f0be844870c8f079659574683f242380a36e2f13..8143556ade9d4419b9ccab58bfb23920c93206fd 100644 (file)
@@ -406,7 +406,7 @@ BufferParams::BufferParams()
        secnumdepth = 3;
        tocdepth = 3;
        language = default_language;
-       fontenc = "global";
+       fontenc = "auto";
        fonts_roman[0] = "default";
        fonts_roman[1] = "default";
        fonts_sans[0] = "default";
@@ -3120,20 +3120,21 @@ string const BufferParams::main_font_encoding() const
 
 vector<string> const BufferParams::font_encodings() const
 {
-       string doc_fontenc = (fontenc == "global") ? lyxrc.fontenc : fontenc;
+       string doc_fontenc = (fontenc == "auto") ? string() : fontenc;
 
        vector<string> fontencs;
 
        // "default" means "no explicit font encoding"
        if (doc_fontenc != "default") {
-               fontencs = getVectorFromString(doc_fontenc);
-               if (!language->fontenc().empty()
-                   && ascii_lowercase(language->fontenc()) != "none") {
-                       vector<string> fencs = getVectorFromString(language->fontenc());
-                       vector<string>::const_iterator fit = fencs.begin();
-                       for (; fit != fencs.end(); ++fit) {
-                               if (find(fontencs.begin(), fontencs.end(), *fit) == fontencs.end())
-                                       fontencs.push_back(*fit);
+               if (!doc_fontenc.empty())
+                       // If we have a custom setting, we use only that!
+                       return getVectorFromString(doc_fontenc);
+               if (!language->fontenc(*this).empty()
+                   && ascii_lowercase(language->fontenc(*this)) != "none") {
+                       vector<string> fencs = getVectorFromString(language->fontenc(*this));
+                       for (auto & fe : fencs) {
+                               if (find(fontencs.begin(), fontencs.end(), fe) == fontencs.end())
+                                       fontencs.push_back(fe);
                        }
                }
        }
index d3b8a50844a82c4985578db8ba8d1a3783ba928a..88a34cc876e8f72fac8fce31f60dbf40939e6e36 100644 (file)
@@ -905,11 +905,10 @@ void LaTeXFeatures::getFontEncodings(vector<string> & encs, bool const onlylangs
        }
 
        for (auto const & lang : UsedLanguages_)
-               if (!lang->fontenc().empty()
-                   && ascii_lowercase(lang->fontenc()) != "none") {
-                       vector<string> extraencs = getVectorFromString(lang->fontenc());
+               if (!lang->fontencs().empty()) {
+                       vector<string> extraencs = lang->fontencs();
                        for (auto const & extra : extraencs) {
-                               if (find(encs.begin(), encs.end(), extra) == encs.end())
+                               if (extra != "none" && find(encs.begin(), encs.end(), extra) == encs.end())
                                        encs.insert(encs.begin(), extra);
                        }
                }
index ad65439b942df50f738a225e63a8a79cdc76390f..8cd51139c1576f178bdcdb44a966bfccf79713c7 100644 (file)
@@ -310,6 +310,16 @@ string const LaTeXFont::getLaTeXCode(bool dryrun, bool ot1, bool complete, bool
 }
 
 
+bool LaTeXFont::hasFontenc(string const & name) const
+{
+       for (auto const & fe : fontenc_) {
+               if (fe == name)
+                       return true;
+       }
+       return false;
+}
+
+
 bool LaTeXFont::readFont(Lexer & lex)
 {
        enum LaTeXFontTags {
@@ -317,6 +327,7 @@ bool LaTeXFont::readFont(Lexer & lex)
                LF_COMPLETE_FONT,
                LF_END,
                LF_FAMILY,
+               LF_FONTENC,
                LF_GUINAME,
                LF_NOMATHFONT,
                LF_OSFDEFAULT,
@@ -340,6 +351,7 @@ bool LaTeXFont::readFont(Lexer & lex)
                { "completefont",         LF_COMPLETE_FONT },
                { "endfont",              LF_END },
                { "family",               LF_FAMILY },
+               { "fontencoding",         LF_FONTENC },
                { "guiname",              LF_GUINAME },
                { "nomathfont",           LF_NOMATHFONT },
                { "osfdefault",           LF_OSFDEFAULT },
@@ -395,6 +407,12 @@ bool LaTeXFont::readFont(Lexer & lex)
                case LF_GUINAME:
                        lex >> guiname_;
                        break;
+               case LF_FONTENC: {
+                       lex.eatLine();
+                       string fe = lex.getString();
+                       fontenc_ = getVectorFromString(fe);
+                       break;
+               }
                case LF_NOMATHFONT:
                        lex >> nomathfont_;
                        break;
@@ -468,6 +486,9 @@ bool LaTeXFont::read(Lexer & lex)
                return false;
        }
 
+       if (fontenc_.empty())
+               fontenc_.push_back("T1");
+
        return true;
 }
 
index a77902a5800e985c38f5c9dcb238933e00887da7..ca37be5a5989cba9490b7d9a40a56bbd9a5c7020 100644 (file)
@@ -35,6 +35,10 @@ public:
        docstring const & family() { return family_; }
        /// The package that provides this font
        docstring const & package() { return package_; }
+       /// Does this provide a specific font encoding?
+       bool hasFontenc(std::string const &) const;
+       /// The font encoding(s)
+       std::vector<std::string> const & fontencs() const { return fontenc_; }
        /// Alternative font if package() is not available
        std::vector<docstring> const & altfonts() { return altfonts_; }
        /// A font that provides all families
@@ -109,6 +113,8 @@ private:
        ///
        docstring package_;
        ///
+       std::vector<std::string> fontenc_;
+       ///
        std::vector<docstring> altfonts_;
        ///
        docstring completefont_;
index 3061df313074b33ec159354d81dbfe451b4ee342..51e1a5b896cef4d4ceed0f6035aa9ba9b370628f 100644 (file)
@@ -16,6 +16,7 @@
 #include "Language.h"
 
 #include "Encoding.h"
+#include "LaTeXFonts.h"
 #include "Lexer.h"
 #include "LyXRC.h"
 
@@ -71,6 +72,37 @@ docstring const Language::translateLayout(string const & m) const
 }
 
 
+vector<string> Language::fontencs() const
+{
+       return fontenc_;
+}
+
+
+string Language::fontenc(BufferParams const & params) const
+{
+       // Determine optimal font encoding
+       // We check whether the used rm font supports an encoding our language supports
+       for (auto & fe : fontenc_) {
+               LaTeXFont const & lf = theLaTeXFonts().getLaTeXFont(from_ascii(params.fontsRoman()));
+               // ASCII means: support all T* encodings plus OT1
+               if (fe == "ASCII") {
+                       vector<string> const lfe = lf.fontencs();
+                       for (auto & afe : lfe) {
+                               if (afe == "OT1" || prefixIs(afe, "T"))
+                                       // we found a suitable one; return that.
+                                       return afe;
+                       }
+               }
+               // For other encodings, just check whether the font supports it
+               if (lf.hasFontenc(fe))
+                       return fe;
+       }
+       // We did not find a suitable one; just take the first in the list,
+       // the priorized one (which is "T1" for ASCII).
+       return fontencs().front() == "ASCII" ? "T1" : fontencs().front();
+}
+
+
 bool Language::readLanguage(Lexer & lex)
 {
        enum LanguageTags {
@@ -157,9 +189,13 @@ bool Language::readLanguage(Lexer & lex)
                case LA_ENCODING:
                        lex >> encodingStr_;
                        break;
-               case LA_FONTENC:
-                       lex >> fontenc_;
+               case LA_FONTENC: {
+                       lex.eatLine();
+                       vector<string> const fe =
+                               getVectorFromString(lex.getString(true), "|");
+                       fontenc_.insert(fontenc_.end(), fe.begin(), fe.end());
                        break;
+               }
                case LA_GUINAME:
                        lex >> display_;
                        break;
@@ -223,6 +259,8 @@ bool Language::read(Lexer & lex)
                encoding_ = encodings.fromLyXName("iso8859-1");
                LYXERR0("Unknown encoding " << encodingStr_);
        }
+       if (fontenc_.empty())
+               fontenc_.push_back("ASCII");
        return true;
 }
 
index ddcc32894c723708ca1c42d844d48d42ee9dd169..390e0a6f7276f8d7e568e73cd8be3d33b5c66ec4 100644 (file)
 #ifndef LANGUAGE_H
 #define LANGUAGE_H
 
+#include "BufferParams.h"
+
 #include "support/docstring.h"
 #include "support/trivstring.h"
 
 #include <map>
+#include <vector>
 
 
 namespace lyx {
@@ -82,7 +85,9 @@ public:
        /// This language internally sets a font encoding
        bool internalFontEncoding() const { return internal_enc_; }
        /// fontenc encoding(s)
-       std::string const fontenc() const { return fontenc_; }
+       std::string fontenc(BufferParams const &) const;
+       /// fontenc encoding(s)
+       std::vector<std::string> fontencs() const;
        /// This language needs to be passed to babel itself (not the class)
        bool asBabelOptions() const { return as_babel_options_; }
        /// This language corresponds to a translation of the GUI
@@ -129,7 +134,7 @@ private:
        ///
        trivdocstring babel_presettings_;
        ///
-       trivstring fontenc_;
+       std::vector<std::string> fontenc_;
        ///
        bool internal_enc_;
        ///
index 7e2dab8860c94880e12139e947c5b180ee0cfebe..0ec6f78073b8f41482ebfe8f4949755b5086f0bf 100644 (file)
@@ -59,7 +59,7 @@ namespace {
 
 // The format should also be updated in configure.py, and conversion code
 // should be added to prefs2prefs_prefs.py.
-static unsigned int const LYXRC_FILEFORMAT = 25; // lasgouttes: remove qimage
+static unsigned int const LYXRC_FILEFORMAT = 26; // spitz: remove font_encoding
 
 // when adding something to this array keep it sorted!
 LexerKeyword lyxrcTags[] = {
@@ -107,7 +107,6 @@ LexerKeyword lyxrcTags[] = {
        { "\\escape_chars", LyXRC::RC_ESC_CHARS },
        { "\\example_path", LyXRC::RC_EXAMPLEPATH },
        { "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
-       { "\\font_encoding", LyXRC::RC_FONT_ENCODING },
        { "\\format", LyXRC::RC_FILEFORMAT },
        { "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
        { "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
@@ -241,7 +240,6 @@ void LyXRC::setDefaults()
        default_platex_view_format = "pdf3";
        chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
        bibtex_command = "automatic";
-       fontenc = "default";
        index_command = "makeindex -c -q";
        nomencl_command = "makeindex -s nomencl.ist";
        pygmentize_command = string();
@@ -534,10 +532,6 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
                        }
                        break;
 
-               case RC_FONT_ENCODING:
-                       lexrc >> fontenc;
-                       break;
-
                case RC_PRINTLANDSCAPEFLAG:
                        lexrc >> print_landscape_flag;
                        break;
@@ -2119,18 +2113,9 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
                if (tag != RC_LAST)
                        break;
                // fall through
-       case RC_FONT_ENCODING:
-               if (ignore_system_lyxrc ||
-                   fontenc != system_lyxrc.fontenc) {
-                       os << "\\font_encoding \"" << fontenc << "\"\n";
-               }
-               if (tag != RC_LAST)
-                       break;
-
                os << "\n#\n"
                   << "# FILE SECTION ######################################\n"
                   << "#\n\n";
-
        // fall through
        case RC_DOCUMENTPATH:
                if (ignore_system_lyxrc ||
@@ -2945,7 +2930,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
        case LyXRC::RC_EDITOR_ALTERNATIVES:
        case LyXRC::RC_ESC_CHARS:
        case LyXRC::RC_EXAMPLEPATH:
-       case LyXRC::RC_FONT_ENCODING:
        case LyXRC::RC_FILEFORMAT:
        case LyXRC::RC_GROUP_LAYOUTS:
        case LyXRC::RC_HUNSPELLDIR_PATH:
@@ -3196,10 +3180,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
                str = _("The path that LyX will set when offering to choose an example. An empty value selects the directory LyX was started from.");
                break;
 
-       case RC_FONT_ENCODING:
-               str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
-               break;
-
        case RC_FILEFORMAT:
                break;
 
index 53766731e86d710d4b0fb848c09fabbfa826748b..c56c5818e436685e96d562e84da44d41d1f0415f 100644 (file)
@@ -80,7 +80,6 @@ public:
                RC_ESC_CHARS,
                RC_EXAMPLEPATH,
                RC_EXPORT_OVERWRITE,
-               RC_FONT_ENCODING,
                RC_FILEFORMAT,
                RC_FORWARD_SEARCH_DVI,
                RC_FORWARD_SEARCH_PDF,
@@ -308,8 +307,6 @@ public:
        /// DPI of monitor
        unsigned int dpi;
        ///
-       std::string fontenc;
-       ///
        std::string roman_font_name;
        ///
        std::string sans_font_name;
index 8cd8357b8b110f4217e8980c2fb7e72cba6af9b2..7f1bf4cca2bdd051c3397595d2bd2fb870458bed 100644 (file)
@@ -314,13 +314,15 @@ public:
 
        /// Output the surrogate pair formed by \p c and \p next to \p os.
        /// \return the number of characters written.
-       int latexSurrogatePair(otexstream & os, char_type c, char_type next,
+       int latexSurrogatePair(BufferParams const &, otexstream & os,
+                              char_type c, char_type next,
                               OutputParams const &);
 
        /// Output a space in appropriate formatting (or a surrogate pair
        /// if the next character is a combining character).
        /// \return whether a surrogate pair was output.
-       bool simpleTeXBlanks(OutputParams const &,
+       bool simpleTeXBlanks(BufferParams const &,
+                            OutputParams const &,
                             otexstream &,
                             pos_type i,
                             unsigned int & column,
@@ -330,7 +332,8 @@ public:
        /// Output consecutive unicode chars, belonging to the same script as
        /// specified by the latex macro \p ltx, to \p os starting from \p i.
        /// \return the number of characters written.
-       int writeScriptChars(OutputParams const &, otexstream & os,
+       int writeScriptChars(BufferParams const &, OutputParams const &,
+                            otexstream & os,
                             docstring const & ltx,
                             Change const &, Encoding const &,
                             std::string const, pos_type & i);
@@ -867,8 +870,9 @@ int Paragraph::eraseChars(pos_type start, pos_type end, bool trackChanges)
 }
 
 
-int Paragraph::Private::latexSurrogatePair(otexstream & os, char_type c,
-               char_type next, OutputParams const & runparams)
+int Paragraph::Private::latexSurrogatePair(BufferParams const & bparams,
+               otexstream & os, char_type c, char_type next,
+               OutputParams const & runparams)
 {
        // Writing next here may circumvent a possible font change between
        // c and next. Since next is only output if it forms a surrogate pair
@@ -907,7 +911,7 @@ int Paragraph::Private::latexSurrogatePair(otexstream & os, char_type c,
        int length = brace2;
        string fontenc;
        if (runparams.local_font)
-               fontenc = runparams.local_font->language()->fontenc();
+               fontenc = runparams.local_font->language()->fontenc(bparams);
        else
                fontenc = runparams.main_fontenc;
        docstring scriptmacro;
@@ -940,7 +944,8 @@ int Paragraph::Private::latexSurrogatePair(otexstream & os, char_type c,
 }
 
 
-bool Paragraph::Private::simpleTeXBlanks(OutputParams const & runparams,
+bool Paragraph::Private::simpleTeXBlanks(BufferParams const & bparams,
+                                      OutputParams const & runparams,
                                       otexstream & os,
                                       pos_type i,
                                       unsigned int & column,
@@ -954,7 +959,7 @@ bool Paragraph::Private::simpleTeXBlanks(OutputParams const & runparams,
                char_type next = text_[i + 1];
                if (Encodings::isCombiningChar(next)) {
                        // This space has an accent, so we must always output it.
-                       column += latexSurrogatePair(os, ' ', next, runparams) - 1;
+                       column += latexSurrogatePair(bparams, os, ' ', next, runparams) - 1;
                        return true;
                }
        }
@@ -985,7 +990,8 @@ bool Paragraph::Private::simpleTeXBlanks(OutputParams const & runparams,
 }
 
 
-int Paragraph::Private::writeScriptChars(OutputParams const & runparams,
+int Paragraph::Private::writeScriptChars(BufferParams const & bparams,
+                                        OutputParams const & runparams,
                                         otexstream & os,
                                         docstring const & ltx,
                                         Change const & runningChange,
@@ -1047,7 +1053,7 @@ int Paragraph::Private::writeScriptChars(OutputParams const & runparams,
                if (i + 2 < size) {
                        next_next = text_[i + 2];
                        if (Encodings::isCombiningChar(next_next)) {
-                               length += latexSurrogatePair(os, next, next_next, runparams) - 1;
+                               length += latexSurrogatePair(bparams, os, next, next_next, runparams) - 1;
                                i += 2;
                                continue;
                        }
@@ -1362,7 +1368,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                if (i + 1 < int(text_.size())) {
                        next = text_[i + 1];
                        if (Encodings::isCombiningChar(next)) {
-                               column += latexSurrogatePair(os, c, next, runparams) - 1;
+                               column += latexSurrogatePair(bparams, os, c, next, runparams) - 1;
                                ++i;
                                break;
                        }
@@ -1392,7 +1398,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                if (running_font.language()->lang() == bparams.language->lang())
                        fontenc = runparams.main_fontenc;
                else
-                       fontenc = running_font.language()->fontenc();
+                       fontenc = running_font.language()->fontenc(bparams);
                // "Script chars" need to embraced in \textcyrillic and \textgreek notwithstanding
                // whether they are encodable or not (it only depends on the font encoding)
                if (!runparams.isFullUnicode() && Encodings::isKnownScriptChar(c, script)) {
@@ -1400,7 +1406,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                        docstring ltx = latex.first;
                        if (!prefixIs(ltx, wrapper))
                                ltx = wrapper + latex.first + from_ascii("}");
-                       column += writeScriptChars(runparams, os, ltx, running_change,
+                       column += writeScriptChars(bparams, runparams, os, ltx, running_change,
                                                   encoding, fontenc, i) - 1;
                } else if (latex.second
                         && ((!prefixIs(nextlatex, '\\')
@@ -1557,7 +1563,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const
                                 || ((&owner_->getFontSettings(bp, i))->language()->internalFontEncoding()))
                                features.require("textquotedbl");
                } else if (Encodings::isKnownScriptChar(c, bscript)){
-                       string fontenc = (&owner_->getFontSettings(bp, i))->language()->fontenc();
+                       string fontenc = (&owner_->getFontSettings(bp, i))->language()->fontenc(bp);
                        if (fontenc.empty())
                                fontenc = features.runparams().main_fontenc;
                        if (Encodings::needsScriptWrapper("textbaltic", fontenc))
@@ -2689,7 +2695,7 @@ void Paragraph::latex(BufferParams const & bparams,
                        // latexSpecialChar ignores spaces if
                        // style.pass_thru is false.
                        if (i != body_pos - 1) {
-                               if (d->simpleTeXBlanks(runparams, os,
+                               if (d->simpleTeXBlanks(bparams, runparams, os,
                                                i, column, current_font, style)) {
                                        // A surrogate pair was output. We
                                        // must not call latexSpecialChar
index d05629568e604d8aed627ebe3e9ef7e7c0a0cbb9..5fc1e062c69504600f2520063418d4eb4f283e0a 100644 (file)
@@ -841,6 +841,62 @@ GuiDocument::GuiDocument(GuiView & lv)
        connect(outputModule->saveTransientPropertiesCB, SIGNAL(clicked()),
                this, SLOT(change_adaptor()));
 
+
+       // language & quote
+       // this must preceed font, since fonts depend on this
+       langModule = new UiWidget<Ui::LanguageUi>(this);
+       connect(langModule->languageCO, SIGNAL(activated(int)),
+               this, SLOT(change_adaptor()));
+       connect(langModule->languageCO, SIGNAL(activated(int)),
+               this, SLOT(languageChanged(int)));
+       connect(langModule->defaultencodingRB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+       connect(langModule->otherencodingRB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+       connect(langModule->encodingCO, SIGNAL(activated(int)),
+               this, SLOT(change_adaptor()));
+       connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
+               this, SLOT(change_adaptor()));
+       connect(langModule->languagePackageCO, SIGNAL(activated(int)),
+               this, SLOT(change_adaptor()));
+       connect(langModule->languagePackageLE, SIGNAL(textChanged(QString)),
+               this, SLOT(change_adaptor()));
+       connect(langModule->languagePackageCO, SIGNAL(currentIndexChanged(int)),
+               this, SLOT(languagePackageChanged(int)));
+       connect(langModule->dynamicQuotesCB, SIGNAL(clicked()),
+               this, SLOT(change_adaptor()));
+
+       langModule->languagePackageLE->setValidator(new NoNewLineValidator(
+               langModule->languagePackageLE));
+
+       QAbstractItemModel * language_model = guiApp->languageModel();
+       // FIXME: it would be nice if sorting was enabled/disabled via a checkbox.
+       language_model->sort(0);
+       langModule->languageCO->setModel(language_model);
+       langModule->languageCO->setModelColumn(0);
+
+       // Always put the default encoding in the first position.
+       langModule->encodingCO->addItem(qt_("Language Default (no inputenc)"));
+       QStringList encodinglist;
+       for (auto const & encvar : encodings) {
+               if (!encvar.unsafe() && !encvar.guiName().empty())
+                       encodinglist.append(qt_(encvar.guiName()));
+       }
+       encodinglist.sort();
+       langModule->encodingCO->addItems(encodinglist);
+
+       langModule->languagePackageCO->addItem(
+               qt_("Default"), toqstr("default"));
+       langModule->languagePackageCO->addItem(
+               qt_("Automatic"), toqstr("auto"));
+       langModule->languagePackageCO->addItem(
+               qt_("Always Babel"), toqstr("babel"));
+       langModule->languagePackageCO->addItem(
+               qt_("Custom"), toqstr("custom"));
+       langModule->languagePackageCO->addItem(
+               qt_("None[[language package]]"), toqstr("none"));
+
+
        // fonts
        fontModule = new FontModule(this);
        connect(fontModule->osFontsCB, SIGNAL(clicked()),
@@ -904,9 +960,9 @@ GuiDocument::GuiDocument(GuiView & lv)
        fontModule->fontsizeCO->addItem(qt_("11"));
        fontModule->fontsizeCO->addItem(qt_("12"));
 
-       fontModule->fontencCO->addItem(qt_("Default"), QString("global"));
+       fontModule->fontencCO->addItem(qt_("Automatic"), QString("auto"));
+       fontModule->fontencCO->addItem(qt_("Class default"), QString("default"));
        fontModule->fontencCO->addItem(qt_("Custom"), QString("custom"));
-       fontModule->fontencCO->addItem(qt_("None (no fontenc)"), QString("default"));
 
        for (int n = 0; GuiDocument::fontfamilies_gui[n][0]; ++n)
                fontModule->fontsDefaultCO->addItem(
@@ -1071,60 +1127,6 @@ GuiDocument::GuiDocument(GuiView & lv)
                marginsModule->columnsepL);
 
 
-       // language & quote
-       langModule = new UiWidget<Ui::LanguageUi>(this);
-       connect(langModule->languageCO, SIGNAL(activated(int)),
-               this, SLOT(change_adaptor()));
-       connect(langModule->languageCO, SIGNAL(activated(int)),
-               this, SLOT(languageChanged(int)));
-       connect(langModule->defaultencodingRB, SIGNAL(clicked()),
-               this, SLOT(change_adaptor()));
-       connect(langModule->otherencodingRB, SIGNAL(clicked()),
-               this, SLOT(change_adaptor()));
-       connect(langModule->encodingCO, SIGNAL(activated(int)),
-               this, SLOT(change_adaptor()));
-       connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
-               this, SLOT(change_adaptor()));
-       connect(langModule->languagePackageCO, SIGNAL(activated(int)),
-               this, SLOT(change_adaptor()));
-       connect(langModule->languagePackageLE, SIGNAL(textChanged(QString)),
-               this, SLOT(change_adaptor()));
-       connect(langModule->languagePackageCO, SIGNAL(currentIndexChanged(int)),
-               this, SLOT(languagePackageChanged(int)));
-       connect(langModule->dynamicQuotesCB, SIGNAL(clicked()),
-               this, SLOT(change_adaptor()));
-
-       langModule->languagePackageLE->setValidator(new NoNewLineValidator(
-               langModule->languagePackageLE));
-
-       QAbstractItemModel * language_model = guiApp->languageModel();
-       // FIXME: it would be nice if sorting was enabled/disabled via a checkbox.
-       language_model->sort(0);
-       langModule->languageCO->setModel(language_model);
-       langModule->languageCO->setModelColumn(0);
-
-       // Always put the default encoding in the first position.
-       langModule->encodingCO->addItem(qt_("Language Default (no inputenc)"));
-       QStringList encodinglist;
-       for (auto const & encvar : encodings) {
-               if (!encvar.unsafe() && !encvar.guiName().empty())
-                       encodinglist.append(qt_(encvar.guiName()));
-       }
-       encodinglist.sort();
-       langModule->encodingCO->addItems(encodinglist);
-
-       langModule->languagePackageCO->addItem(
-               qt_("Default"), toqstr("default"));
-       langModule->languagePackageCO->addItem(
-               qt_("Automatic"), toqstr("auto"));
-       langModule->languagePackageCO->addItem(
-               qt_("Always Babel"), toqstr("babel"));
-       langModule->languagePackageCO->addItem(
-               qt_("Custom"), toqstr("custom"));
-       langModule->languagePackageCO->addItem(
-               qt_("None[[language package]]"), toqstr("none"));
-
-
        // color
        colorModule = new UiWidget<Ui::ColorUi>(this);
        connect(colorModule->fontColorPB, SIGNAL(clicked()),
@@ -2151,8 +2153,13 @@ bool GuiDocument::ot1() const
 {
        QString const fontenc =
                fontModule->fontencCO->itemData(fontModule->fontencCO->currentIndex()).toString();
+       int const i = langModule->languageCO->currentIndex();
+       if (i == -1)
+               return false;
+       QString const langname = langModule->languageCO->itemData(i).toString();
+       Language const * newlang = lyx::languages.getLanguage(fromqstr(langname));
        return (fontenc == "default"
-               || (fontenc == "global" && (lyxrc.fontenc == "default" || lyxrc.fontenc == "OT1"))
+               || (fontenc == "auto" && newlang->fontenc(buffer().params()) == "OT1")
                || (fontenc == "custom" && fontModule->fontencLE->text() == "OT1"));
 }
 
@@ -3837,12 +3844,13 @@ void GuiDocument::paramsToDialog()
        if (nn >= 0)
                fontModule->fontsDefaultCO->setCurrentIndex(nn);
 
-       if (bp_.fontenc == "global" || bp_.fontenc == "default") {
+       if (bp_.fontenc == "auto" || bp_.fontenc == "default") {
                fontModule->fontencCO->setCurrentIndex(
                        fontModule->fontencCO->findData(toqstr(bp_.fontenc)));
                fontModule->fontencLE->setEnabled(false);
        } else {
-               fontModule->fontencCO->setCurrentIndex(1);
+               fontModule->fontencCO->setCurrentIndex(
+                                       fontModule->fontencCO->findData("custom"));
                fontModule->fontencLE->setText(toqstr(bp_.fontenc));
        }
 
index f1b817a451ba6e15c7f220e3c50e10108a229eb6..d855ffa15d4f57bdccb8b8fbda16e60094ca0c86 100644 (file)
@@ -725,7 +725,6 @@ PrefLatex::PrefLatex(GuiPreferences * form)
 {
        setupUi(this);
 
-       latexEncodingED->setValidator(new NoNewLineValidator(latexEncodingED));
        latexDviPaperED->setValidator(new NoNewLineValidator(latexDviPaperED));
        latexBibtexED->setValidator(new NoNewLineValidator(latexBibtexED));
        latexJBibtexED->setValidator(new NoNewLineValidator(latexJBibtexED));
@@ -734,10 +733,6 @@ PrefLatex::PrefLatex(GuiPreferences * form)
        latexNomenclED->setValidator(new NoNewLineValidator(latexNomenclED));
        latexChecktexED->setValidator(new NoNewLineValidator(latexChecktexED));
 
-       connect(latexEncodingCB, SIGNAL(clicked()),
-               this, SIGNAL(changed()));
-       connect(latexEncodingED, SIGNAL(textChanged(QString)),
-               this, SIGNAL(changed()));
        connect(latexChecktexED, SIGNAL(textChanged(QString)),
                this, SIGNAL(changed()));
        connect(latexBibtexCO, SIGNAL(activated(int)),
@@ -771,12 +766,6 @@ PrefLatex::PrefLatex(GuiPreferences * form)
 }
 
 
-void PrefLatex::on_latexEncodingCB_stateChanged(int state)
-{
-       latexEncodingED->setEnabled(state == Qt::Checked);
-}
-
-
 void PrefLatex::on_latexBibtexCO_activated(int n)
 {
        QString const bibtex = latexBibtexCO->itemData(n).toString();
@@ -890,10 +879,6 @@ void PrefLatex::applyRC(LyXRC & rc) const
        else
                rc.index_command = fromqstr(index) + " " + fromqstr(idxopt);
 
-       if (latexEncodingCB->isChecked())
-               rc.fontenc = fromqstr(latexEncodingED->text());
-       else
-               rc.fontenc = "default";
        rc.chktex_command = fromqstr(latexChecktexED->text());
        rc.jindex_command = fromqstr(latexJIndexED->text());
        rc.nomencl_command = fromqstr(latexNomenclED->text());
@@ -990,14 +975,6 @@ void PrefLatex::updateRC(LyXRC const & rc)
                latexIndexOptionsLA->setText(qt_("Co&mmand:"));
        }
 
-       if (rc.fontenc == "default") {
-               latexEncodingCB->setChecked(false);
-               latexEncodingED->setEnabled(false);
-       } else {
-               latexEncodingCB->setChecked(true);
-               latexEncodingED->setEnabled(true);
-               latexEncodingED->setText(toqstr(rc.fontenc));
-       }
        latexChecktexED->setText(toqstr(rc.chktex_command));
        latexJIndexED->setText(toqstr(rc.jindex_command));
        latexNomenclED->setText(toqstr(rc.nomencl_command));
index 8f43a37e534871df58fbe482cff5e7376b1df5c4..4f564992d92816e80551042d599b713e689e4f04 100644 (file)
@@ -214,7 +214,6 @@ public:
        virtual void updateRC(LyXRC const & rc);
 
 private Q_SLOTS:
-       void on_latexEncodingCB_stateChanged(int state);
        void on_latexBibtexCO_activated(int n);
        void on_latexJBibtexCO_activated(int n);
        void on_latexIndexCO_activated(int n);
index 71d4731e11c58e376bc3913c712dea4d42a8e128..c39b4415c45b90c155d026484e1938d88ec1bae8 100644 (file)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>425</width>
-    <height>620</height>
+    <height>582</height>
    </rect>
   </property>
   <property name="windowTitle">
       <number>0</number>
      </property>
      <item row="0" column="0">
-      <widget class="QCheckBox" name="latexEncodingCB">
-       <property name="toolTip">
-        <string>Enable if a specific font encoding (such as T1) should be used (via fontenc)</string>
-       </property>
-       <property name="text">
-        <string>Use LaTe&amp;X font encoding:</string>
-       </property>
-      </widget>
-     </item>
-     <item row="0" column="1">
-      <widget class="QLineEdit" name="latexEncodingED">
-       <property name="toolTip">
-        <string>Specify the font encoding (e.g., T1).</string>
-       </property>
-      </widget>
-     </item>
-     <item row="1" column="0">
       <widget class="QLabel" name="latexDviPaperLA">
        <property name="text">
         <string>&amp;DVI viewer paper size options:</string>
@@ -55,7 +38,7 @@
        </property>
       </widget>
      </item>
-     <item row="1" column="1">
+     <item row="0" column="1">
       <widget class="QLineEdit" name="latexDviPaperED">
        <property name="toolTip">
         <string>Optional paper size flag (-paper) for some DVI viewers</string>
@@ -85,7 +68,7 @@
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
-       <height>1</height>
+       <height>0</height>
       </size>
      </property>
     </spacer>
index 1613eb3d260cfbd618d388bafecd080ccab99dd4..1200aeb7e41c5a357f5237256ab524158d430580 100644 (file)
@@ -630,7 +630,7 @@ InsetQuotes::InsetQuotes(Buffer * buf, char_type c, InsetQuotesParams::QuoteLeve
                fontspec_ = buf->masterBuffer()->params().useNonTeXFonts;
        } else {
                global_style_ = InsetQuotesParams::EnglishQuotes;
-               fontenc_ = lyxrc.fontenc;
+               fontenc_ = "OT1";
                fontspec_ = false;
        }
        if (style.empty())
index b6c0454299fc9567d99fe0b8d1f1e12d13319ae9..4222425887953e4118570aebdb8246aede8c2156 100644 (file)
@@ -1011,11 +1011,6 @@ void Preamble::handle_package(Parser &p, string const & name,
 
        else if (name == "fontenc") {
                h_fontencoding = getStringFromVector(options, ",");
-               /* We could do the following for better round trip support,
-                * but this makes the document less portable, so I skip it:
-               if (h_fontencoding == lyxrc.fontenc)
-                       h_fontencoding = "global";
-                */
                options.clear();
        }
 
index 291a093f43175e0477b78d75c937059ad64c59f4..e415ec9809219d23da5a0c3ce6677b5ccfb5711c 100644 (file)
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 549 // spitz: \textcyr -> \textcyrillic
-#define LYX_FORMAT_TEX2LYX 549
+#define LYX_FORMAT_LYX 550 // spitz: \fontenc auto
+#define LYX_FORMAT_TEX2LYX 550
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER