]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
fix "make check" with gcc 4.3
[lyx.git] / src / Paragraph.cpp
index 1bfec20211c7b94bbaf6f4cfa668c353fb96c8cb..3f0a06d62507b801d7fc9eca1a0d1af007a971bf 100644 (file)
@@ -4,13 +4,13 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Asger Alstrup
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
  * \author John Levon
- * \author André Pönitz
+ * \author André Pönitz
  * \author Dekel Tsur
- * \author Jürgen Vigna
+ * \author Jürgen Vigna
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -817,10 +817,10 @@ void Paragraph::Private::latexInset(
        }
 
        if (close) {
-       if (running_font.language()->lang() == "farsi")
-                       os << "\\endL{}";
-               else
-                       os << '}';
+               if (running_font.language()->lang() == "farsi")
+                               os << "\\endL{}";
+                       else
+                               os << '}';
        }
 
        if (tmp) {
@@ -864,9 +864,15 @@ void Paragraph::Private::latexSpecialChar(
                return;
        }
 
-       if (lyxrc.fontenc == "T1" && latexSpecialT1(c, os, i, column))
+       // If T1 font encoding is used, use the special
+       // characters it provides.
+       // NOTE: some languages reset the font encoding
+       // internally
+       if (!running_font.language()->internalFontEncoding()
+           && lyxrc.fontenc == "T1" && latexSpecialT1(c, os, i, column))
                return;
 
+       // \tt font needs special treatment
        if (running_font.fontInfo().family() == TYPEWRITER_FAMILY
                && latexSpecialTypewriter(c, os, i, column))
                return;
@@ -915,7 +921,9 @@ void Paragraph::Private::latexSpecialChar(
                column += 17;
                break;
 
-       case '*': case '[':
+       case '*':
+       case '[':
+       case ']':
                // avoid being mistaken for optional arguments
                os << '{';
                os.put(c);
@@ -1275,7 +1283,7 @@ void Paragraph::appendString(docstring const & s, Font const & font,
        d->text_.append(s);
 
        // FIXME: Optimize this!
-       for (pos_type i = oldsize; i != newsize; ++i) {
+       for (size_t i = oldsize; i != newsize; ++i) {
                // track change
                d->changes_.insert(change, i);
        }
@@ -1905,19 +1913,21 @@ int Paragraph::Private::endTeXParParams(BufferParams const & bparams,
 
 // This one spits out the text of the paragraph
 bool Paragraph::latex(BufferParams const & bparams,
-                               Font const & outerfont,
-                               odocstream & os, TexRow & texrow,
-                               OutputParams const & runparams) const
+       Font const & outerfont,
+       odocstream & os, TexRow & texrow,
+       OutputParams const & runparams,
+       int start_pos, int end_pos) const
 {
        LYXERR(Debug::LATEX, "Paragraph::latex...     " << this);
 
        bool return_value = false;
 
-       bool asdefault = forcePlainLayout();
+       bool const allowcust = allowParagraphCustomization();
 
-       Layout const & style = asdefault ?
-               bparams.documentClass().plainLayout() :
-               *d->layout_;
+       // FIXME This check should not be needed. Perhaps issue an
+       // error if it triggers.
+       Layout const & style = forcePlainLayout() ?
+               bparams.documentClass().plainLayout() : *d->layout_;
 
        // Current base font for all inherited font changes, without any
        // change caused by an individual character, except for the language:
@@ -1956,7 +1966,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                        os << '{';
                        ++column;
                }
-               if (!asdefault)
+               if (allowcust)
                        column += d->startTeXParParams(bparams, os, texrow,
                                                    runparams);
        }
@@ -1986,7 +1996,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                                ++column;
                        }
 
-                       if (!asdefault)
+                       if (allowcust)
                                column += d->startTeXParParams(bparams, os,
                                                            texrow,
                                                            runparams);
@@ -2078,7 +2088,8 @@ bool Paragraph::latex(BufferParams const & bparams,
                                os << fontchange;
                }
 
-               if (c == ' ') {
+               // FIXME: think about end_pos implementation...
+               if (c == ' ' && i >= start_pos && (end_pos == -1 || i < end_pos)) {
                        // FIXME: integrate this case in latexSpecialChar
                        // Do not print the separation of the optional argument
                        // if style.pass_thru is false. This works because
@@ -2106,16 +2117,19 @@ bool Paragraph::latex(BufferParams const & bparams,
                // Two major modes:  LaTeX or plain
                // Handle here those cases common to both modes
                // and then split to handle the two modes separately.
-               if (c == META_INSET)
-                       d->latexInset(bparams, os,
-                                       texrow, rp, running_font,
-                                       basefont, outerfont, open_font,
-                                       runningChange, style, i, column);
-               else {
-                       try {
-                               d->latexSpecialChar(os, rp, running_font, runningChange,
-                                       style, i, column);
-                       } catch (EncodingException & e) {
+               if (c == META_INSET) {
+                       if (i >= start_pos && (end_pos == -1 || i < end_pos)) {
+                               d->latexInset(bparams, os,
+                                               texrow, rp, running_font,
+                                               basefont, outerfont, open_font,
+                                               runningChange, style, i, column);
+                       }
+               } else {
+                       if (i >= start_pos && (end_pos == -1 || i < end_pos)) {
+                               try {
+                                       d->latexSpecialChar(os, rp, running_font, runningChange,
+                                               style, i, column);
+                               } catch (EncodingException & e) {
                                if (runparams.dryrun) {
                                        os << "<" << _("LyX Warning: ")
                                           << _("uncodable character") << " '";
@@ -2129,6 +2143,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                                }
                        }
                }
+               }
 
                // Set the encoding to that returned from latexSpecialChar (see
                // comment for encoding member in OutputParams.h)
@@ -2164,7 +2179,7 @@ bool Paragraph::latex(BufferParams const & bparams,
                return_value = false;
        }
 
-       if (!asdefault) {
+       if (allowcust) {
                column += d->endTeXParParams(bparams, os, texrow,
                                          runparams);
        }
@@ -2426,7 +2441,30 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const
                    || (c == '\n' && options & AS_STR_NEWLINES))
                        os.put(c);
                else if (c == META_INSET && options & AS_STR_INSETS)
-                       getInset(i)->textString(os);
+                       getInset(i)->tocString(os);
+       }
+
+       return os.str();
+}
+
+
+docstring Paragraph::stringify(pos_type beg, pos_type end, int options, OutputParams & runparams) const
+{
+       odocstringstream os;
+
+       if (beg == 0 
+               && options & AS_STR_LABEL
+               && !d->params_.labelString().empty())
+               os << d->params_.labelString() << ' ';
+
+       for (pos_type i = beg; i < end; ++i) {
+               char_type const c = d->text_[i];
+               if (isPrintable(c) || c == '\t'
+                   || (c == '\n' && options & AS_STR_NEWLINES))
+                       os.put(c);
+               else if (c == META_INSET && options & AS_STR_INSETS) {
+                       getInset(i)->plaintext(os, runparams);
+               }
        }
 
        return os.str();
@@ -2457,19 +2495,31 @@ void Paragraph::setLayout(Layout const & layout)
 }
 
 
+void Paragraph::setDefaultLayout(DocumentClass const & tc)
+{ 
+       setLayout(tc.defaultLayout()); 
+}
+
+
+void Paragraph::setPlainLayout(DocumentClass const & tc)
+{ 
+       setLayout(tc.plainLayout()); 
+}
+
+
 void Paragraph::setPlainOrDefaultLayout(DocumentClass const & tclass)
 {
        if (usePlainLayout())
-               setLayout(tclass.plainLayout());
+               setPlainLayout(tclass);
        else
-               setLayout(tclass.defaultLayout());
+               setDefaultLayout(tclass);
 }
 
 
 Inset const & Paragraph::inInset() const
 {
        LASSERT(d->inset_owner_, throw ExceptionMessage(BufferException,
-               _("Memory problem"), _("Paragraph not properly initiliazed")));
+               _("Memory problem"), _("Paragraph not properly initialized")));
        return *d->inset_owner_;
 }