]> git.lyx.org Git - lyx.git/blobdiff - src/output_plaintext.C
Allows editing when the Prefs dialog is opened; fix bug 3140:
[lyx.git] / src / output_plaintext.C
index 46e3990ce17e7d52e73c4303fa475779e36c2384..ae70ac44d14fae4d71e5ec022be9c72b044c6ad0 100644 (file)
@@ -22,7 +22,6 @@
 #include "ParagraphList.h"
 #include "ParagraphParameters.h"
 
-#include "support/filename.h"
 #include "support/lstrings.h"
 
 
@@ -40,17 +39,17 @@ using std::pair;
 using std::string;
 
 
-void writeFileAscii(Buffer const & buf, FileName const & fname,
+void writePlaintextFile(Buffer const & buf, FileName const & fname,
        OutputParams const & runparams)
 {
        odocfstream ofs;
        if (!openFileWrite(ofs, fname))
                return;
-       writeFileAscii(buf, ofs, runparams);
+       writePlaintextFile(buf, ofs, runparams);
 }
 
 
-void writeFileAscii(Buffer const & buf, odocstream & os,
+void writePlaintextFile(Buffer const & buf, odocstream & os,
        OutputParams const & runparams)
 {
        bool ref_printed = false;
@@ -59,9 +58,11 @@ void writeFileAscii(Buffer const & buf, odocstream & os,
        ParagraphList::const_iterator end = par.end();
        ParagraphList::const_iterator it = beg;
        for (; it != end; ++it) {
-               asciiParagraph(buf, *it, os, runparams, ref_printed);
+               writePlaintextParagraph(buf, *it, os, runparams, ref_printed);
+               os << "\n";
+               if (runparams.linelen > 0)
+                       os << "\n";
        }
-       os << "\n";
 }
 
 
@@ -78,7 +79,7 @@ pair<int, docstring> const addDepth(int depth, int ldepth)
 }
 
 
-void asciiParagraph(Buffer const & buf,
+void writePlaintextParagraph(Buffer const & buf,
                    Paragraph const & par,
                    odocstream & os,
                    OutputParams const & runparams,
@@ -128,13 +129,10 @@ void asciiParagraph(Buffer const & buf,
 
        /* what about the alignment */
 
-       // runparams.linelen <= 0 is special and means we don't have paragraph breaks
+       // runparams.linelen == 0 is special and means we don't have paragraph breaks
 
        string::size_type currlinelen = 0;
 
-       if (runparams.linelen > 0)
-               os << "\n\n";
-
        os << docstring(depth * 2, ' ');
        currlinelen += depth * 2;
 
@@ -176,35 +174,36 @@ void asciiParagraph(Buffer const & buf,
 
        default: {
                docstring const label = par.params().labelString();
-               os << label << ' ';
-               currlinelen += label.length() + 1;
+               if (!label.empty()) {
+                       os << label << ' ';
+                       currlinelen += label.length() + 1;
+               }
                break;
        }
 
        }
 
-       if (!currlinelen) {
+       if (currlinelen == 0) {
                pair<int, docstring> p = addDepth(depth, ltype_depth);
                os << p.second;
                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) {
+               if (par.isDeleted(i)) // deleted characters don't make much sense in plain text output
+                       continue;
+
                char_type c = par.getUChar(buf.params(), i);
                switch (c) {
                case Paragraph::META_INSET: {
                        InsetBase const * inset = par.getInset(i);
-                       if (runparams.linelen > 0) {
-                               os << word;
-                               currlinelen += word.length();
-                               word.erase();
-                       }
+
+                       os << word;
+                       currlinelen += word.length();
+                       word.erase();
+
                        OutputParams rp = runparams;
                        rp.depth = par.params().depth();
                        if (inset->plaintext(buf, os, rp)) {
@@ -216,7 +215,7 @@ void asciiParagraph(Buffer const & buf,
 
                case ' ':
                        if (runparams.linelen > 0 &&
-                           currlinelen + word.length() > runparams.linelen - 10) {
+                           currlinelen + word.length() > runparams.linelen) {
                                os << '\n';
                                pair<int, docstring> p = addDepth(depth, ltype_depth);
                                os << p.second;
@@ -229,22 +228,22 @@ void asciiParagraph(Buffer const & buf,
 
                case '\0':
                        lyxerr[Debug::INFO] <<
-                               "writeAsciiFile: NULL char in structure." << endl;
+                               "writePlaintextFile: NULL char in structure." << endl;
                        break;
 
                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;
                }
        }
+
+       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;
 }