-namespace {
-
-docstring const i18npreamble(Language const * lang, Encoding const & enc,
- docstring const & templ, bool const polyglossia)
-{
- if (templ.empty())
- return templ;
-
- string preamble = polyglossia ?
- subst(to_utf8(templ), "$$lang", lang->polyglossia()) :
- subst(to_utf8(templ), "$$lang", lang->babel());
-
-#ifdef TEX2LYX
- // tex2lyx does not have getMessages()
- LASSERT(false, /**/);
-#else
- string const langenc = lang->encoding()->iconvName();
- string const texenc = lang->encoding()->latexName();
- string const bufenc = enc.iconvName();
- // First and second character of plane 15 (Private Use Area)
- char const s1[5] = {0xf3, 0xb0, 0x80, 0x80, 0x00}; // U+F0000
- char const s2[5] = {0xf3, 0xb0, 0x80, 0x81, 0x00}; // U+F0001
- // FIXME UNICODE
- // lyx::regex is not unicode-safe.
- // Should use QRegExp or (boost::u32regex, but that requires ICU)
- static regex const reg("_\\(([^\\)]+)\\)");
- smatch sub;
- while (regex_search(preamble, sub, reg)) {
- string const key = sub.str(1);
- string translated = to_utf8(lang->translateLayout(key));
- if (langenc != bufenc)
- translated = "\\inputencoding{" + texenc + "}"
- + string(s1) + langenc + string(s2) + translated
- + string(s1) + bufenc + string(s2);
- preamble = subst(preamble, sub.str(), translated);
- }
-#endif
- return from_utf8(preamble);
-}
-
-}
-
-
-docstring const Layout::langpreamble(Language const * lang,
- Encoding const & enc, bool const polyglossia) const
-{
- return i18npreamble(lang, enc, langpreamble_, polyglossia);
-}
-
-
-docstring const Layout::babelpreamble(Language const * lang,
- Encoding const & enc, bool const polyglossia) const
-{
- return i18npreamble(lang, enc, babelpreamble_, polyglossia);
-}
-
-