]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Reduce horizontal spacing for simple inline equations
[lyx.git] / src / Paragraph.cpp
index 8afa475a74295e91e3a973221cea8578f561991e..7b0b3552ddda4fb7eebf201f25917a3026def7ce 100644 (file)
@@ -363,6 +363,12 @@ public:
                pos_type i,
                unsigned int & column);
        ///
+       bool latexSpecialTU(
+               char_type const c,
+               otexstream & os,
+               pos_type i,
+               unsigned int & column);
+       ///
        bool latexSpecialT3(
                char_type const c,
                otexstream & os,
@@ -562,10 +568,10 @@ Paragraph::Private::Private(Private const & p, Paragraph * owner,
 }
 
 
-void Paragraph::addChangesToToc(DocIterator const & cdit,
-       Buffer const & buf, bool output_active) const
+void Paragraph::addChangesToToc(DocIterator const & cdit, Buffer const & buf,
+                                bool output_active, TocBackend & backend) const
 {
-       d->changes_.addToToc(cdit, buf, output_active);
+       d->changes_.addToToc(cdit, buf, output_active, backend);
 }
 
 
@@ -1079,7 +1085,7 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
            // decorations at all
            && inset->lyxCode() != ERT_CODE) {
                if (running_font.language()->lang() == "farsi")
-                       os << "\\beginL{}";
+                       os << "\\beginL" << termcmd;
                else
                        os << "\\L{";
                close = true;
@@ -1135,7 +1141,7 @@ void Paragraph::Private::latexInset(BufferParams const & bparams,
 
        if (close) {
                if (running_font.language()->lang() == "farsi")
-                               os << "\\endL{}";
+                               os << "\\endL" << termcmd;
                        else
                                os << '}';
        }
@@ -1188,25 +1194,30 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
        //       non-standard font encoding. If we are using such a language,
        //       we do not output special T1 chars.
        if (!runparams.inIPA && !running_font.language()->internalFontEncoding()
-           && bparams.font_encoding() == "T1" && latexSpecialT1(c, os, i, column))
+           && !runparams.isFullUnicode() && bparams.main_font_encoding() == "T1"
+           && latexSpecialT1(c, os, i, column))
                return;
+       // NOTE: XeTeX and LuaTeX use EU1/2 (pre 2017) or TU (as of 2017) encoding
+       else if (!runparams.inIPA && !running_font.language()->internalFontEncoding()
+                && runparams.isFullUnicode() && latexSpecialTU(c, os, i, column))
+                    return;
 
        // Otherwise, we use what LaTeX provides us.
        switch (c) {
        case '\\':
-               os << "\\textbackslash{}";
+               os << "\\textbackslash" << termcmd;
                column += 15;
                break;
        case '<':
-               os << "\\textless{}";
+               os << "\\textless" << termcmd;
                column += 10;
                break;
        case '>':
-               os << "\\textgreater{}";
+               os << "\\textgreater" << termcmd;
                column += 13;
                break;
        case '|':
-               os << "\\textbar{}";
+               os << "\\textbar" << termcmd;
                column += 9;
                break;
        case '-':
@@ -1223,7 +1234,7 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                }
                break;
        case '\"':
-               os << "\\char`\\\"{}";
+               os << "\\char34" << termcmd;
                column += 9;
                break;
 
@@ -1236,12 +1247,12 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                break;
 
        case '~':
-               os << "\\textasciitilde{}";
+               os << "\\textasciitilde" << termcmd;
                column += 16;
                break;
 
        case '^':
-               os << "\\textasciicircum{}";
+               os << "\\textasciicircum" << termcmd;
                column += 17;
                break;
 
@@ -1263,6 +1274,21 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
                // written. (Asger)
                break;
 
+       case 0x2013:
+       case 0x2014:
+               if (bparams.use_dash_ligatures && !bparams.useNonTeXFonts) {
+                       if (c == 0x2013) {
+                               // en-dash
+                               os << "--";
+                               column +=2;
+                       } else {
+                               // em-dash
+                               os << "---";
+                               column +=3;
+                       }
+                       break;
+               }
+               // fall through
        default:
                if (c == '\0')
                        return;
@@ -1339,7 +1365,7 @@ bool Paragraph::Private::latexSpecialT1(char_type const c, otexstream & os,
                // but we should avoid ligatures
                if (i + 1 >= int(text_.size()) || text_[i + 1] != c)
                        return true;
-               os << "\\textcompwordmark{}";
+               os << "\\textcompwordmark" << termcmd;
                column += 19;
                return true;
        case '|':
@@ -1347,7 +1373,7 @@ bool Paragraph::Private::latexSpecialT1(char_type const c, otexstream & os,
                return true;
        case '\"':
                // soul.sty breaks with \char`\"
-               os << "\\textquotedbl{}";
+               os << "\\textquotedbl" << termcmd;
                column += 14;
                return true;
        default:
@@ -1356,6 +1382,14 @@ bool Paragraph::Private::latexSpecialT1(char_type const c, otexstream & os,
 }
 
 
+bool Paragraph::Private::latexSpecialTU(char_type const c, otexstream & os,
+       pos_type i, unsigned int & column)
+{
+       // TU encoding is currently on par with T1.
+       return latexSpecialT1(c, os, i, column);
+}
+
+
 bool Paragraph::Private::latexSpecialT3(char_type const c, otexstream & os,
        pos_type /*i*/, unsigned int & column)
 {
@@ -1367,7 +1401,7 @@ bool Paragraph::Private::latexSpecialT3(char_type const c, otexstream & os,
                os.put(c);
                return true;
        case '|':
-               os << "\\textvertline{}";
+               os << "\\textvertline" << termcmd;
                column += 14;
                return true;
        default:
@@ -1389,6 +1423,7 @@ void Paragraph::Private::validate(LaTeXFeatures & features) const
                // output is wrong if this paragraph contains content
                // that needs to switch encoding.
                otexstringstream os;
+               os << layout_->preamble();
                if (is_command) {
                        os << '\\' << from_ascii(layout_->latexname());
                        // we have to provide all the optional arguments here, even though
@@ -1948,7 +1983,7 @@ depth_type Paragraph::getMaxDepthAfter() const
 }
 
 
-char Paragraph::getAlign() const
+LyXAlignment Paragraph::getAlign() const
 {
        if (d->params_.align() == LYX_ALIGN_LAYOUT)
                return d->layout_->align;
@@ -3147,6 +3182,11 @@ bool Paragraph::isHfill(pos_type pos) const
 
 bool Paragraph::isNewline(pos_type pos) const
 {
+       // U+2028 LINE SEPARATOR
+       // U+2029 PARAGRAPH SEPARATOR
+       char_type const c = d->text_[pos];
+       if (c == 0x2028 || c == 0x2029)
+               return true;
        Inset const * inset = getInset(pos);
        return inset && inset->lyxCode() == NEWLINE_CODE;
 }
@@ -3328,11 +3368,11 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options, const Out
 
 
 void Paragraph::forOutliner(docstring & os, size_t const maxlen,
-                                                       bool const shorten) const
+                            bool const shorten, bool const label) const
 {
        size_t tmplen = shorten ? maxlen + 1 : maxlen;
-       if (!d->params_.labelString().empty())
-               os += d->params_.labelString() + ' ';
+       if (label && !labelString().empty())
+               os += labelString() + ' ';
        for (pos_type i = 0; i < size() && os.length() < tmplen; ++i) {
                if (isDeleted(i))
                        continue;
@@ -3529,6 +3569,12 @@ void Paragraph::setBuffer(Buffer & b)
 }
 
 
+void Paragraph::resetBuffer()
+{
+       d->insetlist_.resetBuffer();
+}
+
+
 Inset * Paragraph::releaseInset(pos_type pos)
 {
        Inset * inset = d->insetlist_.release(pos);
@@ -3694,11 +3740,11 @@ void Paragraph::deregisterWords()
        Private::LangWordsMap::const_iterator itl = d->words_.begin();
        Private::LangWordsMap::const_iterator ite = d->words_.end();
        for (; itl != ite; ++itl) {
-               WordList * wl = theWordList(itl->first);
+               WordList & wl = theWordList(itl->first);
                Private::Words::const_iterator it = (itl->second).begin();
                Private::Words::const_iterator et = (itl->second).end();
                for (; it != et; ++it)
-                       wl->remove(*it);
+                       wl.remove(*it);
        }
        d->words_.clear();
 }
@@ -3774,11 +3820,11 @@ void Paragraph::registerWords()
        Private::LangWordsMap::const_iterator itl = d->words_.begin();
        Private::LangWordsMap::const_iterator ite = d->words_.end();
        for (; itl != ite; ++itl) {
-               WordList * wl = theWordList(itl->first);
+               WordList & wl = theWordList(itl->first);
                Private::Words::const_iterator it = (itl->second).begin();
                Private::Words::const_iterator et = (itl->second).end();
                for (; it != et; ++it)
-                       wl->insert(*it);
+                       wl.insert(*it);
        }
 }