On Mon, Oct 22, 2007 at 08:48:30AM +0200, Jürgen Spitzmüller wrote: > Enrico Forestieri wrote: > > > http://www.lyx.org/trac/changeset/20931 - Add support for greek and > > > cyrillic chars such that it is not necessary to mark them in the proper > > > language for typesetting. > > > http://www.lyx.org/trac/changeset/20932 - Correct ordering > > > http://www.lyx.org/trac/changeset/20945 - Some more Greek and Cyrillic > > > symbols. > > > > [...] > > > > > http://www.lyx.org/trac/changeset/20972 - Better safe than sorry... > > > > I'll put together a patch for these ones. > > Good!
Here it is. May I apply it? -- Enrico
Index: src/Paragraph.cpp =================================================================== --- src/Paragraph.cpp (revision 21120) +++ src/Paragraph.cpp (working copy) @@ -67,8 +67,10 @@ using std::ostream; namespace lyx { using support::contains; +using support::prefixIs; using support::suffixIs; using support::rsplit; +using support::rtrim; ///////////////////////////////////////////////////////////////////// @@ -188,6 +190,11 @@ public: unsigned int & column, Font const & font, Layout const & style); + /// Output consecutive known unicode chars, belonging to the same + /// language as specified by \p preamble, to \p os starting from \p c. + /// \return the number of characters written. + int knownLangChars(odocstream & os, value_type c, string & preamble, + Change &, Encoding const &, pos_type &); /// void simpleTeXSpecialChars(Buffer const &, BufferParams const &, odocstream &, @@ -591,7 +598,7 @@ bool Paragraph::Pimpl::simpleTeXBlanks(E if (style.pass_thru) return false; - if (i < size() - 1) { + if (i + 1 < size()) { char_type next = getChar(i + 1); if (Encodings::isCombiningChar(next)) { // This space has an accent, so we must always output it. @@ -605,7 +612,7 @@ bool Paragraph::Pimpl::simpleTeXBlanks(E && column > lyxrc.plaintext_linelen && i && getChar(i - 1) != ' ' - && (i < size() - 1) + && (i + 1 < size()) // same in FreeSpacing mode && !owner_->isFreeSpacing() // In typewriter mode, we want to avoid @@ -628,6 +635,66 @@ bool Paragraph::Pimpl::simpleTeXBlanks(E } +int Paragraph::Pimpl::knownLangChars(odocstream & os, + value_type c, + string & preamble, + Change & runningChange, + Encoding const & encoding, + pos_type & i) +{ + // When the character is marked by the proper language, we simply + // get its code point in some encoding, otherwise we get the + // translation specified in the unicodesymbols file, which is + // something like "\textLANG{<spec>}". So, we have to retain + // "\textLANG{<spec>" for the first char but only "<spec>" for + // all subsequent chars. + docstring const latex1 = rtrim(encoding.latexChar(c), "}"); + int length = latex1.length(); + os << latex1; + while (i + 1 < size()) { + char_type next = getChar(i + 1); + // Stop here if next character belongs to another + // language or there is a change tracking status. + if (!Encodings::isKnownLangChar(next, preamble) || + runningChange != lookupChange(i + 1)) + break; + Font prev_font; + bool found = false; + FontList::const_iterator cit = fontlist.begin(); + FontList::const_iterator end = fontlist.end(); + for (; cit != end; ++cit) { + if (cit->pos() >= i && !found) { + prev_font = cit->font(); + found = true; + } + if (cit->pos() >= i + 1) + break; + } + // Stop here if there is a font attribute change. + if (found && cit != end && prev_font != cit->font()) + break; + docstring const latex = rtrim(encoding.latexChar(next), "}"); + docstring::size_type const j = + latex.find_first_of(from_ascii("{")); + if (j == docstring::npos) { + os << latex; + length += latex.length(); + } else { + os << latex.substr(j + 1); + length += latex.substr(j + 1).length(); + } + ++i; + } + // When the proper language is set, we are simply passed a code + // point, so we should not try to close the \textLANG command. + if (prefixIs(latex1, from_ascii("\\" + preamble))) { + os << '}'; + ++length; + } + return length; +} + + bool Paragraph::Pimpl::isTextAt(string const & str, pos_type pos) const { pos_type const len = str.length(); @@ -947,7 +1014,7 @@ void Paragraph::Pimpl::simpleTeXSpecialC if (pnr == phrases_nr && c != '\0') { Encoding const & encoding = *(runparams.encoding); - if (i < size() - 1) { + if (i + 1 < size()) { char_type next = getChar(i + 1); if (Encodings::isCombiningChar(next)) { column += latexSurrogatePair(os, c, next, encoding) - 1; @@ -955,6 +1022,14 @@ void Paragraph::Pimpl::simpleTeXSpecialC break; } } + string preamble; + if (Encodings::isKnownLangChar(c, preamble)) { + column += + knownLangChars(os, c, preamble, + running_change, + encoding, i) - 1; + break; + } docstring const latex = encoding.latexChar(c); if (latex.length() > 1 && latex[latex.length() - 1] != '}') { Index: src/LaTeXFeatures.cpp =================================================================== --- src/LaTeXFeatures.cpp (revision 21120) +++ src/LaTeXFeatures.cpp (working copy) @@ -187,6 +187,20 @@ static string const changetracking_none_ "\\newcommand{\\lyxadded}[3]{#3}\n" "\\newcommand{\\lyxdeleted}[3]{}\n"; +static string const textgreek_def = + "\\DeclareRobustCommand{\\greektext}{%\n" + " \\fontencoding{LGR}\\selectfont\n" + " \\def\\encodingdefault{LGR}}\n" + "\\DeclareRobustCommand{\\textgreek}[1]{\\leavevmode{\\greektext #1}}\n" + "\\DeclareFontEncoding{LGR}{}{}\n"; + +static string const textcyr_def = + "\\DeclareRobustCommand{\\cyrtext}{%\n" + " \\fontencoding{T2A}\\selectfont\n" + " \\def\\encodingdefault{T2A}}\n" + "\\DeclareRobustCommand{\\textcyr}[1]{\\leavevmode{\\cyrtext #1}}\n" + "\\AtBeginDocument{\\DeclareFontEncoding{T2A}{}{}}\n"; + ///////////////////////////////////////////////////////////////////// // @@ -615,6 +629,12 @@ string const LaTeXFeatures::getMacros() if (mustProvide("lyxarrow")) macros << lyxarrow_def << '\n'; + if (mustProvide("textgreek")) + macros << textgreek_def << '\n'; + + if (mustProvide("textcyr")) + macros << textcyr_def << '\n'; + // quotes. if (mustProvide("quotesinglbase")) macros << quotesinglbase_def << '\n'; Index: src/Encoding.cpp =================================================================== --- src/Encoding.cpp (revision 21120) +++ src/Encoding.cpp (working copy) @@ -401,6 +401,25 @@ bool Encodings::isCombiningChar(char_typ } +bool Encodings::isKnownLangChar(char_type c, string & preamble) +{ + CharInfoMap::const_iterator const it = unicodesymbols.find(c); + + if (it == unicodesymbols.end()) + return false; + + if (it->second.preamble != "textgreek" && + it->second.preamble != "textcyr") + return false; + + if (preamble.empty()) { + preamble = it->second.preamble; + return true; + } + return it->second.preamble == preamble; +} + + Encoding const * Encodings::getFromLyXName(string const & name) const { EncodingList::const_iterator it = encodinglist.find(name); Index: src/Encoding.h =================================================================== --- src/Encoding.h (revision 21120) +++ src/Encoding.h (working copy) @@ -143,6 +143,15 @@ public: /// Is this a combining char? static bool isCombiningChar(char_type c); /** + * Is this a known char from some language? + * If \p preamble is empty and code point \p c is known to belong + * to a supported language, true is returned and \p preamble is set + * to the corresponding entry in the unicodesymbols file. + * If \p preamble is not empty, a check is made whether code point + * \p c is a known character matching the preamble entry. + */ + static bool isKnownLangChar(char_type c, std::string & preamble); + /** * Add the preamble snippet needed for the output of \p c to * \p features. * This does not depend on the used encoding, since the inputenc Index: lib/unicodesymbols =================================================================== --- lib/unicodesymbols (revision 21120) +++ lib/unicodesymbols (working copy) @@ -684,6 +684,177 @@ #0x036d "" "" "combining" # COMBINING LATIN SMALL LETTER T #0x036e "" "" "combining" # COMBINING LATIN SMALL LETTER V #0x036f "" "" "combining" # COMBINING LATIN SMALL LETTER X +0x0374 "\\textgreek{\char254}" "textgreek" "" # GREEK NUMERAL SIGN +0x0375 "\\textgreek{\char255}" "textgreek" "" # GREEK LOWER NUMERAL SIGN +0x037e "\\textgreek{\char63}" "textgreek" "" # GREEK QUESTION MARK +0x0384 "\\textgreek{\char39}" "textgreek" "" # GREEK TONOS +0x0385 "\\textgreek{\char35}" "textgreek" "" # GREEK DIALYTIKA TONOS +0x0386 "\\textgreek{\char39A}" "textgreek" "" # GREEK CAPITAL LETTER ALPHA WITH TONOS +0x0387 "\\textgreek{\char38}" "textgreek" "" # GREEK ANO TELEIA +0x0388 "\\textgreek{\char39E}" "textgreek" "" # GREEK CAPITAL LETTER EPSILON WITH TONOS +0x0389 "\\textgreek{\char39H}" "textgreek" "" # GREEK CAPITAL LETTER ETA WITH TONOS +0x038a "\\textgreek{\char39I}" "textgreek" "" # GREEK CAPITAL LETTER IOTA WITH TONOS +0x038c "\\textgreek{\char39O}" "textgreek" "" # GREEK CAPITAL LETTER OMICRON WITH TONOS +0x038e "\\textgreek{\char39U}" "textgreek" "" # GREEK CAPITAL LETTER UPSILON WITH TONOS +0x038f "\\textgreek{\char39W}" "textgreek" "" # GREEK CAPITAL LETTER OMEGA WITH TONOS +0x0390 "\\textgreek{\char242}" "textgreek" "" # GREEK SMALL LETTER IOTA WITH DIALYTKA +0x0391 "\\textgreek{A}" "textgreek" "" # GREEK CAPITAL LETTER ALPHA +0x0392 "\\textgreek{B}" "textgreek" "" # GREEK CAPITAL LETTER BETA +0x0393 "\\textgreek{G}" "textgreek" "" # GREEK CAPITAL LETTER GAMMA +0x0394 "\\textgreek{D}" "textgreek" "" # GREEK CAPITAL LETTER DELTA +0x0395 "\\textgreek{E}" "textgreek" "" # GREEK CAPITAL LETTER EPSILON +0x0396 "\\textgreek{Z}" "textgreek" "" # GREEK CAPITAL LETTER ZETA +0x0397 "\\textgreek{H}" "textgreek" "" # GREEK CAPITAL LETTER ETA +0x0398 "\\textgreek{J}" "textgreek" "" # GREEK CAPITAL LETTER THETA +0x0399 "\\textgreek{I}" "textgreek" "" # GREEK CAPITAL LETTER IOTA +0x039a "\\textgreek{K}" "textgreek" "" # GREEK CAPITAL LETTER KAPPA +0x039b "\\textgreek{L}" "textgreek" "" # GREEK CAPITAL LETTER LAMDA +0x039c "\\textgreek{M}" "textgreek" "" # GREEK CAPITAL LETTER MU +0x039d "\\textgreek{N}" "textgreek" "" # GREEK CAPITAL LETTER NU +0x039e "\\textgreek{X}" "textgreek" "" # GREEK CAPITAL LETTER XI +0x039f "\\textgreek{O}" "textgreek" "" # GREEK CAPITAL LETTER OMICRON +0x03a0 "\\textgreek{P}" "textgreek" "" # GREEK CAPITAL LETTER PI +0x03a1 "\\textgreek{R}" "textgreek" "" # GREEK CAPITAL LETTER RHO +0x03a3 "\\textgreek{S}" "textgreek" "" # GREEK CAPITAL LETTER SIGMA +0x03a4 "\\textgreek{T}" "textgreek" "" # GREEK CAPITAL LETTER TAU +0x03a5 "\\textgreek{U}" "textgreek" "" # GREEK CAPITAL LETTER UPSILON +0x03a6 "\\textgreek{F}" "textgreek" "" # GREEK CAPITAL LETTER PHI +0x03a7 "\\textgreek{Q}" "textgreek" "" # GREEK CAPITAL LETTER CHI +0x03a8 "\\textgreek{Y}" "textgreek" "" # GREEK CAPITAL LETTER PSI +0x03a9 "\\textgreek{W}" "textgreek" "" # GREEK CAPITAL LETTER OMEGA +0x03aa "\\textgreek{\\char219}" "textgreek" "" # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +0x03ab "\\textgreek{\\char223}" "textgreek" "" # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +0x03ac "\\textgreek{\\char136}" "textgreek" "" # GREEK SMALL LETTER ALPHA WITH TONOS +0x03ad "\\textgreek{\\char232}" "textgreek" "" # GREEK SMALL LETTER EPSILON WITH TONOS +0x03ae "\\textgreek{\\char160}" "textgreek" "" # GREEK SMALL LETTER ETA WITH TONOS +0x03af "\\textgreek{\\char208}" "textgreek" "" # GREEK SMALL LETTER IOTA WITH TONOS +0x03b0 "\\textgreek{\\char246}" "textgreek" "" # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +0x03b1 "\\textgreek{a}" "textgreek" "" # GREEK SMALL LETTER ALPHA +0x03b2 "\\textgreek{b}" "textgreek" "" # GREEK SMALL LETTER BETA +0x03b3 "\\textgreek{g}" "textgreek" "" # GREEK SMALL LETTER GAMMA +0x03b4 "\\textgreek{d}" "textgreek" "" # GREEK SMALL LETTER DELTA +0x03b5 "\\textgreek{e}" "textgreek" "" # GREEK SMALL LETTER EPSILON +0x03b6 "\\textgreek{z}" "textgreek" "" # GREEK SMALL LETTER ZETA +0x03b7 "\\textgreek{h}" "textgreek" "" # GREEK SMALL LETTER ETA +0x03b8 "\\textgreek{j}" "textgreek" "" # GREEK SMALL LETTER THETA +0x03b9 "\\textgreek{i}" "textgreek" "" # GREEK SMALL LETTER IOTA +0x03ba "\\textgreek{k}" "textgreek" "" # GREEK SMALL LETTER KAPPA +0x03bb "\\textgreek{l}" "textgreek" "" # GREEK SMALL LETTER LAMDA +0x03bc "\\textgreek{m}" "textgreek" "" # GREEK SMALL LETTER MU +0x03bd "\\textgreek{n}" "textgreek" "" # GREEK SMALL LETTER NU +0x03be "\\textgreek{x}" "textgreek" "" # GREEK SMALL LETTER XI +0x03bf "\\textgreek{o}" "textgreek" "" # GREEK SMALL LETTER OMICRON +0x03c0 "\\textgreek{p}" "textgreek" "" # GREEK SMALL LETTER PI +0x03c1 "\\textgreek{r}" "textgreek" "" # GREEK SMALL LETTER RHO +0x03c2 "\\textgreek{c}" "textgreek" "" # GREEK SMALL LETTER FINAL SIGMA +0x03c3 "\\textgreek{s}" "textgreek" "" # GREEK SMALL LETTER SIGMA +0x03c4 "\\textgreek{t}" "textgreek" "" # GREEK SMALL LETTER TAU +0x03c5 "\\textgreek{u}" "textgreek" "" # GREEK SMALL LETTER UPSILON +0x03c6 "\\textgreek{f}" "textgreek" "" # GREEK SMALL LETTER PHI +0x03c7 "\\textgreek{q}" "textgreek" "" # GREEK SMALL LETTER CHI +0x03c8 "\\textgreek{y}" "textgreek" "" # GREEK SMALL LETTER PSI +0x03c9 "\\textgreek{w}" "textgreek" "" # GREEK SMALL LETTER OMEGA +0x03ca "\\textgreek{\\char240}" "textgreek" "" # GREEK SMALL LETTER IOTA WITH DIALYTIKA +0x03cb "\\textgreek{\\char244}" "textgreek" "" # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +0x03cc "\\textgreek{\\char236}" "textgreek" "" # GREEK SMALL LETTER OMICRON WITH TONOS +0x03cd "\\textgreek{\\char212}" "textgreek" "" # GREEK SMALL LETTER UPSILON WITH TONOS +0x03ce "\\textgreek{\\char184}" "textgreek" "" # GREEK SMALL LETTER OMEGA WITH TONOS +0x0400 "\\textcyr{\\accent0\\char197}" "textcyr" "" # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0x0401 "\\textcyr{\\char156}" "textcyr" "" # CYRILLIC CAPITAL LETTER IO +0x0402 "\\textcyr{\\char130}" "textcyr" "" # CYRILLIC CAPITAL LETTER DJE +0x0403 "\\textcyr{\\accent1\\char195}" "textcyr" "" # CYRILLIC CAPITAL LETTER GJE +0x0404 "\\textcyr{\\char153}" "textcyr" "" # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0x0405 "\\textcyr{\\char143}" "textcyr" "" # CYRILLIC CAPITAL LETTER DZE +0x0406 "\\textcyr{I}" "textcyr" "" # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0x0407 "\\textcyr{\\char136}" "textcyr" "" # CYRILLIC CAPITAL LETTER YI +0x0408 "\\textcyr{J}" "textcyr" "" # CYRILLIC CAPITAL LETTER JE +0x0409 "\\textcyr{\\char135}" "textcyr" "" # CYRILLIC CAPITAL LETTER LJE +0x040a "\\textcyr{\\char155}" "textcyr" "" # CYRILLIC CAPITAL LETTER NJE +0x040b "\\textcyr{\\char131}" "textcyr" "" # CYRILLIC CAPITAL LETTER TSHE +0x040c "\\textcyr{\\accent1\\char202}" "textcyr" "" # CYRILLIC CAPITAL LETTER KJE +0x040d "\\textcyr{\\accent0\\char200}" "textcyr" "" # CYRILLIC CAPITAL LETTER I WITH GRAVE +0x040e "\\textcyr{\\char146}" "textcyr" "" # CYRILLIC CAPITAL LETTER SHORT U +0x040f "\\textcyr{\\char150}" "textcyr" "" # CYRILLIC CAPITAL LETTER DZHE +0x0410 "\\textcyr{\\char192}" "textcyr" "" # CYRILLIC CAPITAL LETTER A +0x0411 "\\textcyr{\\char193}" "textcyr" "" # CYRILLIC CAPITAL LETTER BE +0x0412 "\\textcyr{\\char194}" "textcyr" "" # CYRILLIC CAPITAL LETTER VE +0x0413 "\\textcyr{\\char195}" "textcyr" "" # CYRILLIC CAPITAL LETTER GHE +0x0414 "\\textcyr{\\char196}" "textcyr" "" # CYRILLIC CAPITAL LETTER DE +0x0415 "\\textcyr{\\char197}" "textcyr" "" # CYRILLIC CAPITAL LETTER IE +0x0416 "\\textcyr{\\char198}" "textcyr" "" # CYRILLIC CAPITAL LETTER ZHE +0x0417 "\\textcyr{\\char199}" "textcyr" "" # CYRILLIC CAPITAL LETTER ZE +0x0418 "\\textcyr{\\char200}" "textcyr" "" # CYRILLIC CAPITAL LETTER I +0x0419 "\\textcyr{\\char201}" "textcyr" "" # CYRILLIC CAPITAL LETTER SHORT I +0x041a "\\textcyr{\\char202}" "textcyr" "" # CYRILLIC CAPITAL LETTER KA +0x041b "\\textcyr{\\char203}" "textcyr" "" # CYRILLIC CAPITAL LETTER EL +0x041c "\\textcyr{\\char204}" "textcyr" "" # CYRILLIC CAPITAL LETTER EM +0x041d "\\textcyr{\\char205}" "textcyr" "" # CYRILLIC CAPITAL LETTER EN +0x041e "\\textcyr{\\char206}" "textcyr" "" # CYRILLIC CAPITAL LETTER O +0x041f "\\textcyr{\\char207}" "textcyr" "" # CYRILLIC CAPITAL LETTER PE +0x0420 "\\textcyr{\\char208}" "textcyr" "" # CYRILLIC CAPITAL LETTER ER +0x0421 "\\textcyr{\\char209}" "textcyr" "" # CYRILLIC CAPITAL LETTER ES +0x0422 "\\textcyr{\\char210}" "textcyr" "" # CYRILLIC CAPITAL LETTER TE +0x0423 "\\textcyr{\\char211}" "textcyr" "" # CYRILLIC CAPITAL LETTER U +0x0424 "\\textcyr{\\char212}" "textcyr" "" # CYRILLIC CAPITAL LETTER EF +0x0425 "\\textcyr{\\char213}" "textcyr" "" # CYRILLIC CAPITAL LETTER HA +0x0426 "\\textcyr{\\char214}" "textcyr" "" # CYRILLIC CAPITAL LETTER TSE +0x0427 "\\textcyr{\\char215}" "textcyr" "" # CYRILLIC CAPITAL LETTER CHE +0x0428 "\\textcyr{\\char216}" "textcyr" "" # CYRILLIC CAPITAL LETTER SHA +0x0429 "\\textcyr{\\char217}" "textcyr" "" # CYRILLIC CAPITAL LETTER SHCHA +0x042a "\\textcyr{\\char218}" "textcyr" "" # CYRILLIC CAPITAL LETTER HARD SIGN +0x042b "\\textcyr{\\char219}" "textcyr" "" # CYRILLIC CAPITAL LETTER YERU +0x042c "\\textcyr{\\char220}" "textcyr" "" # CYRILLIC CAPITAL LETTER SOFT SIGN +0x042d "\\textcyr{\\char221}" "textcyr" "" # CYRILLIC CAPITAL LETTER E +0x042e "\\textcyr{\\char222}" "textcyr" "" # CYRILLIC CAPITAL LETTER YU +0x042f "\\textcyr{\\char223}" "textcyr" "" # CYRILLIC CAPITAL LETTER YA +0x0430 "\\textcyr{\\char224}" "textcyr" "" # CYRILLIC SMALL LETTER A +0x0431 "\\textcyr{\\char225}" "textcyr" "" # CYRILLIC SMALL LETTER BE +0x0432 "\\textcyr{\\char226}" "textcyr" "" # CYRILLIC SMALL LETTER VE +0x0433 "\\textcyr{\\char227}" "textcyr" "" # CYRILLIC SMALL LETTER GHE +0x0434 "\\textcyr{\\char228}" "textcyr" "" # CYRILLIC SMALL LETTER DE +0x0435 "\\textcyr{\\char229}" "textcyr" "" # CYRILLIC SMALL LETTER IE +0x0436 "\\textcyr{\\char230}" "textcyr" "" # CYRILLIC SMALL LETTER ZHE +0x0437 "\\textcyr{\\char231}" "textcyr" "" # CYRILLIC SMALL LETTER ZE +0x0438 "\\textcyr{\\char232}" "textcyr" "" # CYRILLIC SMALL LETTER I +0x0439 "\\textcyr{\\char233}" "textcyr" "" # CYRILLIC SMALL LETTER SHORT I +0x043a "\\textcyr{\\char234}" "textcyr" "" # CYRILLIC SMALL LETTER KA +0x043b "\\textcyr{\\char235}" "textcyr" "" # CYRILLIC SMALL LETTER EL +0x043c "\\textcyr{\\char236}" "textcyr" "" # CYRILLIC SMALL LETTER EM +0x043d "\\textcyr{\\char237}" "textcyr" "" # CYRILLIC SMALL LETTER EN +0x043e "\\textcyr{\\char238}" "textcyr" "" # CYRILLIC SMALL LETTER O +0x043f "\\textcyr{\\char239}" "textcyr" "" # CYRILLIC SMALL LETTER PE +0x0440 "\\textcyr{\\char240}" "textcyr" "" # CYRILLIC SMALL LETTER ER +0x0441 "\\textcyr{\\char241}" "textcyr" "" # CYRILLIC SMALL LETTER ES +0x0442 "\\textcyr{\\char242}" "textcyr" "" # CYRILLIC SMALL LETTER TE +0x0443 "\\textcyr{\\char243}" "textcyr" "" # CYRILLIC SMALL LETTER U +0x0444 "\\textcyr{\\char244}" "textcyr" "" # CYRILLIC SMALL LETTER EF +0x0445 "\\textcyr{\\char245}" "textcyr" "" # CYRILLIC SMALL LETTER HA +0x0446 "\\textcyr{\\char246}" "textcyr" "" # CYRILLIC SMALL LETTER TSE +0x0447 "\\textcyr{\\char247}" "textcyr" "" # CYRILLIC SMALL LETTER CHE +0x0448 "\\textcyr{\\char248}" "textcyr" "" # CYRILLIC SMALL LETTER SHA +0x0449 "\\textcyr{\\char249}" "textcyr" "" # CYRILLIC SMALL LETTER SHCHA +0x044a "\\textcyr{\\char250}" "textcyr" "" # CYRILLIC SMALL LETTER HARD SIGN +0x044b "\\textcyr{\\char251}" "textcyr" "" # CYRILLIC SMALL LETTER YERU +0x044c "\\textcyr{\\char252}" "textcyr" "" # CYRILLIC SMALL LETTER SOFT SIGN +0x044d "\\textcyr{\\char253}" "textcyr" "" # CYRILLIC SMALL LETTER E +0x044e "\\textcyr{\\char254}" "textcyr" "" # CYRILLIC SMALL LETTER YU +0x044f "\\textcyr{\\char255}" "textcyr" "" # CYRILLIC SMALL LETTER YA +0x0450 "\\textcyr{\\accent0\\char229}" "textcyr" "" # CYRILLIC SMALL LETTER IE WITH GRAVE +0x0451 "\\textcyr{\\char188}" "textcyr" "" # CYRILLIC SMALL LETTER IO +0x0452 "\\textcyr{\\char162}" "textcyr" "" # CYRILLIC SMALL LETTER DJE +0x0453 "\\textcyr{\\accent1\\char227}" "textcyr" "" # CYRILLIC SMALL LETTER GJE +0x0454 "\\textcyr{\\char185}" "textcyr" "" # CYRILLIC SMALL LETTER UKRAINIAN IE +0x0455 "\\textcyr{\\char175}" "textcyr" "" # CYRILLIC SMALL LETTER DZE +0x0456 "\\textcyr{i}" "textcyr" "" # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0x0457 "\\textcyr{\\char168}" "textcyr" "" # CYRILLIC SMALL LETTER YI +0x0458 "\\textcyr{j}" "textcyr" "" # CYRILLIC SMALL LETTER JE +0x0459 "\\textcyr{\\char167}" "textcyr" "" # CYRILLIC SMALL LETTER LJE +0x045a "\\textcyr{\\char187}" "textcyr" "" # CYRILLIC SMALL LETTER NJE +0x045b "\\textcyr{\\char163}" "textcyr" "" # CYRILLIC SMALL LETTER TSHE +0x045c "\\textcyr{\\accent1\\char234}" "textcyr" "" # CYRILLIC SMALL LETTER KJE +0x045d "\\textcyr{\\accent0\\char232}" "textcyr" "" # CYRILLIC SMALL LETTER I WITH GRAVE +0x045e "\\textcyr{\\char178}" "textcyr" "" # CYRILLIC SMALL LETTER SHORT U +0x045f "\\textcyr{\\char182}" "textcyr" "" # CYRILLIC SMALL LETTER DZHE 0x0e3f "\\textbaht" "textcomp" "" # THAI CURRENCY SYMBOL BAHT 0x1e00 "\\textsubring{A}" "tipa" "" # LATIN CAPITAL LETTER A WITH RING BELOW 0x1e01 "\\textsubring{a}" "tipa" "" # LATIN SMALL LETTER A WITH RING BELOW