]> git.lyx.org Git - lyx.git/blobdiff - src/sgml.cpp
Fix export of xfig external insets (bug #9244).
[lyx.git] / src / sgml.cpp
index 068a831f8bf9ca99ab0449647de345bdf432ea8b..fdd0ed7270cf32ed4ba5b706eb0622a553837024 100644 (file)
@@ -3,7 +3,7 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * \author José Matos
+ * \author José Matos
  * \author John Levon
  *
  * Full author contact details are available in file CREDITS.
@@ -28,7 +28,6 @@
 #include "support/textutils.h"
 
 #include <map>
-#include <ostream>
 
 using namespace std;
 using namespace lyx::support;
@@ -103,8 +102,11 @@ docstring sgml::escapeString(docstring const & raw)
 }
 
 
-docstring const sgml::uniqueID(docstring const label)
+docstring const sgml::uniqueID(docstring const label)
 {
+       // FIXME THREAD
+       // It seems unlikely there could be a problem here,
+       // but we could have concurrent access, in principle.
        static unsigned int seed = 1000;
        return label + convert<docstring>(++seed);
 }
@@ -133,6 +135,7 @@ docstring sgml::cleanID(Buffer const & buf, OutputParams const & runparams,
 
        docstring content;
 
+       // FIXME THREAD
        typedef map<docstring, docstring> MangledMap;
        static MangledMap mangledNames;
        static int mangleID = 1;
@@ -182,7 +185,12 @@ void sgml::openTag(odocstream & os, string const & name, string const & attribut
        string param = subst(attribute, "<", "\"");
        param = subst(param, ">", "\"");
 
-       if (!name.empty() && name != "!-- --") {
+       // Note: we ignore the name if it empty or if it is a comment "<!-- -->" or
+       // if the name is *dummy*.
+       // We ignore dummy because dummy is not a valid docbook element and it is
+       // the internal name given to single paragraphs in the latex output.
+       // This allow us to simplify the code a lot and is a reasonable compromise.
+       if (!name.empty() && name != "!-- --" && name != "dummy") {
                os << '<' << from_ascii(name);
                if (!param.empty())
                        os << ' ' << from_ascii(param);
@@ -193,7 +201,7 @@ void sgml::openTag(odocstream & os, string const & name, string const & attribut
 
 void sgml::closeTag(odocstream & os, string const & name)
 {
-       if (!name.empty() && name != "!-- --")
+       if (!name.empty() && name != "!-- --" && name != "dummy")
                os << "</" << from_ascii(name) << '>';
 }
 
@@ -221,9 +229,12 @@ void sgml::openTag(Buffer const & buf, odocstream & os,
                if (param.find('#') != string::npos) {
                        // FIXME UNICODE
                        if (!style.counter.empty())
-                               counters.step(style.counter);
+                               // This uses InternalUpdate at the moment becuase sgml output
+                               // does not do anything with tracked counters, and it would need
+                               // to track layouts if it did want to use them.
+                               counters.step(style.counter, InternalUpdate);
                        else
-                               counters.step(from_ascii(name));
+                               counters.step(from_ascii(name), InternalUpdate);
                        int i = counters.value(from_ascii(name));
                        attribute = subst(param, "#", convert<string>(i));
                } else {