Abdelrazak Younes wrote:
What I mean is that, if I finish my patch, there won't be a need to handle that in lyx2lyx and bug 2992 would basically be a WONTFIX. I am not sure myself what is the best solution. As long as we don't have a GUI for creating layout, supporting non-ASCII style names seems natural because the user won't have to think about the style name and the GUIName of this style.
That would be the attached (untested) patch. I think it makes sense. Opinion? Abdel.
Index: src/BufferView.h =================================================================== --- src/BufferView.h (revision 19003) +++ src/BufferView.h (working copy) @@ -242,7 +242,7 @@ std::string data)> updateDialog; /// This signal is emitted when the layout at the cursor is changed. - boost::signal<void(std::string layout)> layoutChanged; + boost::signal<void(docstring layout)> layoutChanged; private: /// Index: src/CutAndPaste.cpp =================================================================== --- src/CutAndPaste.cpp (revision 19003) +++ src/CutAndPaste.cpp (working copy) @@ -423,7 +423,7 @@ // layouts ParIterator end = par_iterator_end(in); for (ParIterator it = par_iterator_begin(in); it != end; ++it) { - string const name = it->layout()->name(); + docstring const name = it->layout()->name(); bool hasLayout = tclass2.hasLayout(name); if (hasLayout) @@ -435,7 +435,7 @@ docstring const s = bformat( _("Layout had to be changed from\n%1$s to %2$s\n" "because of class conversion from\n%3$s to %4$s"), - from_utf8(name), from_utf8(it->layout()->name()), + name, it->layout()->name(), from_utf8(tclass1.name()), from_utf8(tclass2.name())); // To warn the user that something had to be done. errorlist.push_back(ErrorItem(_("Changed Layout"), s, Index: src/factory.cpp =================================================================== --- src/factory.cpp (revision 19003) +++ src/factory.cpp (working copy) @@ -228,7 +228,7 @@ return new InsetTOC(InsetCommandParams("tableofcontents")); case LFUN_ENVIRONMENT_INSERT: - return new InsetEnvironment(params, to_utf8(cmd.argument())); + return new InsetEnvironment(params, cmd.argument()); #if 0 case LFUN_LIST_INSERT: @@ -491,7 +491,7 @@ inset.reset(new InsetInclude(p)); } else if (tmptok == "Environment") { lex.next(); - inset.reset(new InsetEnvironment(buf.params(), lex.getString())); + inset.reset(new InsetEnvironment(buf.params(), lex.getDocString())); } else if (tmptok == "ERT") { inset.reset(new InsetERT(buf.params())); } else if (tmptok == "listings") { Index: src/frontends/LyXView.cpp =================================================================== --- src/frontends/LyXView.cpp (revision 19003) +++ src/frontends/LyXView.cpp (working copy) @@ -68,7 +68,7 @@ using lyx::frontend::ControlCommandBuffer; -string current_layout; +docstring current_layout; LyXView::LyXView(int id) @@ -462,7 +462,7 @@ } BOOST_ASSERT(work_area_); - string const & layout = work_area_->bufferView().cursor(). + docstring const & layout = work_area_->bufferView().cursor(). innerParagraph().layout()->name(); if (layout != current_layout) { Index: src/frontends/qt4/QDocument.cpp =================================================================== --- src/frontends/qt4/QDocument.cpp (revision 19003) +++ src/frontends/qt4/QDocument.cpp (working copy) @@ -852,7 +852,7 @@ if (toclevel != Layout::NOT_IN_TOC && (*cit)->labeltype == LABEL_COUNTER) { item = new QTreeWidgetItem(numberingModule->tocTW); - item->setText(0, qt_((*cit)->name())); + item->setText(0, toqstr(translateIfPossible((*cit)->name()))); item->setText(1, (toclevel <= depth) ? yes : no); item->setText(2, (toclevel <= toc) ? yes : no); } Index: src/frontends/qt4/QLToolbar.cpp =================================================================== --- src/frontends/qt4/QLToolbar.cpp (revision 19003) +++ src/frontends/qt4/QLToolbar.cpp (working copy) @@ -81,11 +81,11 @@ } -void QLayoutBox::set(string const & layout) +void QLayoutBox::set(docstring const & layout) { TextClass const & tc = getTextClass(owner_); - QString const & name = qt_(tc[layout]->name()); + QString const & name = toqstr(translateIfPossible(tc[layout]->name())); int i = 0; for (; i < combo_->count(); ++i) { @@ -116,7 +116,7 @@ for (; it != end; ++it) { // ignore obsolete entries if ((*it)->obsoleted_by().empty()) - combo_->addItem(qt_((*it)->name())); + combo_->addItem(toqstr(translateIfPossible((*it)->name()))); } // needed to recalculate size hint @@ -152,11 +152,9 @@ void QLayoutBox::selected(const QString & str) { - string const sel = fromqstr(str); - owner_.setFocus(); - layoutSelected(owner_, sel); + layoutSelected(owner_, qstring_to_ucs4(str)); } Index: src/frontends/qt4/QLToolbar.h =================================================================== --- src/frontends/qt4/QLToolbar.h (revision 19003) +++ src/frontends/qt4/QLToolbar.h (working copy) @@ -40,7 +40,7 @@ QLayoutBox(QToolBar *, GuiView &); /// select the right layout in the combox. - void set(std::string const & layout); + void set(docstring const & layout); /// Populate the layout combox. void update(); /// Erase the layout list. Index: src/frontends/Toolbars.cpp =================================================================== --- src/frontends/Toolbars.cpp (revision 19003) +++ src/frontends/Toolbars.cpp (working copy) @@ -292,7 +292,7 @@ } -void Toolbars::setLayout(string const & layout) +void Toolbars::setLayout(docstring const & layout) { if (layout_) layout_->set(layout); @@ -370,16 +370,15 @@ } -void layoutSelected(LyXView & lv, string const & name) +void layoutSelected(LyXView & lv, docstring const & name) { TextClass const & tc = lv.buffer()->params().getTextClass(); TextClass::const_iterator it = tc.begin(); TextClass::const_iterator const end = tc.end(); for (; it != end; ++it) { - string const & itname = (*it)->name(); - // Yes, the lyx::to_utf8(_()) is correct - if (lyx::to_utf8(_(itname)) == name) { + docstring const & itname = (*it)->name(); + if (translateIfPossible(itname) == name) { FuncRequest const func(LFUN_LAYOUT, itname, FuncRequest::TOOLBAR); lv.dispatch(func); Index: src/frontends/Toolbars.h =================================================================== --- src/frontends/Toolbars.h (revision 19003) +++ src/frontends/Toolbars.h (working copy) @@ -37,7 +37,7 @@ public: virtual ~LayoutBox() {} /// Select the correct layout in the combox. - virtual void set(std::string const & layout) = 0; + virtual void set(docstring const & layout) = 0; /// Populate the layout combox. virtual void update() = 0; /// Erase the layout list. @@ -108,7 +108,7 @@ void saveToolbarInfo(); /// Select the right layout in the combox. - void setLayout(std::string const & layout); + void setLayout(docstring const & layout); /** Populate the layout combox - returns whether we did a full * update or not @@ -155,7 +155,7 @@ }; /// Set the layout in the kernel when an entry has been selected -void layoutSelected(LyXView & lv, std::string const & name); +void layoutSelected(LyXView & lv, docstring const & name); } // namespace lyx Index: src/insets/InsetEnvironment.cpp =================================================================== --- src/insets/InsetEnvironment.cpp (revision 19003) +++ src/insets/InsetEnvironment.cpp (working copy) @@ -27,8 +27,8 @@ InsetEnvironment::InsetEnvironment - (BufferParams const & bp, string const & name) - : InsetText(bp), layout_(bp.getTextClass()[name]), name_(from_utf8(name)) + (BufferParams const & bp, docstring const & name) + : InsetText(bp), layout_(bp.getTextClass()[name]), name_(name) { setAutoBreakRows(true); setDrawFrame(true); Index: src/insets/InsetEnvironment.h =================================================================== --- src/insets/InsetEnvironment.h (revision 19003) +++ src/insets/InsetEnvironment.h (working copy) @@ -21,7 +21,7 @@ class InsetEnvironment : public InsetText { public: /// - InsetEnvironment(BufferParams const &, std::string const & name); + InsetEnvironment(BufferParams const &, docstring const & name); /// docstring name() const { return name_; } /// Index: src/LaTeXFeatures.cpp =================================================================== --- src/LaTeXFeatures.cpp (revision 19003) +++ src/LaTeXFeatures.cpp (working copy) @@ -254,7 +254,7 @@ } -void LaTeXFeatures::useLayout(string const & layoutname) +void LaTeXFeatures::useLayout(docstring const & layoutname) { // Some code to avoid loops in dependency definition static int level = 0; @@ -262,15 +262,15 @@ if (level > maxlevel) { lyxerr << "LaTeXFeatures::useLayout: maximum level of " << "recursion attained by layout " - << layoutname << endl; + << to_utf8(layoutname) << endl; return; } TextClass const & tclass = params_.getTextClass(); if (tclass.hasLayout(layoutname)) { // Is this layout already in usedLayouts? - list<string>::const_iterator cit = usedLayouts_.begin(); - list<string>::const_iterator end = usedLayouts_.end(); + list<docstring>::const_iterator cit = usedLayouts_.begin(); + list<docstring>::const_iterator end = usedLayouts_.end(); for (; cit != end; ++cit) { if (layoutname == *cit) return; @@ -285,7 +285,7 @@ usedLayouts_.push_back(layoutname); } else { lyxerr << "LaTeXFeatures::useLayout: layout `" - << layoutname << "' does not exist in this class" + << to_utf8(layoutname) << "' does not exist in this class" << endl; } @@ -712,8 +712,8 @@ tcpreamble << tclass.preamble(); - list<string>::const_iterator cit = usedLayouts_.begin(); - list<string>::const_iterator end = usedLayouts_.end(); + list<docstring>::const_iterator cit = usedLayouts_.begin(); + list<docstring>::const_iterator end = usedLayouts_.end(); for (; cit != end; ++cit) { tcpreamble << tclass[*cit]->preamble(); } Index: src/LaTeXFeatures.h =================================================================== --- src/LaTeXFeatures.h (revision 19003) +++ src/LaTeXFeatures.h (working copy) @@ -91,7 +91,7 @@ /// std::set<std::string> getEncodingSet(std::string const & doc_encoding) const; /// - void useLayout(std::string const & lyt); + void useLayout(docstring const & lyt); /// Buffer const & buffer() const; /// @@ -104,7 +104,7 @@ OutputParams const & runparams() const { return runparams_; } private: - std::list<std::string> usedLayouts_; + std::list<docstring> usedLayouts_; /// Static preamble bits from the external material insets typedef std::list<std::string> FeaturesList; Index: src/Layout.cpp =================================================================== --- src/Layout.cpp (revision 19003) +++ src/Layout.cpp (working copy) @@ -212,16 +212,16 @@ case LT_COPYSTYLE: // initialize with a known style if (lexrc.next()) { - string const style = subst(lexrc.getString(), + docstring const style = subst(lexrc.getDocString(), '_', ' '); if (tclass.hasLayout(style)) { - string const tmpname = name_; + docstring const tmpname = name_; this->operator=(*tclass[style]); name_ = tmpname; } else { lyxerr << "Cannot copy unknown style `" - << style << "'\n" + << to_utf8(style) << "'\n" << "All layouts so far:" << endl; TextClass::const_iterator it = @@ -229,7 +229,7 @@ TextClass::const_iterator end = tclass.end(); for (; it != end; ++it) { - lyxerr << (*it)->name() + lyxerr << to_utf8((*it)->name()) << endl; } @@ -241,16 +241,17 @@ case LT_OBSOLETEDBY: // replace with a known style if (lexrc.next()) { - string const style = lexrc.getString(); + docstring const style = lexrc.getDocString(); if (tclass.hasLayout(style)) { - string const tmpname = name_; + docstring const tmpname = name_; this->operator=(*tclass[style]); name_ = tmpname; if (obsoleted_by().empty()) obsoleted_by_ = style; } else { - lyxerr << "Cannot replace with unknown style `" << style << '\'' << endl; + lyxerr << "Cannot replace with unknown style `" + << to_utf8(style) << '\'' << endl; //lexrc.printError("Cannot replace with" // " unknown style " @@ -261,7 +262,7 @@ case LT_DEPENDSON: if (lexrc.next()) - depends_on_ = lexrc.getString(); + depends_on_ = lexrc.getDocString(); break; case LT_MARGIN: // margin style definition. @@ -797,33 +798,34 @@ } -string const & Layout::name() const +docstring const & Layout::name() const { return name_; } -void Layout::setName(string const & n) +void Layout::setName(docstring const & n) { name_ = n; } -string const & Layout::obsoleted_by() const +docstring const & Layout::obsoleted_by() const { return obsoleted_by_; } -string const & Layout::depends_on() const +docstring const & Layout::depends_on() const { return depends_on_; } + Layout * Layout::forCaption() { Layout * lay = new Layout(); - lay->name_ = "Caption"; + lay->name_ = from_ascii("Caption"); lay->latexname_ = "caption"; lay->latextype = LATEX_COMMAND; lay->optionalargs = 1; Index: src/Layout.h =================================================================== --- src/Layout.h (revision 19003) +++ src/Layout.h (working copy) @@ -188,13 +188,13 @@ /// void readSpacing(Lexer &); /// - std::string const & name() const; + docstring const & name() const; /// - void setName(std::string const & n); + void setName(docstring const & n); /// - std::string const & obsoleted_by() const; + docstring const & obsoleted_by() const; /// - std::string const & depends_on() const; + docstring const & depends_on() const; /// std::string const & latexname() const { return latexname_; } /// @@ -345,19 +345,19 @@ private: /// Name of the layout/paragraph environment - std::string name_; + docstring name_; /** Name of an layout that has replaced this layout. This is used to rename a layout, while keeping backward compatibility */ - std::string obsoleted_by_; + docstring obsoleted_by_; /** Name of an layout which preamble must come before this one This is used when the preamble snippet uses macros defined in another preamble */ - std::string depends_on_; + docstring depends_on_; /// LaTeX name for environment std::string latexname_; Index: src/output_plaintext.cpp =================================================================== --- src/output_plaintext.cpp (revision 19003) +++ src/output_plaintext.cpp (working copy) @@ -89,7 +89,7 @@ depth_type depth = par.params().depth(); // First write the layout - string const & tmp = par.layout()->name(); + string const tmp = to_utf8(par.layout()->name()); if (compare_ascii_no_case(tmp, "itemize") == 0) { ltype = 1; ltype_depth = depth + 1; Index: src/Paragraph.cpp =================================================================== --- src/Paragraph.cpp (revision 19003) +++ src/Paragraph.cpp (working copy) @@ -1110,7 +1110,7 @@ } // First write the layout - os << "\n\\begin_layout " << layout()->name() << '\n'; + os << "\n\\begin_layout " << to_utf8(layout()->name()) << '\n'; params().write(os); @@ -1640,8 +1640,7 @@ size_t const j = fmt.find('@', i + 1); if (j != docstring::npos) { docstring parent(fmt, i + 1, j - i - 1); - // FIXME UNICODE - docstring label = expandLabel(tclass[to_utf8(parent)], bparams); + docstring label = expandLabel(tclass[parent], bparams); fmt = docstring(fmt, 0, i) + label + docstring(fmt, j + 1, docstring::npos); } } Index: src/tex2lyx/Context.cpp =================================================================== --- src/tex2lyx/Context.cpp (revision 19003) +++ src/tex2lyx/Context.cpp (working copy) @@ -28,7 +28,7 @@ void begin_layout(ostream & os, Layout_ptr layout, TeXFont const & font, TeXFont const & normalfont) { - os << "\n\\begin_layout " << layout->name() << "\n"; + os << "\n\\begin_layout " << to_utf8(layout->name()) << "\n"; // FIXME: This is not enough for things like // \\Huge par1 \\par par2 output_font_change(os, normalfont, font); @@ -231,8 +231,8 @@ if (!extra_stuff.empty()) os << "extrastuff=[" << extra_stuff << "] "; os << "textclass=" << textclass.name() - << " layout=" << layout->name() - << " parent_layout=" << parent_layout->name() << "] font=[" + << " layout=" << to_utf8(layout->name()) + << " parent_layout=" << to_utf8(parent_layout->name()) << "] font=[" << font.size << ' ' << font.family << ' ' << font.series << ' ' << font.shape << ']' << endl; } Index: src/tex2lyx/text.cpp =================================================================== --- src/tex2lyx/text.cpp (revision 19003) +++ src/tex2lyx/text.cpp (working copy) @@ -1051,7 +1051,7 @@ } if (!scrap || !context.new_layout_allowed || - !context.textclass.hasLayout("Scrap")) { + !context.textclass.hasLayout(from_ascii("Scrap"))) { cerr << "Warning: Could not interpret '" << name << "'. Ignoring it." << endl; return; @@ -1064,7 +1064,8 @@ // noweb code chunks are implemented with a layout style in LyX they // always must be in an own paragraph. context.new_paragraph(os); - Context newcontext(true, context.textclass, context.textclass["Scrap"]); + Context newcontext(true, context.textclass, + context.textclass[from_ascii("Scrap")]); newcontext.check_layout(os); os << name; while (p.good()) { Index: src/Text.cpp =================================================================== --- src/Text.cpp (revision 19003) +++ src/Text.cpp (working copy) @@ -118,7 +118,7 @@ #endif } else if (token == "\\begin_layout") { lex.eatLine(); - string layoutname = lex.getString(); + docstring layoutname = lex.getDocString(); font = Font(Font::ALL_INHERIT, bp.language); change = Change(Change::UNCHANGED); @@ -134,7 +134,7 @@ if (!hasLayout) { errorList.push_back(ErrorItem(_("Unknown layout"), bformat(_("Layout '%1$s' does not exist in textclass '%2$s'\nTrying to use the default instead.\n"), - from_utf8(layoutname), from_utf8(tclass.name())), par.id(), 0, par.size())); + layoutname, from_utf8(tclass.name())), par.id(), 0, par.size())); layoutname = tclass.defaultLayoutName(); } Index: src/Text.h =================================================================== --- src/Text.h (revision 19003) +++ src/Text.h (working copy) @@ -81,10 +81,10 @@ /// set layout over selection void setLayout(Buffer const & buffer, pit_type start, pit_type end, - std::string const & layout); + docstring const & layout); /// Set given layout to current cursor position. /// FIXME: replace Cursor with DocIterator. - void setLayout(Cursor & cur, std::string const & layout); + void setLayout(Cursor & cur, docstring const & layout); /// what type of depth change to make enum DEPTH_CHANGE { Index: src/Text2.cpp =================================================================== --- src/Text2.cpp (revision 19003) +++ src/Text2.cpp (working copy) @@ -358,7 +358,7 @@ void Text::setLayout(Buffer const & buffer, pit_type start, pit_type end, - string const & layout) + docstring const & layout) { BOOST_ASSERT(start != end); @@ -376,7 +376,7 @@ // set layout over selection and make a total rebreak of those paragraphs -void Text::setLayout(Cursor & cur, string const & layout) +void Text::setLayout(Cursor & cur, docstring const & layout) { BOOST_ASSERT(this == cur.text()); // special handling of new environment insets @@ -385,7 +385,7 @@ Layout_ptr const & lyxlayout = params.getTextClass()[layout]; if (lyxlayout->is_environment) { // move everything in a new environment inset - LYXERR(Debug::DEBUG) << "setting layout " << layout << endl; + LYXERR(Debug::DEBUG) << "setting layout " << to_utf8(layout) << endl; lyx::dispatch(FuncRequest(LFUN_LINE_BEGIN)); lyx::dispatch(FuncRequest(LFUN_LINE_END_SELECT)); lyx::dispatch(FuncRequest(LFUN_CUT)); Index: src/Text3.cpp =================================================================== --- src/Text3.cpp (revision 19003) +++ src/Text3.cpp (working copy) @@ -90,7 +90,7 @@ using std::ostringstream; -extern string current_layout; +extern docstring current_layout; namespace { @@ -882,12 +882,12 @@ break; case LFUN_SERVER_GET_LAYOUT: - cur.message(from_utf8(cur.paragraph().layout()->name())); + cur.message(cur.paragraph().layout()->name()); break; case LFUN_LAYOUT: { - string layout = to_ascii(cmd.argument()); - LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << layout << endl; + docstring layout = cmd.argument(); + LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << to_utf8(layout) << endl; // Derive layout number from given argument (string) // and current buffer's textclass (number) @@ -898,7 +898,7 @@ // If the entry is obsolete, use the new one instead. if (hasLayout) { - string const & obs = tclass[layout]->obsoleted_by(); + docstring const & obs = tclass[layout]->obsoleted_by(); if (!obs.empty()) layout = obs; } Index: src/TextClass.cpp =================================================================== --- src/TextClass.cpp (revision 19003) +++ src/TextClass.cpp (working copy) @@ -53,7 +53,7 @@ class LayoutNamesEqual : public std::unary_function<Layout_ptr, bool> { public: - LayoutNamesEqual(string const & name) + LayoutNamesEqual(docstring const & name) : name_(name) {} bool operator()(Layout_ptr const & c) const @@ -61,7 +61,7 @@ return c->name() == name_; } private: - string name_; + docstring name_; }; @@ -127,7 +127,7 @@ bool TextClass::do_readStyle(Lexer & lexrc, Layout & lay) { - LYXERR(Debug::TCLASS) << "Reading style " << lay.name() << endl; + LYXERR(Debug::TCLASS) << "Reading style " << to_utf8(lay.name()) << endl; if (!lay.read(lexrc, *this)) { // Resolve fonts lay.resfont = lay.font; @@ -136,7 +136,7 @@ lay.reslabelfont.realize(defaultfont()); return false; // no errors } - lyxerr << "Error parsing style `" << lay.name() << '\'' << endl; + lyxerr << "Error parsing style `" << to_utf8(lay.name()) << '\'' << endl; return true; } @@ -271,7 +271,7 @@ case TC_DEFAULTSTYLE: if (lexrc.next()) { - string const name = subst(lexrc.getString(), + docstring const name = subst(lexrc.getDocString(), '_', ' '); defaultlayout_ = name; } @@ -280,7 +280,7 @@ case TC_ENVIRONMENT: case TC_STYLE: if (lexrc.next()) { - string const name = subst(lexrc.getString(), + docstring const name = subst(lexrc.getDocString(), '_', ' '); if (hasLayout(name)) { Layout * lay = operator[](name).get(); @@ -313,11 +313,11 @@ case TC_NOSTYLE: if (lexrc.next()) { - string const style = subst(lexrc.getString(), + docstring const style = subst(lexrc.getDocString(), '_', ' '); if (!delete_layout(style)) lyxerr << "Cannot delete style `" - << style << '\'' << endl; + << to_utf8(style) << '\'' << endl; // lexrc.printError("Cannot delete style" // " `$$Token'"); } @@ -850,9 +850,9 @@ } -bool TextClass::hasLayout(string const & n) const +bool TextClass::hasLayout(docstring const & n) const { - string const name = (n.empty() ? defaultLayoutName() : n); + docstring const name = (n.empty() ? defaultLayoutName() : n); return find_if(layoutlist_.begin(), layoutlist_.end(), LayoutNamesEqual(name)) @@ -861,7 +861,7 @@ -Layout_ptr const & TextClass::operator[](string const & name) const +Layout_ptr const & TextClass::operator[](docstring const & name) const { BOOST_ASSERT(!name.empty()); @@ -871,12 +871,12 @@ LayoutNamesEqual(name)); if (cit == layoutlist_.end()) { - lyxerr << "We failed to find the layout '" << name + lyxerr << "We failed to find the layout '" << to_utf8(name) << "' in the layout list. You MUST investigate!" << endl; for (LayoutList::const_iterator it = layoutlist_.begin(); it != layoutlist_.end(); ++it) - lyxerr << " " << it->get()->name() << endl; + lyxerr << " " << to_utf8(it->get()->name()) << endl; // we require the name to exist BOOST_ASSERT(false); @@ -887,7 +887,7 @@ -bool TextClass::delete_layout(string const & name) +bool TextClass::delete_layout(docstring const & name) { if (name == defaultLayoutName()) return false; @@ -959,7 +959,7 @@ } -string const & TextClass::defaultLayoutName() const +docstring const & TextClass::defaultLayoutName() const { // This really should come from the actual layout... (Lgb) return defaultlayout_; Index: src/TextClass.h =================================================================== --- src/TextClass.h (revision 19003) +++ src/TextClass.h (working copy) @@ -83,10 +83,10 @@ /// void readCounter(Lexer &); /// - bool hasLayout(std::string const & name) const; + bool hasLayout(docstring const & name) const; /// - Layout_ptr const & operator[](std::string const & vname) const; + Layout_ptr const & operator[](docstring const & vname) const; /// Sees to that the textclass structure has been loaded bool load(std::string const & path = std::string()) const; @@ -104,7 +104,7 @@ /// Retrieve element of name s: CharStyles::iterator charstyle(std::string const & s) const; /// - std::string const & defaultLayoutName() const; + docstring const & defaultLayoutName() const; /// Layout_ptr const & defaultLayout() const; /// @@ -172,7 +172,7 @@ bool hasTocLevels() const; private: /// - bool delete_layout(std::string const &); + bool delete_layout(docstring const &); /// bool do_readStyle(Lexer &, Layout &); /// Layout file name @@ -192,7 +192,7 @@ /// std::string class_header_; /// - std::string defaultlayout_; + docstring defaultlayout_; /// preamble text to support layout styles docstring preamble_; /// latex packages loaded by document class.