]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.cpp
tex2lyx/text.cpp: code simplification
[lyx.git] / src / TextClass.cpp
index f43fe7d36549e086348bb8eb45e7198fa28860bc..0ab0c5ce88c1ce31b5ef6a5e0f86606ddfcd9bc8 100644 (file)
@@ -60,7 +60,7 @@ namespace lyx {
 // development/updatelayouts.sh script, to update the format of 
 // all of our layout files.
 //
-int const LAYOUT_FORMAT = 32;
+int const LAYOUT_FORMAT = 35;
        
 namespace {
 
@@ -268,6 +268,29 @@ bool TextClass::convertLayoutFormat(support::FileName const & filename, ReadType
 }
 
 
+std::string TextClass::convert(std::string const & str)
+{
+       FileName const fn = FileName::tempName("locallayout");
+       ofstream os(fn.toFilesystemEncoding().c_str());
+       os << str;
+       os.close();
+       FileName const tempfile = FileName::tempName("convert_locallayout");
+       bool success = layout2layout(fn, tempfile);
+       if (!success)
+               return "";
+       ifstream is(tempfile.toFilesystemEncoding().c_str());
+       string ret;
+       string tmp;
+       while (!is.eof()) {
+               getline(is, tmp);
+               ret += tmp + '\n';
+       }
+       is.close();
+       tempfile.removeFile();
+       return ret;
+}
+
+
 TextClass::ReturnValues TextClass::readWithoutConv(FileName const & filename, ReadType rt)
 {
        if (!filename.isReadableFile()) {
@@ -303,23 +326,21 @@ bool TextClass::read(FileName const & filename, ReadType rt)
                return retval == OK;
 
        bool const worx = convertLayoutFormat(filename, rt);
-       if (!worx) {
+       if (!worx)
                LYXERR0 ("Unable to convert " << filename << 
                        " to format " << LAYOUT_FORMAT);
-               return false;
-       }
-       return true;
+       return worx;
 }
 
 
-bool TextClass::validate(std::string const & str)
+TextClass::ReturnValues TextClass::validate(std::string const & str)
 {
        TextClass tc;
        return tc.read(str, VALIDATION);
 }
 
 
-bool TextClass::read(std::string const & str, ReadType rt) 
+TextClass::ReturnValues TextClass::read(std::string const & str, ReadType rt)
 {
        Lexer lexrc(textClassTags);
        istringstream is(str);
@@ -327,14 +348,14 @@ bool TextClass::read(std::string const & str, ReadType rt)
        ReturnValues retval = read(lexrc, rt);
 
        if (retval != FORMAT_MISMATCH) 
-               return retval == OK;
+               return retval;
 
        // write the layout string to a temporary file
        FileName const tempfile = FileName::tempName("TextClass_read");
        ofstream os(tempfile.toFilesystemEncoding().c_str());
        if (!os) {
                LYXERR0("Unable to create temporary file");
-               return false;
+               return ERROR;
        }
        os << str;
        os.close();
@@ -344,9 +365,10 @@ bool TextClass::read(std::string const & str, ReadType rt)
        if (!worx) {
                LYXERR0("Unable to convert internal layout information to format " 
                        << LAYOUT_FORMAT);
+               return ERROR;
        }
        tempfile.removeFile();
-       return worx;
+       return OK_OLDFORMAT;
 }
 
 
@@ -911,7 +933,8 @@ bool TextClass::readFloat(Lexer & lexrc)
                FT_WITHIN,
                FT_STYLE,
                FT_LISTNAME,
-               FT_NEEDSFLOAT,
+               FT_USESFLOAT,
+               FT_PREDEFINED,
                FT_HTMLSTYLE,
                FT_HTMLATTR,
                FT_HTMLTAG,
@@ -927,14 +950,15 @@ bool TextClass::readFloat(Lexer & lexrc)
                { "htmlattr", FT_HTMLATTR },
                { "htmlstyle", FT_HTMLSTYLE },
                { "htmltag", FT_HTMLTAG },
+               { "ispredefined", FT_PREDEFINED },
                { "listcommand", FT_LISTCOMMAND },
                { "listname", FT_LISTNAME },
-               { "needsfloatpkg", FT_NEEDSFLOAT },
                { "numberwithin", FT_WITHIN },
                { "placement", FT_PLACEMENT },
                { "refprefix", FT_REFPREFIX },
                { "style", FT_STYLE },
-               { "type", FT_TYPE }
+               { "type", FT_TYPE },
+               { "usesfloatpkg", FT_USESFLOAT }
        };
 
        lexrc.pushTable(floatTags);
@@ -952,6 +976,7 @@ bool TextClass::readFloat(Lexer & lexrc)
        string type;
        string within;
        bool usesfloat = true;
+       bool ispredefined = false;
 
        bool getout = false;
        while (!getout && lexrc.isOK()) {
@@ -976,6 +1001,7 @@ bool TextClass::readFloat(Lexer & lexrc)
                                name = fl.name();
                                listname = fl.listName();
                                usesfloat = fl.usesFloatPkg();
+                               ispredefined = fl.isPredefined();
                                listcommand = fl.listCommand();
                                refprefix = fl.refPrefix();
                        } 
@@ -1014,10 +1040,14 @@ bool TextClass::readFloat(Lexer & lexrc)
                        lexrc.next();
                        listname = lexrc.getString();
                        break;
-               case FT_NEEDSFLOAT:
+               case FT_USESFLOAT:
                        lexrc.next();
                        usesfloat = lexrc.getBool();
                        break;
+               case FT_PREDEFINED:
+                       lexrc.next();
+                       ispredefined = lexrc.getBool();
+                       break;
                case FT_HTMLATTR:
                        lexrc.next();
                        htmlattr = lexrc.getString();
@@ -1059,7 +1089,7 @@ bool TextClass::readFloat(Lexer & lexrc)
                }
                Floating fl(type, placement, ext, within, style, name, 
                                listname, listcommand, refprefix, 
-                               htmltag, htmlattr, htmlstyle, usesfloat);
+                               htmltag, htmlattr, htmlstyle, usesfloat, ispredefined);
                floatlist_.newFloat(fl);
                // each float has its own counter
                counters_.newCounter(from_ascii(type), from_ascii(within),
@@ -1191,10 +1221,13 @@ bool TextClass::load(string const & path) const
 }
 
 
-void DocumentClass::addLayoutIfNeeded(docstring const & n) const
+bool DocumentClass::addLayoutIfNeeded(docstring const & n) const
 {
-       if (!hasLayout(n))
-               layoutlist_.push_back(createBasicLayout(n, true));
+       if (hasLayout(n))
+               return false;
+
+       layoutlist_.push_back(createBasicLayout(n, true));
+       return true;
 }
 
 
@@ -1219,7 +1252,6 @@ InsetLayout const & DocumentClass::insetLayout(docstring const & name) const
 
 docstring const & TextClass::defaultLayoutName() const
 {
-       // This really should come from the actual layout... (Lgb)
        return defaultlayout_;
 }