]> git.lyx.org Git - lyx.git/blobdiff - src/Paragraph.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / Paragraph.cpp
index 595d8223ca6a6c1ad9c1671c68d43e3d7bcc0d5c..498c5c1c2c1eda23071bf0a826c66b300e612a86 100644 (file)
@@ -165,7 +165,7 @@ public:
                      pos_type initial) const;
 
        /// match a string against a particular point in the paragraph
-       bool isTextAt(std::string const & str, pos_type pos) const;
+       bool isTextAt(string const & str, pos_type pos) const;
        
        /// Which Paragraph owns us?
        Paragraph * owner_;
@@ -183,10 +183,6 @@ public:
        ///
        ParagraphParameters params_;
 
-       /// position of the paragraph in the buffer. Only macros from
-       /// paragraphs strictly smaller are visible in this paragraph
-       unsigned int macrocontext_position_;
-       
        /// for recording and looking up changes
        Changes changes_;
 
@@ -232,7 +228,6 @@ Paragraph::Private::Private(Paragraph * owner)
        : owner_(owner), inset_owner_(0), begin_of_body_(0)
 {
        id_ = paragraph_id++;
-       macrocontext_position_ = 0;
        text_.reserve(100);
 }
 
@@ -915,7 +910,7 @@ bool Paragraph::Private::latexSpecialT1(char_type const c, odocstream & os,
                os.put(c);
                // In T1 encoding, these characters exist
                // but we should avoid ligatures
-               if (i + 1 > int(text_.size()) || text_[i + 1] != c)
+               if (i + 1 >= int(text_.size()) || text_[i + 1] != c)
                        return true;
                os << "\\,{}";
                column += 3;
@@ -1004,6 +999,13 @@ void Paragraph::Private::validate(LaTeXFeatures & features,
 
        // then the layouts
        features.useLayout(layout.name());
+       if (!layout.requires().empty()) {
+               vector<string> req = layout.requires();
+               for (vector<string>::const_iterator it = req.begin();
+                    it != req.end(); ++it) {
+                       features.require(*it);
+               }
+       }
 
        // then the fonts
        fontlist_.validate(features);
@@ -1164,7 +1166,7 @@ void Paragraph::write(Buffer const & buf, ostream & os,
                        // this check is to amend a bug. LyX sometimes
                        // inserts '\0' this could cause problems.
                        if (c != '\0') {
-                               std::vector<char> tmp = ucs4_to_utf8(c);
+                               vector<char> tmp = ucs4_to_utf8(c);
                                tmp.push_back('\0');
                                os << &tmp[0];
                        } else
@@ -1212,7 +1214,7 @@ void Paragraph::appendString(docstring const & s, Font const & font,
        size_t newsize = oldsize + end;
        size_t capacity = d->text_.capacity();
        if (newsize >= capacity)
-               d->text_.reserve(std::max(capacity + 100, newsize));
+               d->text_.reserve(max(capacity + 100, newsize));
 
        // when appending characters, no need to update tables
        d->text_.append(s);
@@ -1304,11 +1306,11 @@ FontSpan Paragraph::fontSpan(pos_type pos) const
        for (; cit != end; ++cit) {
                if (cit->pos() >= pos) {
                        if (pos >= beginOfBody())
-                               return FontSpan(std::max(start, beginOfBody()),
+                               return FontSpan(max(start, beginOfBody()),
                                                cit->pos());
                        else
                                return FontSpan(start,
-                                               std::min(beginOfBody() - 1,
+                                               min(beginOfBody() - 1,
                                                         cit->pos()));
                }
                start = cit->pos() + 1;
@@ -1519,7 +1521,7 @@ void Paragraph::setLabelWidthString(docstring const & s)
 docstring const Paragraph::translateIfPossible(docstring const & s,
                BufferParams const & bparams) const
 {
-       if (!support::isAscii(s) || s.empty()) {
+       if (!isAscii(s) || s.empty()) {
                // This must be a user defined layout. We cannot translate
                // this, since gettext accepts only ascii keys.
                return s;
@@ -1960,9 +1962,8 @@ bool Paragraph::latex(Buffer const & buf,
                if (!runparams.verbatim && 
                    runparams.encoding->package() == Encoding::none &&
                    font.language()->encoding()->package() == Encoding::none) {
-                       std::pair<bool, int> const enc_switch = switchEncoding(os, bparams,
-                                       runparams, *(runparams.encoding),
-                                       *(font.language()->encoding()));
+                       pair<bool, int> const enc_switch = switchEncoding(os, bparams,
+                                       runparams, *(font.language()->encoding()));
                        if (enc_switch.first) {
                                column += enc_switch.second;
                                runparams.encoding = font.language()->encoding();
@@ -2025,9 +2026,24 @@ bool Paragraph::latex(Buffer const & buf,
                                        texrow, rp, running_font,
                                        basefont, outerfont, open_font,
                                        runningChange, *style, i, column);
-               else
-                       d->latexSpecialChar(os, rp, running_font, runningChange,
-                               *style, i, column);
+               else {
+                       try {
+                               d->latexSpecialChar(os, rp, running_font, runningChange,
+                                       *style, i, column);
+                       } catch (EncodingException & e) {
+                               if (runparams.dryrun) {
+                                       os << "<" << _("LyX Warning: ")
+                                          << _("uncodable character") << " '";
+                                       os.put(c);
+                                       os << "'>";
+                               } else {
+                                       // add location information and throw again.
+                                       e.par_id = id();
+                                       e.pos = i;
+                                       throw(e);
+                               }
+                       }
+               }
 
                // Set the encoding to that returned from simpleTeXSpecialChars (see
                // comment for encoding member in OutputParams.h)
@@ -2490,18 +2506,6 @@ int Paragraph::checkBiblio(bool track_changes)
 }
 
 
-unsigned int Paragraph::macrocontextPosition() const
-{
-       return d->macrocontext_position_;
-}
-
-
-void Paragraph::setMacrocontextPosition(unsigned int pos)
-{
-       d->macrocontext_position_ = pos;
-}
-
-
 void Paragraph::checkAuthors(AuthorList const & authorList)
 {
        d->changes_.checkAuthors(authorList);