From a47e61e6669239509c3bcce571f330c898396305 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Uwe=20St=C3=B6hr?= Date: Fri, 22 Feb 2013 01:11:30 +0100 Subject: [PATCH] tex2lyx: support further characters - support for Cyrillic characters - support for \textifsymbol and \ascii (fixes bug #8556) - support for \ding - tex2lyx/text.cpp: correct an indentation and use "name2" because "name" is already defined in this clause --- .../test/box-color-size-space-align.lyx.lyx | 67 +++++++++++++++++++ .../test/box-color-size-space-align.tex | 41 ++++++++++++ src/tex2lyx/text.cpp | 64 ++++++++++++++---- 3 files changed, 159 insertions(+), 13 deletions(-) diff --git a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx index 1217a702d0..b578bf7e3d 100644 --- a/src/tex2lyx/test/box-color-size-space-align.lyx.lyx +++ b/src/tex2lyx/test/box-color-size-space-align.lyx.lyx @@ -2107,5 +2107,72 @@ smallskip 2: \end_layout +\begin_layout Section +Characters +\end_layout + +\begin_layout Standard + +\size normal +from package "ascii" and "ifsym": ®↨◻◼ ◙ ◙ +\end_layout + +\begin_layout Standard + +\size normal +from textcomp: №™ +\end_layout + +\begin_layout Standard + +\size normal +from textgreek and textcyr: +\lang greek +>a +\lang english +в +\end_layout + +\begin_layout Standard + +\size normal +from subscript: +\begin_inset script subscript + +\begin_layout Standard + +\size normal +4 +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard + +\size normal +from tfrupee ₹ +\end_layout + +\begin_layout Standard + +\size normal +from marvosym and wasysym: ☑☚ +\end_layout + +\begin_layout Standard + +\size normal +from bbding and pifont: ☆❾ +\end_layout + +\begin_layout Standard + +\size normal +from tipa and tipx: ȶȸ +\end_layout + \end_body \end_document diff --git a/src/tex2lyx/test/box-color-size-space-align.tex b/src/tex2lyx/test/box-color-size-space-align.tex index b3a6d006c7..e0428fdf79 100644 --- a/src/tex2lyx/test/box-color-size-space-align.tex +++ b/src/tex2lyx/test/box-color-size-space-align.tex @@ -25,6 +25,18 @@ \usepackage{fancybox} \PassOptionsToPackage{normalem}{ulem} \usepackage{ulem} +\usepackage{ifsym} +\usepackage{ascii} +\usepackage{textgreek} +\usepackage{textcyr} +\usepackage{subscript} +\usepackage{tfrupee} +\usepackage{bbding} +\usepackage{marvosym} +\usepackage{wasysym} +\usepackage{pifont} +\usepackage{tipa} +\usepackage{tipx} \setlength{\parskip}{3mm} \setlength{\parindent}{0sp} @@ -427,4 +439,33 @@ smallskip 1:\smallskip smallskip 2:\vspace{\smallskipamount} +\section{Characters} + +from package "ascii" and "ifsym": +\textregistered{\ascii\ETB}\textifsymbol[ifgeo]{48}\textifsymbol[ifgeo]{96} +{\ascii\LF} +\ascii\LF{} + +from textcomp: +\textnumero\texttrademark + +from textgreek and textcyr: +\textgreek{>a}\textcyr{\char226} + +from subscript: +\textsubscript{4} + +from tfrupee +\rupee + +from marvosym and wasysym: +\CheckedBox \HandCuffLeft + +from bbding and pifont: +\FiveStarOpen \ding{190} + +from tipa and tipx: +\textctt \textdblig + + \end{document} diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp index 46cc347db7..b8a11d41e9 100644 --- a/src/tex2lyx/text.cpp +++ b/src/tex2lyx/text.cpp @@ -2413,15 +2413,15 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, Token const next = p.next_token(); Token const end = p.next_next_token(); if (next.cat() == catEnd) { - // {} - Token const prev = p.prev_token(); - p.get_token(); - if (p.next_token().character() == '`' || - (prev.character() == '-' && - p.next_token().character() == '-')) - ; // ignore it in {}`` or -{}- - else - output_ert_inset(os, "{}", context); + // {} + Token const prev = p.prev_token(); + p.get_token(); + if (p.next_token().character() == '`' || + (prev.character() == '-' && + p.next_token().character() == '-')) + ; // ignore it in {}`` or -{}- + else + output_ert_inset(os, "{}", context); } else if (next.cat() == catEscape && is_known(next.cs(), known_quotes) && end.cat() == catEnd) { @@ -2431,6 +2431,27 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, // braces here for better readability. parse_text_snippet(p, os, FLAG_BRACE_LAST, outer, context); + } else if (p.next_token().asInput() == "\\ascii") { + // handle the \ascii characters + // (the case without braces is handled later) + // the code is "{\ascii\xxx}" + p.get_token(); // eat \ascii + string name2 = p.get_token().asInput(); + p.get_token(); // eat the final '}' + string const name = "{\\ascii" + name2 + "}"; + bool termination; + docstring rem; + set req; + // get the character from unicodesymbols + docstring s = encodings.fromLaTeXCommand(from_utf8(name), + Encodings::TEXT_CMD, termination, rem, &req); + if (!s.empty()) { + context.check_layout(os); + os << to_utf8(s); + } else + // we did not find a non-ert version + output_ert_inset(os, name, context); + continue; } else { context.check_layout(os); // special handling of font attribute changes @@ -4612,6 +4633,23 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, docstring rem; set req; string name = t.asInput(); + // handle the dingbats and Cyrillic + if (name == "\\ding" || name == "\\textcyr") + name = name + '{' + p.getArg('{', '}') + '}'; + // handle the ifsym characters + if (name == "\\textifsymbol") { + string const optif = p.getFullOpt(); + string const argif = p.getArg('{', '}'); + name = name + optif + '{' + argif + '}'; + } + // handle the \ascii characters + // the case of \ascii within braces, as LyX outputs it, is already + // handled for t.cat() == catBegin + if (name == "\\ascii") { + // the code is "\asci\xxx" + name = "{" + name + p.get_token().asInput() + "}"; + skip_braces(p); + } // handle some TIPA special characters if (name == "\\textglobfall") { name = "End"; @@ -4704,14 +4742,14 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer, output_ert_inset(os, s + ' ', context); */ else { - string name = t.asInput(); + string name2 = t.asInput(); if (p.next_token().asInput() == "*") { // Starred commands like \vspace*{} p.get_token(); // Eat '*' - name += '*'; + name2 += '*'; } - if (!parse_command(name, p, os, outer, context)) - output_ert_inset(os, name, context); + if (!parse_command(name2, p, os, outer, context)) + output_ert_inset(os, name2, context); } } -- 2.39.2