X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ftex2lyx%2Ftext.cpp;h=b01925ea3011d7c3865a0bcfdda4ccc7abae5d0b;hb=7a103ba6d74dd49b7affb84508baaba0d7f2bf07;hp=7e19940634c393362c066f9efd216817b88bb0ef;hpb=7eca5d94d1dcdceb8f9a904918642e8370550690;p=lyx.git diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index 7e19940634..b01925ea30 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -118,7 +118,7 @@ char const * const known_coded_ref_commands[] = { "ref", "pageref", "vref", "vpageref", "formatted", "eqref", 0 }; /** - * known polyglossia language names (inluding synomyms) + * known polyglossia language names (including variants) */ const char * const polyglossia_languages[] = { "albanian", "croatian", "hebrew", "norsk", "swedish", "amharic", "czech", "hindi", @@ -130,11 +130,13 @@ const char * const polyglossia_languages[] = { "brazilian", "finnish", "lithuanian", "scottish", "usorbian", "breton", "french", "lsorbian", "serbian", "vietnamese", "bulgarian", "galician", "magyar", "slovak", "welsh", "catalan", "german", "malayalam", "slovenian", "coptic", "greek", -"marathi", "spanish", 0}; +"marathi", "spanish", +"american", "ancient", "australian", "british", "monotonic", "newzealand", +"polytonic", 0}; /** - * the same as known_languages with .lyx names - * please keep this in sync with known_languages line by line! + * the same as polyglossia_languages with .lyx names + * please keep this in sync with polyglossia_languages line by line! */ const char * const coded_polyglossia_languages[] = { "albanian", "croatian", "hebrew", "norsk", "swedish", "amharic", "czech", "hindi", @@ -146,15 +148,9 @@ const char * const coded_polyglossia_languages[] = { "brazilian", "finnish", "lithuanian", "scottish", "uppersorbian", "breton", "french", "lowersorbian", "serbian", "vietnamese", "bulgarian", "galician", "magyar", "slovak", "welsh", "catalan", "ngerman", "malayalam", "slovene", "coptic", "greek", -"marathi", "spanish", 0}; - -string polyglossia2lyx(string const & language) -{ - char const * const * where = is_known(language, polyglossia_languages); - if (where) - return coded_polyglossia_languages[where - polyglossia_languages]; - return language; -} +"marathi", "spanish", +"american", "ancientgreek", "australian", "british", "greek", "newzealand", +"polutonikogreek", 0}; /*! * natbib commands. @@ -1252,9 +1248,19 @@ void parse_environment(Parser & p, ostream & os, bool outer, } else if (is_known(name, polyglossia_languages)) { - parent_context.check_layout(os); + // We must begin a new paragraph if not already done + if (! parent_context.atParagraphStart()) { + parent_context.check_end_layout(os); + parent_context.new_paragraph(os); + } + // save the language in the context so that it is + // handled by parse_text parent_context.font.language = polyglossia2lyx(name); - os << "\n\\lang " << parent_context.font.language << "\n"; + parse_text(p, os, FLAG_END, outer, parent_context); + // Just in case the environment is empty + parent_context.extra_stuff.erase(); + // We must begin a new paragraph to reset the language + parent_context.new_paragraph(os); p.skip_spaces(); } @@ -3457,6 +3463,38 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, context, "\\lang", context.font.language, lang); } + + else if (is_known(t.cs().substr(4, string::npos), polyglossia_languages)) { + // scheme is \textLANGUAGE{text} where LANGUAGE is in polyglossia_languages[] + string lang; + // We have to output the whole command if it has an option + // because LyX doesn't support this yet, see bug #8214, + // only if there is a single option specifying a variant, we can handle it. + if (p.hasOpt()) { + string langopts = p.getOpt(); + // check if the option contains a variant, if yes, extract it + string::size_type pos_var = langopts.find("variant"); + string::size_type i = langopts.find(','); + if (pos_var != string::npos){ + string variant; + if (i == string::npos) { + variant = langopts.substr(pos_var + 8, langopts.length() - pos_var - 9); + lang = polyglossia2lyx(variant); + parse_text_attributes(p, os, FLAG_ITEM, outer, + context, "\\lang", + context.font.language, lang); + } + else + handle_ert(os, t.asInput() + langopts, context); + } else + handle_ert(os, t.asInput() + langopts, context); + } else { + lang = polyglossia2lyx(t.cs().substr(4, string::npos)); + parse_text_attributes(p, os, FLAG_ITEM, outer, + context, "\\lang", + context.font.language, lang); + } + } else if (t.cs() == "inputencoding") { // nothing to write here