]> git.lyx.org Git - lyx.git/blobdiff - src/paragraph.C
LFUN_UNICODE_INSERT - unicode-insert
[lyx.git] / src / paragraph.C
index c7fdeeacb2e484b0ede52c206a1e0bfa8ee861f7..84ab0f9ffed2c528e8cf0bc2e4152868c0b216c6 100644 (file)
@@ -46,7 +46,6 @@
 #include "support/convert.h"
 #include "support/unicode.h"
 
-#include <boost/tuple/tuple.hpp>
 #include <boost/bind.hpp>
 
 #include <algorithm>
 #include <stack>
 #include <sstream>
 
-using lyx::docstring;
-using lyx::odocstream;
-using lyx::pos_type;
-using lyx::char_type;
 
-using lyx::support::subst;
+namespace lyx {
+
+using support::subst;
 
 using std::distance;
 using std::endl;
@@ -156,7 +153,7 @@ void Paragraph::write(Buffer const & buf, ostream & os,
        LyXFont font1(LyXFont::ALL_INHERIT, bparams.language);
 
        Change running_change = Change(Change::UNCHANGED);
-       lyx::time_type const curtime(lyx::current_time());
+       time_type const curtime = current_time();
 
        int column = 0;
        for (pos_type i = 0; i <= size(); ++i) {
@@ -238,20 +235,20 @@ void Paragraph::validate(LaTeXFeatures & features) const
 }
 
 
-bool Paragraph::erase(pos_type pos, bool trackChanges)
+bool Paragraph::eraseChar(pos_type pos, bool trackChanges)
 {
-       return pimpl_->erase(pos, trackChanges);
+       return pimpl_->eraseChar(pos, trackChanges);
 }
 
 
-int Paragraph::erase(pos_type start, pos_type end, bool trackChanges)
+int Paragraph::eraseChars(pos_type start, pos_type end, bool trackChanges)
 {
-       return pimpl_->erase(start, end, trackChanges);
+       return pimpl_->eraseChars(start, end, trackChanges);
 }
 
 
-void Paragraph::insert(pos_type start, string const & str,
-                      LyXFont const & font, Change const & change)
+void Paragraph::insert(pos_type start, docstring const & str,
+                       LyXFont const & font, Change const & change)
 {
        for (size_t i = 0, n = str.size(); i != n ; ++i)
                insertChar(start + i, str[i], font, change);
@@ -259,7 +256,7 @@ void Paragraph::insert(pos_type start, string const & str,
 
 
 void Paragraph::insertChar(pos_type pos, Paragraph::value_type c,
-                          bool trackChanges)
+                           bool trackChanges)
 {
        pimpl_->insertChar(pos, c, Change(trackChanges ?
                           Change::INSERTED : Change::UNCHANGED));
@@ -267,7 +264,7 @@ void Paragraph::insertChar(pos_type pos, Paragraph::value_type c,
 
 
 void Paragraph::insertChar(pos_type pos, Paragraph::value_type c,
-                          LyXFont const & font, bool trackChanges)
+                           LyXFont const & font, bool trackChanges)
 {
        pimpl_->insertChar(pos, c, Change(trackChanges ?
                           Change::INSERTED : Change::UNCHANGED));
@@ -283,14 +280,15 @@ void Paragraph::insertChar(pos_type pos, Paragraph::value_type c,
 }
 
 
-void Paragraph::insertInset(pos_type pos, InsetBase * inset, Change const & change)
+void Paragraph::insertInset(pos_type pos, InsetBase * inset,
+                            Change const & change)
 {
        pimpl_->insertInset(pos, inset, change);
 }
 
 
 void Paragraph::insertInset(pos_type pos, InsetBase * inset,
-                           LyXFont const & font, Change const & change)
+                            LyXFont const & font, Change const & change)
 {
        pimpl_->insertInset(pos, inset, change);
        setFont(pos, font);
@@ -328,10 +326,10 @@ LyXFont const Paragraph::getFontSettings(BufferParams const & bparams,
 }
 
 
-FontSpan Paragraph::fontSpan(lyx::pos_type pos) const
+FontSpan Paragraph::fontSpan(pos_type pos) const
 {
        BOOST_ASSERT(pos <= size());
-       lyx::pos_type start = 0;
+       pos_type start = 0;
 
        Pimpl::FontList::const_iterator cit = pimpl_->fontlist.begin();
        Pimpl::FontList::const_iterator end = pimpl_->fontlist.end();
@@ -571,7 +569,7 @@ int Paragraph::stripLeadingSpaces()
        int i = 0;
        while (!empty() && (isNewline(0) || isLineSeparator(0))
                && (lookupChange(0).type != Change::DELETED)) {
-               erase(0, false); // no change tracking here
+               eraseChar(0, false); // no change tracking here
                ++i;
        }
 
@@ -585,13 +583,13 @@ bool Paragraph::hasSameLayout(Paragraph const & par) const
 }
 
 
-Paragraph::depth_type Paragraph::getDepth() const
+depth_type Paragraph::getDepth() const
 {
        return params().depth();
 }
 
 
-Paragraph::depth_type Paragraph::getMaxDepthAfter() const
+depth_type Paragraph::getMaxDepthAfter() const
 {
        if (layout()->isEnvironment())
                return params().depth() + 1;
@@ -657,8 +655,8 @@ void Paragraph::setBeginOfBody()
        pos_type end = size();
        if (i < end && !isNewline(i)) {
                ++i;
-               char previous_char = 0;
-               char temp = 0;
+               char_type previous_char = 0;
+               char_type temp = 0;
                if (i < end) {
                        previous_char = text_[i];
                        if (!isNewline(i)) {
@@ -784,7 +782,7 @@ int Paragraph::startTeXParParams(BufferParams const & bparams,
                        output = corrected_env("\\begin", "flushleft", ownerCode());
                else
                        output = corrected_env("\\begin", "flushright", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        } case LYX_ALIGN_RIGHT: {
@@ -793,13 +791,13 @@ int Paragraph::startTeXParParams(BufferParams const & bparams,
                        output = corrected_env("\\begin", "flushright", ownerCode());
                else
                        output = corrected_env("\\begin", "flushleft", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        } case LYX_ALIGN_CENTER: {
                string output;
                output = corrected_env("\\begin", "center", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        }
@@ -843,7 +841,7 @@ int Paragraph::endTeXParParams(BufferParams const & bparams,
                        output = corrected_env("\\par\\end", "flushleft", ownerCode());
                else
                        output = corrected_env("\\par\\end", "flushright", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        } case LYX_ALIGN_RIGHT: {
@@ -852,13 +850,13 @@ int Paragraph::endTeXParParams(BufferParams const & bparams,
                        output = corrected_env("\\par\\end", "flushright", ownerCode());
                else
                        output = corrected_env("\\par\\end", "flushleft", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        } case LYX_ALIGN_CENTER: {
                string output;
                output = corrected_env("\\par\\end", "center", ownerCode());
-               os << lyx::from_ascii(output);
+               os << from_ascii(output);
                column += output.size();
                break;
        }
@@ -1160,7 +1158,7 @@ string Paragraph::getID(Buffer const & buf, OutputParams const & runparams) cons
                        InsetBase::Code lyx_code = inset->lyxCode();
                        if (lyx_code == InsetBase::LABEL_CODE) {
                                string const id = static_cast<InsetCommand const *>(inset)->getContents();
-                               return "id=\"" + sgml::cleanID(buf, runparams, id) + "\"";
+                               return "id='" + to_utf8(sgml::cleanID(buf, runparams, from_utf8(id))) + "'";
                        }
                }
 
@@ -1180,14 +1178,8 @@ pos_type Paragraph::getFirstWord(Buffer const & buf, odocstream & os, OutputPara
                        value_type c = getChar(i);
                        if (c == ' ')
                                break;
-                       bool ws;
-                       string str;
-                       // FIXME UNICODE
-                       // sgml::escapeChar takes a char, not lyx::char_type
-                       boost::tie(ws, str) = sgml::escapeChar(c);
-                        // FIXME UNICODE
-                       os << lyx::from_ascii(str);
-               }
+                       os << sgml::escapeChar(c);
+               }
        }
        return i;
 }
@@ -1245,17 +1237,12 @@ void Paragraph::simpleDocBookOnePar(Buffer const & buf,
                        inset->docbook(buf, os, runparams);
                } else {
                        value_type c = getChar(i);
-                       bool ws;
-                       string str;
-                       // FIXME UNICODE
-                       // sgml::escapeChar takes a char, not lyx::char_type
-                       boost::tie(ws, str) = sgml::escapeChar(c);
 
                        if (style->pass_thru)
                                 os.put(c);
                        else
                                 // FIXME UNICODE
-                                os << lyx::from_ascii(str);
+                                os << sgml::escapeChar(c);
                }
                font_old = font;
        }
@@ -1429,7 +1416,7 @@ void Paragraph::setContentsFromPar(Paragraph const & par)
 }
 
 
-Change const Paragraph::lookupChange(lyx::pos_type pos) const
+Change const Paragraph::lookupChange(pos_type pos) const
 {
        BOOST_ASSERT(pos <= size());
        return pimpl_->lookupChange(pos);
@@ -1448,7 +1435,7 @@ void Paragraph::setChange(Change const & change)
 }
 
 
-void Paragraph::setChange(lyx::pos_type pos, Change const & change)
+void Paragraph::setChange(pos_type pos, Change const & change)
 {
        pimpl_->setChange(pos, change);
 }
@@ -1503,12 +1490,6 @@ void Paragraph::clearContents()
 }
 
 
-void Paragraph::setChar(pos_type pos, value_type c)
-{
-       text_[pos] = c;
-}
-
-
 ParagraphParameters & Paragraph::params()
 {
        return pimpl_->params;
@@ -1635,3 +1616,38 @@ void Paragraph::dump() const
                rows_[i].dump();
        }
 }
+
+
+bool Paragraph::hfillExpansion(Row const & row, pos_type pos) const
+{
+       if (!isHfill(pos))
+               return false;
+
+       // at the end of a row it does not count
+       // unless another hfill exists on the line
+       if (pos >= row.endpos()) {
+               for (pos_type i = row.pos(); i < pos && !isHfill(i); ++i)
+                       return false;
+       }
+
+       // at the beginning of a row it does not count, if it is not
+       // the first row of a paragaph
+       if (row.pos() == 0)
+               return true;
+
+       // in some labels it does not count
+       if (layout()->margintype != MARGIN_MANUAL && pos < beginOfBody())
+               return false;
+
+       // if there is anything between the first char of the row and
+       // the specified position that is not a newline and not a hfill,
+       // the hfill will count, otherwise not
+       pos_type i = row.pos();
+       while (i < pos && (isNewline(i) || isHfill(i)))
+               ++i;
+
+       return i != pos;
+}
+
+
+} // namespace lyx