]> git.lyx.org Git - lyx.git/blobdiff - src/output_plaintext.C
Scons: update_po target, part one: language_l10n.pot
[lyx.git] / src / output_plaintext.C
index c8be6dfdc23818dc0ed987f37db2ce7716ffba33..d3072e4dc8a0e9d3284c3c2dced865a750c02189 100644 (file)
@@ -29,7 +29,6 @@ namespace lyx {
 
 using support::ascii_lowercase;
 using support::compare_ascii_no_case;
-using support::compare_no_case;
 using support::contains;
 using support::FileName;
 
@@ -91,7 +90,7 @@ void writePlaintextParagraph(Buffer const & buf,
 
        // First write the layout
        string const & tmp = par.layout()->name();
-       if (compare_no_case(tmp, "itemize") == 0) {
+       if (compare_ascii_no_case(tmp, "itemize") == 0) {
                ltype = 1;
                ltype_depth = depth + 1;
        } else if (compare_ascii_no_case(tmp, "enumerate") == 0) {
@@ -117,14 +116,8 @@ void writePlaintextParagraph(Buffer const & buf,
                ltype_depth = 0;
        }
 
-       /* maybe some vertical spaces */
-
        /* the labelwidthstring used in lists */
 
-       /* some lines? */
-
-       /* some pagebreaks? */
-
        /* noindent ? */
 
        /* what about the alignment */
@@ -152,7 +145,7 @@ void writePlaintextParagraph(Buffer const & buf,
                        os << _("Abstract") << "\n\n";
                        currlinelen = 0;
                } else {
-                       docstring const abst = _("Abstract") + from_ascii(": ");
+                       docstring const abst = _("Abstract: ");
                        os << abst;
                        currlinelen += abst.length();
                }
@@ -164,7 +157,7 @@ void writePlaintextParagraph(Buffer const & buf,
                                os << _("References") << "\n\n";
                                currlinelen = 0;
                        } else {
-                               docstring const refs = _("References") + from_ascii(": ");
+                               docstring const refs = _("References: ");
                                os << refs;
                                currlinelen += refs.length();
                        }
@@ -189,40 +182,43 @@ void writePlaintextParagraph(Buffer const & buf,
                currlinelen += p.first;
        }
 
-       // this is to change the linebreak to do it by word a bit more
-       // intelligent hopefully! (only in the case where we have a
-       // max runparams.linelength!) (Jug)
-
        docstring word;
 
        for (pos_type i = 0; i < par.size(); ++i) {
+               // deleted characters don't make much sense in plain text output
+               if (par.isDeleted(i))
+                       continue;
+
                char_type c = par.getUChar(buf.params(), i);
-               switch (c) {
-               case Paragraph::META_INSET: {
-                       InsetBase const * inset = par.getInset(i);
+
+               if (c == Paragraph::META_INSET || c == ' ') {
+                       if (runparams.linelen > 0 &&
+                           currlinelen + word.length() > runparams.linelen) {
+                               os << '\n';
+                               pair<int, docstring> p = addDepth(depth, ltype_depth);
+                               os << p.second;
+                               currlinelen = p.first;
+                       }
                        os << word;
                        currlinelen += word.length();
                        word.erase();
+               }
+
+               switch (c) {
+               case Paragraph::META_INSET: {
                        OutputParams rp = runparams;
                        rp.depth = par.params().depth();
-                       if (inset->plaintext(buf, os, rp)) {
-                               // to be sure it breaks paragraph
-                               currlinelen += runparams.linelen;
-                       }
+                       int len = par.getInset(i)->plaintext(buf, os, rp);
+                       if (len >= InsetBase::PLAINTEXT_NEWLINE)
+                               currlinelen = len - InsetBase::PLAINTEXT_NEWLINE;
+                       else
+                               currlinelen += len;
                        break;
                }
 
                case ' ':
-                       if (runparams.linelen > 0 &&
-                           currlinelen + word.length() > runparams.linelen - 10) {
-                               os << '\n';
-                               pair<int, docstring> p = addDepth(depth, ltype_depth);
-                               os << p.second;
-                               currlinelen = p.first;
-                       }
-                       os << word << ' ';
-                       currlinelen += word.length() + 1;
-                       word.erase();
+                       os << ' ';
+                       currlinelen++;
                        break;
 
                case '\0':
@@ -232,18 +228,22 @@ void writePlaintextParagraph(Buffer const & buf,
 
                default:
                        word += c;
-                       if (runparams.linelen > 0 &&
-                           currlinelen + word.length() > runparams.linelen)
-                       {
-                               os << '\n';
-                               pair<int, docstring> p = addDepth(depth, ltype_depth);
-                               os << p.second;
-                               currlinelen = p.first;
-                       }
                        break;
                }
        }
-       os << word;
+
+       // currlinelen may be greater than runparams.linelen!
+       // => check whether word is empty and do nothing in this case
+       if (!word.empty()) {
+               if (runparams.linelen > 0 &&
+                   currlinelen + word.length() > runparams.linelen) {
+                       os << '\n';
+                       pair<int, docstring> p = addDepth(depth, ltype_depth);
+                       os << p.second;
+                       currlinelen = p.first;
+               }
+               os << word;
+       }
 }