X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.cpp;h=0ab0c5ce88c1ce31b5ef6a5e0f86606ddfcd9bc8;hb=0bff66b8a5a8a289dfb36bfb339e9586b3a02d51;hp=edf66b3b34048dc5e36d21d049a99d7061f0dd4c;hpb=5d774518c6b8efe9c562699bb0b994449da67cf3;p=lyx.git diff --git a/src/TextClass.cpp b/src/TextClass.cpp index edf66b3b34..0ab0c5ce88 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -60,7 +60,7 @@ namespace lyx { // development/updatelayouts.sh script, to update the format of // all of our layout files. // -int const LAYOUT_FORMAT = 33; +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; } @@ -1199,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; }