From 7677e9487c1669735a2aa9b2356199c2f608fe15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Wed, 2 Apr 2008 22:14:45 +0000 Subject: [PATCH] simplify Lexer use a bit git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24098 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 4 +- src/CmdDef.cpp | 6 +- src/ConverterCache.cpp | 2 +- src/Encoding.cpp | 7 +- src/Font.cpp | 2 +- src/KeyMap.cpp | 6 +- src/LaTeXFeatures.cpp | 2 +- src/Language.cpp | 2 +- src/Layout.cpp | 24 +++--- src/LayoutFile.cpp | 2 +- src/Lexer.cpp | 38 ++++++---- src/Lexer.h | 56 ++++++++++---- src/LyX.cpp | 6 +- src/LyXFunc.cpp | 4 +- src/LyXRC.cpp | 8 +- src/Makefile.am | 2 +- src/ModuleList.cpp | 2 +- src/ParagraphParameters.cpp | 2 +- src/Text.cpp | 6 +- src/Text3.cpp | 2 +- src/TextClass.cpp | 26 +++---- src/ToolbarBackend.cpp | 26 +++++-- src/Trans.cpp | 20 +++-- src/frontends/qt4/GuiLog.cpp | 2 +- src/frontends/qt4/Menus.cpp | 25 ++++--- src/insets/ExternalTemplate.cpp | 12 +-- src/insets/InsetBox.cpp | 2 +- src/insets/InsetBranch.cpp | 2 +- src/insets/InsetCommand.cpp | 2 +- src/insets/InsetERT.cpp | 2 +- src/insets/InsetExternal.cpp | 4 +- src/insets/InsetFloat.cpp | 2 +- src/insets/InsetGraphics.cpp | 2 +- src/insets/InsetLayout.cpp | 6 +- src/insets/InsetListings.cpp | 2 +- src/insets/InsetNewline.cpp | 2 +- src/insets/InsetNewpage.cpp | 2 +- src/insets/InsetNote.cpp | 2 +- src/insets/InsetSpace.cpp | 2 +- src/insets/InsetTabular.cpp | 2 +- src/insets/InsetVSpace.cpp | 2 +- src/insets/InsetWrap.cpp | 2 +- src/lyxled/LayoutEditor.cpp | 126 ++++++++++++++++++++++++++++++++ src/lyxled/LayoutEditor.h | 75 +++++++++++++++++++ src/lyxled/Makefile.am | 66 +++++++++++++++++ src/lyxled/lyxled.pro | 16 ++++ src/lyxled/main.cpp | 18 +++++ src/lyxled/ui/MainWindowUi.ui | 80 ++++++++++++++++++++ src/mathed/MathParser.cpp | 2 +- 49 files changed, 564 insertions(+), 151 deletions(-) create mode 100644 src/lyxled/LayoutEditor.cpp create mode 100644 src/lyxled/LayoutEditor.h create mode 100644 src/lyxled/Makefile.am create mode 100644 src/lyxled/lyxled.pro create mode 100644 src/lyxled/main.cpp create mode 100644 src/lyxled/ui/MainWindowUi.ui diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 9994d3ade6..5f4fd995df 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -657,7 +657,7 @@ bool Buffer::readString(string const & s) // remove dummy empty par paragraphs().clear(); - Lexer lex(0, 0); + Lexer lex; istringstream is(s); lex.setStream(is); FileName const name = FileName::tempName(); @@ -705,7 +705,7 @@ bool Buffer::readFile(FileName const & filename) // remove dummy empty par paragraphs().clear(); - Lexer lex(0, 0); + Lexer lex; lex.setFile(fname); if (readFile(lex, fname) != success) return false; diff --git a/src/CmdDef.cpp b/src/CmdDef.cpp index f04a8d907d..2a3158c3dd 100644 --- a/src/CmdDef.cpp +++ b/src/CmdDef.cpp @@ -35,7 +35,7 @@ enum CmdDefTags { BN_DEFINE }; -keyword_item cmdDefTags[] = { +LexerKeyword cmdDefTags[] = { { "\\def_file", BN_DEFFILE }, { "\\define", BN_DEFINE } }; @@ -45,9 +45,7 @@ keyword_item cmdDefTags[] = { bool CmdDef::read(string const & def_file) { - const int cmdDefCount = sizeof(cmdDefTags) / sizeof(keyword_item); - - Lexer lexrc(cmdDefTags, cmdDefCount); + Lexer lexrc(cmdDefTags); if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); diff --git a/src/ConverterCache.cpp b/src/ConverterCache.cpp index 972746df16..2f0a946fd3 100644 --- a/src/ConverterCache.cpp +++ b/src/ConverterCache.cpp @@ -107,7 +107,7 @@ void ConverterCache::Impl::readIndex() time_t const now = current_time(); FileName const index(addName(cache_dir.absFilename(), "index")); ifstream is(index.toFilesystemEncoding().c_str()); - Lexer lex(0, 0); + Lexer lex; lex.setStream(is); while (lex.isOK()) { if (!lex.next(true)) diff --git a/src/Encoding.cpp b/src/Encoding.cpp index 3aa31d0099..5812410357 100644 --- a/src/Encoding.cpp +++ b/src/Encoding.cpp @@ -467,7 +467,7 @@ void Encodings::read(FileName const & encfile, FileName const & symbolsfile) { // We must read the symbolsfile first, because the Encoding // constructor depends on it. - Lexer symbolslex(0, 0); + Lexer symbolslex; symbolslex.setFile(symbolsfile); while (symbolslex.isOK()) { char_type symbol; @@ -525,15 +525,14 @@ void Encodings::read(FileName const & encfile, FileName const & symbolsfile) enum Encodingtags { et_encoding = 1, et_end, - et_last }; - struct keyword_item encodingtags[et_last - 1] = { + struct LexerKeyword encodingtags[] = { { "encoding", et_encoding }, { "end", et_end } }; - Lexer lex(encodingtags, et_last - 1); + Lexer lex(encodingtags); lex.setFile(encfile); while (lex.isOK()) { switch (lex.lex()) { diff --git a/src/Font.cpp b/src/Font.cpp index 94549dac39..7a9849b829 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -664,7 +664,7 @@ string Font::toString(bool const toggle) const bool Font::fromString(string const & data, bool & toggle) { istringstream is(data); - Lexer lex(0,0); + Lexer lex; lex.setStream(is); int nset = 0; diff --git a/src/KeyMap.cpp b/src/KeyMap.cpp index d1c7040c7d..847f98c23b 100644 --- a/src/KeyMap.cpp +++ b/src/KeyMap.cpp @@ -125,7 +125,7 @@ enum BindTags { BN_UNBIND, }; -keyword_item bindTags[] = { +LexerKeyword bindTags[] = { { "\\bind", BN_BIND }, { "\\bind_file", BN_BINDFILE }, { "\\unbind", BN_UNBIND }, @@ -136,9 +136,7 @@ keyword_item bindTags[] = { bool KeyMap::read(string const & bind_file, KeyMap * unbind_map) { - const int bindCount = sizeof(bindTags) / sizeof(keyword_item); - - Lexer lexrc(bindTags, bindCount); + Lexer lexrc(bindTags); if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); diff --git a/src/LaTeXFeatures.cpp b/src/LaTeXFeatures.cpp index 641e99eb7d..a6ce6c3391 100644 --- a/src/LaTeXFeatures.cpp +++ b/src/LaTeXFeatures.cpp @@ -237,7 +237,7 @@ void LaTeXFeatures::require(set const & names) void LaTeXFeatures::getAvailable() { - Lexer lex(0, 0); + Lexer lex; support::FileName const real_file = libFileSearch("", "packages.lst"); if (real_file.empty()) diff --git a/src/Language.cpp b/src/Language.cpp index 59694b9c50..ce5b236777 100644 --- a/src/Language.cpp +++ b/src/Language.cpp @@ -45,7 +45,7 @@ void Languages::read(FileName const & filename) encodings.fromLyXName("iso8859-1"), "latex", ""); - Lexer lex(0, 0); + Lexer lex; lex.setFile(filename); while (lex.isOK()) { string lang; diff --git a/src/Layout.cpp b/src/Layout.cpp index e368f23bbd..05efa9c387 100644 --- a/src/Layout.cpp +++ b/src/Layout.cpp @@ -134,7 +134,7 @@ Layout::Layout() bool Layout::read(Lexer & lexrc, TextClass const & tclass) { // This table is sorted alphabetically [asierra 30March96] - keyword_item layoutTags[] = { + LexerKeyword layoutTags[] = { { "align", LT_ALIGN }, { "alignpossible", LT_ALIGNPOSSIBLE }, { "bottomsep", LT_BOTTOMSEP }, @@ -191,7 +191,7 @@ bool Layout::read(Lexer & lexrc, TextClass const & tclass) bool error = false; bool finished = false; - lexrc.pushTable(layoutTags, LT_INTITLE); + lexrc.pushTable(layoutTags); // parse style section while (!finished && lexrc.isOK() && !error) { int le = lexrc.lex(); @@ -515,7 +515,7 @@ enum AlignTags { void Layout::readAlign(Lexer & lexrc) { - keyword_item alignTags[] = { + LexerKeyword alignTags[] = { { "block", AT_BLOCK }, { "center", AT_CENTER }, { "layout", AT_LAYOUT }, @@ -553,7 +553,7 @@ void Layout::readAlign(Lexer & lexrc) void Layout::readAlignPossible(Lexer & lexrc) { - keyword_item alignTags[] = { + LexerKeyword alignTags[] = { { "block", AT_BLOCK }, { "center", AT_CENTER }, { "layout", AT_LAYOUT }, @@ -561,9 +561,9 @@ void Layout::readAlignPossible(Lexer & lexrc) { "right", AT_RIGHT } }; - lexrc.pushTable(alignTags, AT_LAYOUT); + lexrc.pushTable(alignTags); alignpossible = LYX_ALIGN_NONE | LYX_ALIGN_LAYOUT; - int lineno = lexrc.getLineNo(); + int lineno = lexrc.lineNumber(); do { int le = lexrc.lex(); switch (le) { @@ -589,7 +589,7 @@ void Layout::readAlignPossible(Lexer & lexrc) alignpossible |= LYX_ALIGN_LAYOUT; break; } - } while (lineno == lexrc.getLineNo()); + } while (lineno == lexrc.lineNumber()); lexrc.popTable(); } @@ -610,7 +610,7 @@ enum LabelTypeTags { void Layout::readLabelType(Lexer & lexrc) { - keyword_item labelTypeTags[] = { + LexerKeyword labelTypeTags[] = { { "bibliography", LA_BIBLIO }, { "centered_top_environment", LA_CENTERED_TOP_ENVIRONMENT }, { "counter", LA_COUNTER }, @@ -666,7 +666,7 @@ void Layout::readLabelType(Lexer & lexrc) } -static keyword_item endlabelTypeTags[] = +static LexerKeyword endlabelTypeTags[] = { { "box", END_LABEL_BOX }, { "filled_box", END_LABEL_FILLED_BOX }, @@ -700,7 +700,7 @@ void Layout::readEndLabelType(Lexer & lexrc) void Layout::readMargin(Lexer & lexrc) { - keyword_item marginTags[] = { + LexerKeyword marginTags[] = { { "dynamic", MARGIN_DYNAMIC }, { "first_dynamic", MARGIN_FIRST_DYNAMIC }, { "manual", MARGIN_MANUAL }, @@ -732,7 +732,7 @@ void Layout::readMargin(Lexer & lexrc) void Layout::readLatexType(Lexer & lexrc) { - keyword_item latexTypeTags[] = { + LexerKeyword latexTypeTags[] = { { "bib_environment", LATEX_BIB_ENVIRONMENT }, { "command", LATEX_COMMAND }, { "environment", LATEX_ENVIRONMENT }, @@ -773,7 +773,7 @@ enum SpacingTags { void Layout::readSpacing(Lexer & lexrc) { - keyword_item spacingTags[] = { + LexerKeyword spacingTags[] = { {"double", ST_SPACING_DOUBLE }, {"onehalf", ST_SPACING_ONEHALF }, {"other", ST_OTHER }, diff --git a/src/LayoutFile.cpp b/src/LayoutFile.cpp index 0680f33f02..42b74fc62b 100644 --- a/src/LayoutFile.cpp +++ b/src/LayoutFile.cpp @@ -84,7 +84,7 @@ LayoutFile & // Reads LyX textclass definitions according to textclass config file bool LayoutFileList::read() { - Lexer lex(0, 0); + Lexer lex; FileName const real_file = libFileSearch("", "textclass.lst"); LYXERR(Debug::TCLASS, "Reading textclasses from `" << real_file << '\''); diff --git a/src/Lexer.cpp b/src/Lexer.cpp index fd9a1f362c..530e4f12f0 100644 --- a/src/Lexer.cpp +++ b/src/Lexer.cpp @@ -45,7 +45,7 @@ namespace lyx { class Lexer::Pimpl { public: /// - Pimpl(keyword_item * tab, int num); + Pimpl(LexerKeyword * tab, int num); /// string const getString() const; /// @@ -55,7 +55,7 @@ public: /// void printTable(ostream & os); /// - void pushTable(keyword_item * tab, int num); + void pushTable(LexerKeyword * tab, int num); /// void popTable(); /// @@ -89,7 +89,7 @@ public: /// string name; /// - keyword_item * table; + LexerKeyword * table; /// int no_items; /// @@ -116,10 +116,10 @@ private: PushedTable() : table_elem(0), table_siz(0) {} /// - PushedTable(keyword_item * ki, int siz) + PushedTable(LexerKeyword * ki, int siz) : table_elem(ki), table_siz(siz) {} /// - keyword_item * table_elem; + LexerKeyword * table_elem; /// int table_siz; }; @@ -132,10 +132,10 @@ private: namespace { class CompareTags - : public binary_function { + : public binary_function { public: // used by lower_bound, sort and sorted - bool operator()(keyword_item const & a, keyword_item const & b) const + bool operator()(LexerKeyword const & a, LexerKeyword const & b) const { // we use the ascii version, because in turkish, 'i' // is not the lowercase version of 'I', and thus @@ -147,7 +147,7 @@ public: } // end of anon namespace -Lexer::Pimpl::Pimpl(keyword_item * tab, int num) +Lexer::Pimpl::Pimpl(LexerKeyword * tab, int num) : is(&fb_), table(tab), no_items(num), status(0), lineno(0), commentChar('#') { @@ -204,7 +204,7 @@ void Lexer::Pimpl::verifyTable() } -void Lexer::Pimpl::pushTable(keyword_item * tab, int num) +void Lexer::Pimpl::pushTable(LexerKeyword * tab, int num) { PushedTable tmppu(table, no_items); pushed.push(tmppu); @@ -482,8 +482,8 @@ bool Lexer::Pimpl::next(bool esc /* = false */) int Lexer::Pimpl::search_kw(char const * const tag) const { - keyword_item search_tag = { tag, 0 }; - keyword_item * res = + LexerKeyword search_tag = { tag, 0 }; + LexerKeyword * res = lower_bound(table, table + no_items, search_tag, CompareTags()); // use the compare_ascii_no_case instead of compare_no_case, @@ -611,11 +611,17 @@ void Lexer::Pimpl::pushToken(string const & pt) // ////////////////////////////////////////////////////////////////////// -Lexer::Lexer(keyword_item * tab, int num) - : pimpl_(new Pimpl(tab, num)) +Lexer::Lexer() + : pimpl_(new Pimpl(0, 0)) {} +void Lexer::init(LexerKeyword * tab, int num) +{ + pimpl_ = new Pimpl(tab, num); +} + + Lexer::~Lexer() { delete pimpl_; @@ -628,13 +634,13 @@ bool Lexer::isOK() const } -void Lexer::setLineNo(int l) +void Lexer::setLineNumber(int l) { pimpl_->lineno = l; } -int Lexer::getLineNo() const +int Lexer::lineNumber() const { return pimpl_->lineno; } @@ -646,7 +652,7 @@ istream & Lexer::getStream() } -void Lexer::pushTable(keyword_item * tab, int num) +void Lexer::pushTable(LexerKeyword * tab, int num) { pimpl_->pushTable(tab, num); } diff --git a/src/Lexer.h b/src/Lexer.h index 46355905b4..c537eabfec 100644 --- a/src/Lexer.h +++ b/src/Lexer.h @@ -24,14 +24,21 @@ namespace lyx { namespace support { class FileName; } -/// -struct keyword_item { - /// +class PushPopHelper; + +/** A helper structure to describe a keyword for the Lexer. + Usually used bundled in C style arrays and passed to the + Lexer using a LexerKeywordTable object. +*/ +struct LexerKeyword +{ + /// the string to be recognized char const * tag; - /// + /// a corresponding numerical id int code; }; + /** Generalized simple lexical analizer. Use the method isOK() to check if there is still data available for lexing. Use one of the the operators void* or ! to test if @@ -53,10 +60,15 @@ struct keyword_item { @see LyXRC.cpp for an example of usage. */ -class Lexer { +class Lexer +{ public: - /// - Lexer(keyword_item *, int); + /// initialize Lexer with no special keywords. + Lexer(); + /// initialize Lexer with a bunch of keywords + template Lexer(LexerKeyword (&table)[N]) + : pimpl_(0) { init(table, N); } + /// ~Lexer(); @@ -73,7 +85,7 @@ public: }; /// stream is open and end of stream is not reached - /// FIXME: test also if pushTok is not empty + /// FIXME: test also if pushToken is not empty /// FIXME: the method should be renamed to something like /// dataAvailable(), in order to reflect the real behavior bool isOK() const; @@ -91,7 +103,7 @@ public: /// std::istream & getStream(); /// Danger! Don't use it unless you know what you are doing. - void setLineNo(int l); + void setLineNumber(int l); /// Change the character that begins a comment. Default is '#' void setCommentChar(char c); @@ -111,8 +123,8 @@ public: /// Push a token, that next token got from lyxlex. void pushToken(std::string const &); - /// - int getLineNo() const; + /// return the current line number + int lineNumber() const; /// int getInteger() const; @@ -139,7 +151,8 @@ public: bool eatLine(); /// Pushes a token list on a stack and replaces it with a new one. - void pushTable(keyword_item *, int); + template void pushTable(LexerKeyword (&table)[N]) + { pushTable(table, N); } /** Pops a token list into void and replaces it with the one now on top of the stack. @@ -173,10 +186,17 @@ public: static std::string const quoteString(std::string const &); private: - /// noncopiable + /// noncopyable Lexer(Lexer const &); void operator=(Lexer const &); + /// + friend class PushPopHelper; + + /// + void init(LexerKeyword *, int); + void pushTable(LexerKeyword *, int); + /// class Pimpl; /// @@ -192,14 +212,18 @@ private: exceptions. @author Lgb */ -class PushPopHelper { +class PushPopHelper +{ public: /// - PushPopHelper(Lexer & lexrc, keyword_item * i, int s) : lex(lexrc) { + PushPopHelper(Lexer & lexrc, LexerKeyword * i, int s) + : lex(lexrc) + { lex.pushTable(i, s); } /// - ~PushPopHelper() { + ~PushPopHelper() + { lex.popTable(); } /// diff --git a/src/LyX.cpp b/src/LyX.cpp index 552b51181b..7dc438a5c8 100644 --- a/src/LyX.cpp +++ b/src/LyX.cpp @@ -979,7 +979,7 @@ bool LyX::readRcFile(string const & name) // Read the ui file `name' bool LyX::readUIFile(string const & name, bool include) { - enum Uitags { + enum { ui_menuset = 1, ui_toolbars, ui_toolbarset, @@ -987,7 +987,7 @@ bool LyX::readUIFile(string const & name, bool include) ui_last }; - struct keyword_item uitags[ui_last - 1] = { + struct LexerKeyword uitags[] = { { "include", ui_include }, { "menuset", ui_menuset }, { "toolbars", ui_toolbars }, @@ -1027,7 +1027,7 @@ bool LyX::readUIFile(string const & name, bool include) uifiles.push_back(name); LYXERR(Debug::INIT, "Found " << name << " in " << ui_path); - Lexer lex(uitags, ui_last - 1); + Lexer lex(uitags); lex.setFile(ui_path); if (!lex.isOK()) { lyxerr << "Unable to set LyXLeX for ui file: " << ui_path diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 4804728f98..2b5be3b4da 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -1487,7 +1487,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) Buffer defaults(fname); istringstream ss(argument); - Lexer lex(0,0); + Lexer lex; lex.setStream(ss); int const unknown_tokens = defaults.readHeader(lex); @@ -1515,7 +1515,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) cur.recordUndoFullDocument(); istringstream ss(argument); - Lexer lex(0,0); + Lexer lex; lex.setStream(ss); int const unknown_tokens = buffer->readHeader(lex); diff --git a/src/LyXRC.cpp b/src/LyXRC.cpp index 28ce4cfaaf..2a189d8b72 100644 --- a/src/LyXRC.cpp +++ b/src/LyXRC.cpp @@ -50,7 +50,7 @@ namespace os = support::os; namespace { // when adding something to this array keep it sorted! -keyword_item lyxrcTags[] = { +LexerKeyword lyxrcTags[] = { { "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND }, { "\\allow_geometry_session", LyXRC::RC_GEOMETRY_SESSION }, { "\\alternate_language", LyXRC::RC_ALT_LANG }, @@ -184,7 +184,7 @@ keyword_item lyxrcTags[] = { { "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR} }; -const int lyxrcCount = sizeof(lyxrcTags) / sizeof(keyword_item); +const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]); } // namespace anon @@ -334,7 +334,7 @@ void oldFontFormat(string & family, string & foundry) int LyXRC::read(FileName const & filename) { - Lexer lexrc(lyxrcTags, lyxrcCount); + Lexer lexrc(lyxrcTags); if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); @@ -349,7 +349,7 @@ int LyXRC::read(FileName const & filename) int LyXRC::read(istream & is) { - Lexer lexrc(lyxrcTags, lyxrcCount); + Lexer lexrc(lyxrcTags); if (lyxerr.debugging(Debug::PARSER)) lexrc.printTable(lyxerr); diff --git a/src/Makefile.am b/src/Makefile.am index 4826fe8226..3ee351240f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -8,7 +8,7 @@ MAINTAINERCLEANFILES += $(srcdir)/config.h.in AM_CPPFLAGS += $(PCH_FLAGS) -I$(top_srcdir)/src $(BOOST_INCLUDES) -SUBDIRS = support frontends tex2lyx client . +SUBDIRS = support frontends tex2lyx client lyxled . EXTRA_DIST = config.h.in \ Section.h \ diff --git a/src/ModuleList.cpp b/src/ModuleList.cpp index 14e2917159..b22f48d8e6 100644 --- a/src/ModuleList.cpp +++ b/src/ModuleList.cpp @@ -90,7 +90,7 @@ bool ModuleList::load() return false; } - Lexer lex(0, 0); + Lexer lex; if (!lex.setFile(real_file)) { lyxerr << "ModuleList::load():" "lyxlex was not able to set file: " diff --git a/src/ParagraphParameters.cpp b/src/ParagraphParameters.cpp index 00b990c7c9..88dd6c6999 100644 --- a/src/ParagraphParameters.cpp +++ b/src/ParagraphParameters.cpp @@ -172,7 +172,7 @@ void ParagraphParameters::leftIndent(Length const & li) void ParagraphParameters::read(string str, bool merge) { istringstream is(str); - Lexer lex(0, 0); + Lexer lex; lex.setStream(is); read(lex, merge); } diff --git a/src/Text.cpp b/src/Text.cpp index 8b7457108d..48d34f76c0 100644 --- a/src/Text.cpp +++ b/src/Text.cpp @@ -135,10 +135,10 @@ void readParToken(Buffer const & buf, Paragraph & par, Lexer & lex, par.params().read(lex); } else if (token == "\\end_layout") { - LYXERR0("Solitary \\end_layout in line " << lex.getLineNo() << "\n" + LYXERR0("Solitary \\end_layout in line " << lex.lineNumber() << "\n" << "Missing \\begin_layout ?"); } else if (token == "\\end_inset") { - LYXERR0("Solitary \\end_inset in line " << lex.getLineNo() << "\n" + LYXERR0("Solitary \\end_inset in line " << lex.lineNumber() << "\n" << "Missing \\begin_inset ?"); } else if (token == "\\begin_inset") { Inset * inset = readInset(lex, buf); @@ -277,7 +277,7 @@ void readParagraph(Buffer const & buf, Paragraph & par, Lexer & lex, || token == "\\end_deeper") { lex.pushToken(token); lyxerr << "Paragraph ended in line " - << lex.getLineNo() << "\n" + << lex.lineNumber() << "\n" << "Missing \\end_layout.\n"; break; } diff --git a/src/Text3.cpp b/src/Text3.cpp index 17b8637323..28ae7995fa 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -154,7 +154,7 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd, bool display) { InsetMathHull * formula = new InsetMathHull; istringstream is(to_utf8(sel)); - Lexer lex(0, 0); + Lexer lex; lex.setStream(is); formula->read(lex); if (formula->getType() == hullNone) diff --git a/src/TextClass.cpp b/src/TextClass.cpp index 3c2afbce3f..2d79a2b755 100644 --- a/src/TextClass.cpp +++ b/src/TextClass.cpp @@ -183,7 +183,7 @@ enum TextClassTags { namespace { - keyword_item textClassTags[] = { + LexerKeyword textClassTags[] = { { "addtopreamble", TC_ADDTOPREAMBLE }, { "classoptions", TC_CLASSOPTIONS }, { "columns", TC_COLUMNS }, @@ -249,7 +249,7 @@ bool TextClass::read(FileName const & filename, ReadType rt) "LabelType No_Label\n" "End"; istringstream ss(s); - Lexer lex(textClassTags, sizeof(textClassTags) / sizeof(textClassTags[0])); + Lexer lex(textClassTags); lex.setStream(ss); Layout lay; lay.setName(emptylayout_); @@ -260,9 +260,8 @@ bool TextClass::read(FileName const & filename, ReadType rt) }; layoutlist_.push_back(lay); } - Lexer lexrc(textClassTags, - sizeof(textClassTags) / sizeof(textClassTags[0])); + Lexer lexrc(textClassTags); lexrc.setFile(filename); ReturnValues retval = read(lexrc, rt); @@ -291,8 +290,7 @@ bool TextClass::validate(std::string const & str) bool TextClass::read(std::string const & str, ReadType rt) { - Lexer lexrc(textClassTags, - sizeof(textClassTags) / sizeof(textClassTags[0])); + Lexer lexrc(textClassTags); istringstream is(str); lexrc.setStream(is); ReturnValues retval = read(lexrc, rt); @@ -622,7 +620,7 @@ TextClass::ReturnValues TextClass::read(Lexer & lexrc, ReadType rt) void TextClass::readTitleType(Lexer & lexrc) { - keyword_item titleTypeTags[] = { + LexerKeyword titleTypeTags[] = { { "commandafter", TITLE_COMMAND_AFTER }, { "environment", TITLE_ENVIRONMENT } }; @@ -649,7 +647,7 @@ void TextClass::readTitleType(Lexer & lexrc) void TextClass::readOutputType(Lexer & lexrc) { - keyword_item outputTypeTags[] = { + LexerKeyword outputTypeTags[] = { { "docbook", DOCBOOK }, { "latex", LATEX }, { "literate", LITERATE } @@ -687,7 +685,7 @@ enum ClassOptionsTags { void TextClass::readClassOptions(Lexer & lexrc) { - keyword_item classOptionsTags[] = { + LexerKeyword classOptionsTags[] = { {"end", CO_END }, {"fontsize", CO_FONTSIZE }, {"header", CO_HEADER }, @@ -695,7 +693,7 @@ void TextClass::readClassOptions(Lexer & lexrc) {"pagestyle", CO_PAGESTYLE } }; - lexrc.pushTable(classOptionsTags, CO_END); + lexrc.pushTable(classOptionsTags); bool getout = false; while (!getout && lexrc.isOK()) { int le = lexrc.lex(); @@ -746,7 +744,7 @@ enum FloatTags { void TextClass::readFloat(Lexer & lexrc) { - keyword_item floatTags[] = { + LexerKeyword floatTags[] = { { "end", FT_END }, { "extension", FT_EXT }, { "guiname", FT_NAME }, @@ -758,7 +756,7 @@ void TextClass::readFloat(Lexer & lexrc) { "type", FT_TYPE } }; - lexrc.pushTable(floatTags, FT_END); + lexrc.pushTable(floatTags); string type; string placement; @@ -858,7 +856,7 @@ enum CounterTags { void TextClass::readCounter(Lexer & lexrc) { - keyword_item counterTags[] = { + LexerKeyword counterTags[] = { { "end", CT_END }, { "labelstring", CT_LABELSTRING }, { "labelstringappendix", CT_LABELSTRING_APPENDIX }, @@ -866,7 +864,7 @@ void TextClass::readCounter(Lexer & lexrc) { "within", CT_WITHIN } }; - lexrc.pushTable(counterTags, CT_END); + lexrc.pushTable(counterTags); docstring name; docstring within; diff --git a/src/ToolbarBackend.cpp b/src/ToolbarBackend.cpp index a406cb48ab..419f0518f4 100644 --- a/src/ToolbarBackend.cpp +++ b/src/ToolbarBackend.cpp @@ -49,6 +49,12 @@ private: ToolbarBackend toolbarbackend; +///////////////////////////////////////////////////////////////////////// +// +// ToolbarItem +// +///////////////////////////////////////////////////////////////////////// + ToolbarItem::ToolbarItem(Type type, FuncRequest const & func, docstring const & label) : type_(type), func_(func), label_(label) { @@ -74,7 +80,7 @@ void ToolbarInfo::add(ToolbarItem const & item) ToolbarInfo & ToolbarInfo::read(Lexer & lex) { - enum tooltags { + enum { TO_COMMAND = 1, TO_ENDTOOLBAR, TO_SEPARATOR, @@ -83,10 +89,9 @@ ToolbarInfo & ToolbarInfo::read(Lexer & lex) TO_TABLEINSERT, TO_POPUPMENU, TO_ICONPALETTE, - TO_LAST }; - struct keyword_item toolTags[TO_LAST - 1] = { + struct LexerKeyword toolTags[] = { { "end", TO_ENDTOOLBAR }, { "iconpalette", TO_ICONPALETTE }, { "item", TO_COMMAND }, @@ -118,7 +123,7 @@ ToolbarInfo & ToolbarInfo::read(Lexer & lex) bool quit = false; - lex.pushTable(toolTags, TO_LAST - 1); + lex.pushTable(toolTags); if (lyxerr.debugging(Debug::PARSER)) lex.printTable(lyxerr); @@ -197,6 +202,12 @@ ToolbarInfo & ToolbarInfo::read(Lexer & lex) +///////////////////////////////////////////////////////////////////////// +// +// ToolbarBackend +// +///////////////////////////////////////////////////////////////////////// + ToolbarBackend::ToolbarBackend() { @@ -206,13 +217,12 @@ ToolbarBackend::ToolbarBackend() void ToolbarBackend::readToolbars(Lexer & lex) { - enum tooltags { + enum { TO_TOOLBAR = 1, TO_ENDTOOLBARSET, - TO_LAST }; - struct keyword_item toolTags[TO_LAST - 1] = { + struct LexerKeyword toolTags[] = { { "end", TO_ENDTOOLBARSET }, { "toolbar", TO_TOOLBAR } }; @@ -223,7 +233,7 @@ void ToolbarBackend::readToolbars(Lexer & lex) << lex.getString() << '\''); } - lex.pushTable(toolTags, TO_LAST - 1); + lex.pushTable(toolTags); if (lyxerr.debugging(Debug::PARSER)) lex.printTable(lyxerr); diff --git a/src/Trans.cpp b/src/Trans.cpp index 241a9c958e..2c25db7039 100644 --- a/src/Trans.cpp +++ b/src/Trans.cpp @@ -169,20 +169,11 @@ bool Trans::isDefined() const } -enum kmaptags_ { +enum { KCOMB = 1, KMOD, KMAP, KXMOD, - K_LAST -}; - - -struct keyword_item kmapTags[K_LAST - 1] = { - {"\\kcomb", KCOMB }, - { "\\kmap", KMAP }, - { "\\kmod", KMOD }, - { "\\kxmod", KXMOD } }; @@ -387,12 +378,19 @@ docstring const Trans::process(char_type c, TransManager & k) int Trans::load(string const & language) { + struct LexerKeyword kmapTags[] = { + {"\\kcomb", KCOMB }, + { "\\kmap", KMAP }, + { "\\kmod", KMOD }, + { "\\kxmod", KXMOD } + }; + FileName const filename = libFileSearch("kbd", language, "kmap"); if (filename.empty()) return -1; freeKeymap(); - Lexer lex(kmapTags, K_LAST - 1); + Lexer lex(kmapTags); lex.setFile(filename); int const res = load(lex); diff --git a/src/frontends/qt4/GuiLog.cpp b/src/frontends/qt4/GuiLog.cpp index a02544dda0..f415c9af09 100644 --- a/src/frontends/qt4/GuiLog.cpp +++ b/src/frontends/qt4/GuiLog.cpp @@ -133,7 +133,7 @@ void GuiLog::updateContents() bool GuiLog::initialiseParams(string const & data) { istringstream is(data); - Lexer lex(0,0); + Lexer lex; lex.setStream(is); string logtype, logfile; diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index 4496ff744c..7867d4a1e9 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -379,11 +379,10 @@ void MenuDefinition::read(Lexer & lex) md_floatlistinsert, md_floatinsert, md_pasterecent, - md_toolbars, - md_last + md_toolbars }; - struct keyword_item menutags[md_last - 1] = { + struct LexerKeyword menutags[] = { { "bookmarks", md_bookmarks }, { "branches", md_branches }, { "charstyles", md_charstyles }, @@ -408,7 +407,7 @@ void MenuDefinition::read(Lexer & lex) { "viewformats", md_viewformats } }; - lex.pushTable(menutags, md_last - 1); + lex.pushTable(menutags); if (lyxerr.debugging(Debug::PARSER)) lex.printTable(lyxerr); @@ -1274,8 +1273,8 @@ void Menus::Impl::macxMenuBarInit(GuiView * view, QMenuBar * qmb) } -void Menus::Impl::expand(MenuDefinition const & frommenu, MenuDefinition & tomenu, - Buffer const * buf) const +void Menus::Impl::expand(MenuDefinition const & frommenu, + MenuDefinition & tomenu, Buffer const * buf) const { if (!tomenu.empty()) tomenu.clear(); @@ -1393,23 +1392,25 @@ MenuDefinition & Menus::Impl::getMenu(QString const & name) return (*it); } + ///////////////////////////////////////////////////////////////////// -// Menus implementation +// +// Menus +// ///////////////////////////////////////////////////////////////////// -Menus::Menus(): d(new Impl) {} +Menus::Menus() : d(new Impl) {} void Menus::read(Lexer & lex) { enum Menutags { - md_menu = 1, + md_menu, md_menubar, md_endmenuset, - md_last }; - struct keyword_item menutags[md_last - 1] = { + struct LexerKeyword menutags[] = { { "end", md_endmenuset }, { "menu", md_menu }, { "menubar", md_menubar } @@ -1421,7 +1422,7 @@ void Menus::read(Lexer & lex) << lex.getString() << '\'' << endl; } - lex.pushTable(menutags, md_last - 1); + lex.pushTable(menutags); if (lyxerr.debugging(Debug::PARSER)) lex.printTable(lyxerr); diff --git a/src/insets/ExternalTemplate.cpp b/src/insets/ExternalTemplate.cpp index f3884f91d6..73a115484d 100644 --- a/src/insets/ExternalTemplate.cpp +++ b/src/insets/ExternalTemplate.cpp @@ -236,21 +236,21 @@ void TemplateManager::readTemplates(FileName const & path) { PathChanger p(path); - enum TemplateTags { + enum { TM_PREAMBLEDEF = 1, TM_PREAMBLEDEF_END, TM_TEMPLATE, TM_TEMPLATE_END }; - keyword_item templatetags[] = { + LexerKeyword templatetags[] = { { "preambledef", TM_PREAMBLEDEF }, { "preambledefend", TM_PREAMBLEDEF_END }, { "template", TM_TEMPLATE }, { "templateend", TM_TEMPLATE_END } }; - Lexer lex(templatetags, TM_TEMPLATE_END); + Lexer lex(templatetags); FileName const filename = libFileSearch("", "external_templates"); if (filename.empty() || !lex.setFile(filename)) { @@ -311,7 +311,7 @@ void add(vector & ids, string const & name) void Template::readTemplate(Lexer & lex) { - enum TemplateOptionTags { + enum { TO_GUINAME = 1, TO_HELPTEXT, TO_INPUTFORMAT, @@ -322,7 +322,7 @@ void Template::readTemplate(Lexer & lex) TO_END }; - keyword_item templateoptiontags[] = { + LexerKeyword templateoptiontags[] = { { "automaticproduction", TO_AUTOMATIC }, { "filefilter", TO_FILTER }, { "format", TO_FORMAT }, @@ -480,7 +480,7 @@ void Template::Format::readFormat(Lexer & lex) FO_END }; - keyword_item formattags[] = { + LexerKeyword formattags[] = { { "formatend", FO_END }, { "option", FO_OPTION }, { "preamble", FO_PREAMBLE }, diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp index 549fdacb83..254f9ea840 100644 --- a/src/insets/InsetBox.cpp +++ b/src/insets/InsetBox.cpp @@ -523,7 +523,7 @@ void InsetBox::string2params(string const & in, InsetBoxParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetBranch.cpp b/src/insets/InsetBranch.cpp index 6770189fa1..33397b71aa 100644 --- a/src/insets/InsetBranch.cpp +++ b/src/insets/InsetBranch.cpp @@ -281,7 +281,7 @@ void InsetBranch::string2params(string const & in, InsetBranchParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetCommand.cpp b/src/insets/InsetCommand.cpp index 6a3a382e55..a7bb9955e3 100644 --- a/src/insets/InsetCommand.cpp +++ b/src/insets/InsetCommand.cpp @@ -198,7 +198,7 @@ bool InsetCommand::string2params(string const & name, string const & in, return false; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string n; diff --git a/src/insets/InsetERT.cpp b/src/insets/InsetERT.cpp index 68147e20d5..137cc76a5f 100644 --- a/src/insets/InsetERT.cpp +++ b/src/insets/InsetERT.cpp @@ -197,7 +197,7 @@ InsetCollapsable::CollapseStatus InsetERT::string2params(string const & in) return status; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index daddd7134a..1d52515746 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -264,7 +264,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) EX_END }; - keyword_item external_tags[] = { + LexerKeyword external_tags[] = { { "\\end_inset", EX_END }, { "boundingBox", EX_BOUNDINGBOX }, { "clip", EX_CLIP }, @@ -883,7 +883,7 @@ void InsetExternal::string2params(string const & in, Buffer const & buffer, return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetFloat.cpp b/src/insets/InsetFloat.cpp index d201a29194..a5657821fa 100644 --- a/src/insets/InsetFloat.cpp +++ b/src/insets/InsetFloat.cpp @@ -452,7 +452,7 @@ void InsetFloat::string2params(string const & in, InsetFloatParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetGraphics.cpp b/src/insets/InsetGraphics.cpp index 39e2019e0d..8b0b212631 100644 --- a/src/insets/InsetGraphics.cpp +++ b/src/insets/InsetGraphics.cpp @@ -961,7 +961,7 @@ void InsetGraphics::string2params(string const & in, Buffer const & buffer, return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetLayout.cpp b/src/insets/InsetLayout.cpp index 9008817649..4a0c35d02c 100644 --- a/src/insets/InsetLayout.cpp +++ b/src/insets/InsetLayout.cpp @@ -39,7 +39,7 @@ InsetLayout::InsetLayout() : enum InsetLayoutTags { - IL_FONT = 1, + IL_FONT, IL_BGCOLOR, IL_DECORATION, IL_FREESPACING, @@ -78,7 +78,7 @@ bool InsetLayout::read(Lexer & lexrc) { name_ = support::subst(lexrc.getDocString(), '_', ' '); - keyword_item elementTags[] = { + LexerKeyword elementTags[] = { { "bgcolor", IL_BGCOLOR }, { "decoration", IL_DECORATION }, { "end", IL_END }, @@ -99,7 +99,7 @@ bool InsetLayout::read(Lexer & lexrc) { "requires", IL_REQUIRES } }; - lexrc.pushTable(elementTags, IL_END); + lexrc.pushTable(elementTags); FontInfo font = inherit_font; labelfont_ = inherit_font; diff --git a/src/insets/InsetListings.cpp b/src/insets/InsetListings.cpp index 348e620b35..d8a06da9c6 100644 --- a/src/insets/InsetListings.cpp +++ b/src/insets/InsetListings.cpp @@ -313,7 +313,7 @@ void InsetListings::string2params(string const & in, if (in.empty()) return; istringstream data(in); - Lexer lex(0, 0); + Lexer lex; lex.setStream(data); // discard "listings", which is only used to determine inset lex.next(); diff --git a/src/insets/InsetNewline.cpp b/src/insets/InsetNewline.cpp index 72f7e13709..40ac72ef4e 100644 --- a/src/insets/InsetNewline.cpp +++ b/src/insets/InsetNewline.cpp @@ -269,7 +269,7 @@ void InsetNewline::string2params(string const & in, InsetNewlineParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetNewpage.cpp b/src/insets/InsetNewpage.cpp index e7b9b0523a..aa9fe900d5 100644 --- a/src/insets/InsetNewpage.cpp +++ b/src/insets/InsetNewpage.cpp @@ -272,7 +272,7 @@ void InsetNewpage::string2params(string const & in, InsetNewpageParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetNote.cpp b/src/insets/InsetNote.cpp index 85aa740bc1..c764f801ee 100644 --- a/src/insets/InsetNote.cpp +++ b/src/insets/InsetNote.cpp @@ -368,7 +368,7 @@ void InsetNote::string2params(string const & in, InsetNoteParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp index f71c0cc10e..a7ada6dc47 100644 --- a/src/insets/InsetSpace.cpp +++ b/src/insets/InsetSpace.cpp @@ -530,7 +530,7 @@ void InsetSpace::string2params(string const & in, InsetSpaceParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetTabular.cpp b/src/insets/InsetTabular.cpp index e2c4bef099..e24a8095bc 100644 --- a/src/insets/InsetTabular.cpp +++ b/src/insets/InsetTabular.cpp @@ -4840,7 +4840,7 @@ void InsetTabular::completionPosAndDim(Cursor const & cur, int & x, int & y, void InsetTabular::string2params(string const & in, InsetTabular & inset) { istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); if (in.empty()) diff --git a/src/insets/InsetVSpace.cpp b/src/insets/InsetVSpace.cpp index b8c5b12e52..c233eb8d1e 100644 --- a/src/insets/InsetVSpace.cpp +++ b/src/insets/InsetVSpace.cpp @@ -255,7 +255,7 @@ void InsetVSpace::string2params(string const & in, VSpace & vspace) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp index df23f0c493..a9f92cedc2 100644 --- a/src/insets/InsetWrap.cpp +++ b/src/insets/InsetWrap.cpp @@ -267,7 +267,7 @@ void InsetWrap::string2params(string const & in, InsetWrapParams & params) return; istringstream data(in); - Lexer lex(0,0); + Lexer lex; lex.setStream(data); string name; diff --git a/src/lyxled/LayoutEditor.cpp b/src/lyxled/LayoutEditor.cpp new file mode 100644 index 0000000000..660c7f9086 --- /dev/null +++ b/src/lyxled/LayoutEditor.cpp @@ -0,0 +1,126 @@ + +#include "LayoutEditor.h" + +#include "ui_MainWindowUi.h" + +#include +#include +#include +#include +#include +#include +#include + + +namespace lyx { + +///////////////////////////////////////////////////////////////////////// +// +// LayoutTree +// +///////////////////////////////////////////////////////////////////////// + +LayoutTree::LayoutTree(QWidget * parent) + : QTreeView(parent) +{} + + +///////////////////////////////////////////////////////////////////////// +// +// LayoutEditor +// +///////////////////////////////////////////////////////////////////////// + +LayoutEditor::LayoutEditor(QWidget * parent) + : QWidget(parent) +{} + + +///////////////////////////////////////////////////////////////////////// +// +// MainWindow +// +///////////////////////////////////////////////////////////////////////// + +MainWindow::MainWindow() +{ + ui_ = new Ui::MainWindow; + ui_->setupUi(this); + + model_ = new QStandardItemModel(this); + view_ = new LayoutTree(this); + view_->setModel(model_); + //setCentralWidget(view_); + + ui_->dockLayoutTree->setWidget(view_); +} + + +MainWindow::~MainWindow() +{ + delete ui_; +} + +static bool isInsensitivelyEqual(QString const & s1, QString const & s2) +{ + return s1.compare(s2, Qt::CaseInsensitive) == 0; +} + +void MainWindow::loadLayoutFile(QString const & fileName) +{ + loadLayoutFile(fileName, model_->invisibleRootItem()); + view_->expandAll(); +} + + +void MainWindow::loadLayoutFile(QString const & fileName, + QStandardItem * parent) +{ + QFile file(fileName); +#if 0 + file.open(QIODevice::ReadOnly); + QString contents = file.readAll(); + file.close(); + qDebug() << "contents: " << contents; +#endif + + file.open(QIODevice::ReadOnly); + + QTextStream ts(&file); + while (!ts.atEnd()) { + QList row; + QString code; + ts >> code; + //qDebug() << "CODE: " << code; + if (code.startsWith('#')) { + QString line = code + ' ' + ts.readLine(); + //row.append(new QStandardItem("Comment")); + //row.append(new QStandardItem(code + ' ' + ts.readLine())); + //parent->appendRow(row); + } else if (isInsensitivelyEqual(code, "Input")) { + QString inputFile; + ts >> inputFile; + QStandardItem * item = new QStandardItem(inputFile); + row.append(item); + parent->appendRow(row); + inputFile = fileName.left(fileName.lastIndexOf('/')) + '/' + inputFile; + qDebug() << "INPUT: " << inputFile; + loadLayoutFile(inputFile, item); + } else if (isInsensitivelyEqual(code, "Style")) { + QString style; + ts >> style; + //while (!ts.atEnd() && !isInsensitivelyEqual(code, "EndStyle")) + // ts >> code; + QStandardItem * item = new QStandardItem(style); + row.append(item); + parent->appendRow(row); + } else { + //row.append(new QStandardItem(code)); + //parent->appendRow(row); + } + } + + file.close(); +} + +} // namespace lyx diff --git a/src/lyxled/LayoutEditor.h b/src/lyxled/LayoutEditor.h new file mode 100644 index 0000000000..9a9eab85fd --- /dev/null +++ b/src/lyxled/LayoutEditor.h @@ -0,0 +1,75 @@ +#ifndef LAYOUTEDITOR_H +#define LAYOUTEDITOR_H + +#include +#include +#include +#include + +class QStandardItem; +class QStandardItemModel; + +namespace Ui { class MainWindow; } + +namespace lyx { + +class LayoutTree; +class LayoutEditor; + +///////////////////////////////////////////////////////////////////////// +// +// LayoutTree +// +///////////////////////////////////////////////////////////////////////// + +class LayoutTree : public QTreeView +{ + Q_OBJECT + +public: + LayoutTree(QWidget * parent); +}; + + +///////////////////////////////////////////////////////////////////////// +// +// LayoutTree +// +///////////////////////////////////////////////////////////////////////// + +class LayoutEditor : public QWidget +{ + Q_OBJECT + +public: + LayoutEditor(QWidget * parent); +}; + + +///////////////////////////////////////////////////////////////////////// +// +// MainWindow +// +///////////////////////////////////////////////////////////////////////// + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + ~MainWindow(); + + void loadLayoutFile(QString const & file); + +public: + void loadLayoutFile(QString const & file, QStandardItem * parent); + + Ui::MainWindow * ui_; + LayoutTree * view_; + QStandardItemModel * model_; +}; + +} // namespace lyx + +#endif // LAYOUTEDITOR_H diff --git a/src/lyxled/Makefile.am b/src/lyxled/Makefile.am new file mode 100644 index 0000000000..51c45d9566 --- /dev/null +++ b/src/lyxled/Makefile.am @@ -0,0 +1,66 @@ +include $(top_srcdir)/config/common.am + +BUILT_SOURCES = $(MOCEDFILES) +#BUILT_SOURCES = $(UIFILES:%.ui=ui_%.h) +#BUILT_SOURCES += Resources.cpp Resources.qrc + +CLEANFILES += $(BUILT_SOURCES) + +######################### Qt stuff ############################# +# Use _() for localization instead of tr() or trUtf8() +UIC4FLAGS=-tr lyx::qt_ + +ui_%.h: ui/%.ui + $(UIC4) $(UIC4FLAGS) $< -o $@ + +MOCEDFILES = $(MOCHEADER:%.h=%_moc.cpp) + +%_moc.cpp: %.h + $(MOC4) -o $@ $< + +#Resources.qrc: Makefile +# echo "" > $@ +# find $(top_srcdir)/lib/images -name '*.png' \ +# | sed -e 's:$(top_srcdir)/lib/\(.*\):&:' \ +# >> $@ +# echo "" >> $@ +# +#Resources.cpp: Resources.qrc +# $(RCC4) $< -name Resources -o $@ + + +######################### LIBRARIES ############################# + +bin_PROGRAMS = lyxled + +lyxled_LDADD = $(QT4_LIB) +lyxled_DEPENDENCIES = $(MOCEDFILES) + +AM_CPPFLAGS += \ + $(QT4_CPPFLAGS) \ + -UQT_NO_KEYWORDS \ + -I$(top_srcdir)/src \ + $(QT4_INCLUDES) + +SOURCEFILES = \ + main.cpp \ + LayoutEditor.cpp \ + LayoutEditor_moc.cpp + +NOMOCHEADER = + +MOCHEADER = \ + LayoutEditor.h + +UIFILES = + +lyxled_SOURCES = \ + $(SOURCEFILES) \ + $(MOCEDFILES) \ + $(MOCHEADER) \ + $(NOMOCHEADER) + +EXTRA_DIST = ui/compile_uic.sh $(UIFILES:%=ui/%) +#EXTRA_DIST = pch.h ui/compile_uic.sh $(UIFILES:%=ui/%) +#BUILT_SOURCES += $(PCH_FILE) +#AM_CPPFLAGS += $(PCH_FLAGS) diff --git a/src/lyxled/lyxled.pro b/src/lyxled/lyxled.pro new file mode 100644 index 0000000000..6256563009 --- /dev/null +++ b/src/lyxled/lyxled.pro @@ -0,0 +1,16 @@ +###################################################################### +# Automatically generated by qmake (2.01a) Tue Apr 1 00:17:55 2008 +###################################################################### + +TEMPLATE = app +TARGET = lyxled +DEPENDPATH += . +INCLUDEPATH += . + +HEADERS += LayoutEditor.h + +SOURCES += \ + LayoutEditor.cpp \ + main.cpp + +FORMS += ui/MainWindowUi.ui diff --git a/src/lyxled/main.cpp b/src/lyxled/main.cpp new file mode 100644 index 0000000000..736aab45cd --- /dev/null +++ b/src/lyxled/main.cpp @@ -0,0 +1,18 @@ + +#include "LayoutEditor.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + lyx::MainWindow led; + QStringList args = app.arguments(); + args.append("/data/lyx/trunk/lib/layouts/amsart.layout"); + for (int i = 1; i != args.size(); ++i) { + led.loadLayoutFile(args[i]); + } + led.show(); + return app.exec(); +} + diff --git a/src/lyxled/ui/MainWindowUi.ui b/src/lyxled/ui/MainWindowUi.ui new file mode 100644 index 0000000000..08e95a794e --- /dev/null +++ b/src/lyxled/ui/MainWindowUi.ui @@ -0,0 +1,80 @@ + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + 0 + 0 + 800 + 31 + + + + + File + + + + + + + + + + + + + + + + 1 + + + + + + New Layout + + + + + Open Layout + + + + + Recent Layouts + + + + + Save Layout + + + + + Save As + + + + + Quit + + + + + + diff --git a/src/mathed/MathParser.cpp b/src/mathed/MathParser.cpp index 1f7db010c1..4a24b3f2ba 100644 --- a/src/mathed/MathParser.cpp +++ b/src/mathed/MathParser.cpp @@ -378,7 +378,7 @@ private: Parser::Parser(Lexer & lexer) - : lineno_(lexer.getLineNo()), pos_(0) + : lineno_(lexer.lineNumber()), pos_(0) { tokenize(lexer.getStream()); lexer.eatLine();