Georg, I have updated your patch as you can see in the attachments. I find this way easier. I think you will find it easier to review, too.
The draft documentations is also attached. I have written it considering the new User Guide (UserGuideNV.lyx). Consider this as the section 5.8. And, don't worry, I am following the lyx-devel list. Altough, it is difficult to read 30+ mails everyday :). regards, Ugras
Index: src/LyXAction.C =================================================================== --- src/LyXAction.C (Revision 15688) +++ src/LyXAction.C (Arbeitskopie) @@ -366,6 +366,8 @@ void LyXAction::init() { LFUN_WINDOW_NEW, "window-new", NoBuffer }, { LFUN_WINDOW_CLOSE, "window-close", NoBuffer }, { LFUN_UNICODE_INSERT, "unicode-insert", Noop }, + { LFUN_NOMENCL_INSERT, "nomencl-insert", Noop }, + { LFUN_NOMENCL_PRINT, "nomencl-print", Noop }, { LFUN_NOACTION, "", Noop } }; Index: src/LaTeXFeatures.C =================================================================== --- src/LaTeXFeatures.C (Revision 15688) +++ src/LaTeXFeatures.C (Arbeitskopie) @@ -386,6 +386,11 @@ string const LaTeXFeatures::getPackages( if (isRequired("xy")) packages << "\\usepackage[all]{xy}\n"; + if (isRequired("nomencl")) { + packages << "\\usepackage{nomencl}\n" + << "\\makeglossary\n"; + } + return packages.str(); } Index: src/insets/insetnomencl.h =================================================================== --- src/insets/insetnomencl.h (Revision 0) +++ src/insets/insetnomencl.h (Revision 0) @@ -0,0 +1,68 @@ +// -*- C++ -*- +/** + * \file insetnomencl.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of Lars Gullik Bjnnes. Thanks Lars) + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef INSET_NOMENCL_H +#define INSET_NOMENCL_H + + +#include "insetcommand.h" + + +namespace lyx { + +class LaTeXFeatures; + +/** Used to insert notation labels + */ +class InsetNomencl : public InsetCommand { +public: + /// + InsetNomencl(InsetCommandParams const &); + /// + docstring const getScreenLabel(Buffer const &) const; + /// + EDITABLE editable() const { return IS_EDITABLE; } + /// + InsetBase::Code lyxCode() const; + /// + int docbook(Buffer const &, odocstream &, + OutputParams const &) const; +private: + virtual std::auto_ptr<InsetBase> doClone() const { + return std::auto_ptr<InsetBase>(new InsetNomencl(params())); + } +}; + + +class InsetPrintNomencl : public InsetCommand { +public: + /// + InsetPrintNomencl(InsetCommandParams const &); + /// Updates needed features for this inset. + void validate(LaTeXFeatures & features) const; + /// + EDITABLE editable() const { return NOT_EDITABLE; } + /// + InsetBase::Code lyxCode() const; + /// + bool display() const { return true; } + /// + docstring const getScreenLabel(Buffer const &) const; +private: + virtual std::auto_ptr<InsetBase> doClone() const { + return std::auto_ptr<InsetBase>(new InsetPrintNomencl(params())); + } +}; + + +} // namespace lyx + +#endif Index: src/insets/insetbase.h =================================================================== --- src/insets/insetbase.h (Revision 15688) +++ src/insets/insetbase.h (Arbeitskopie) @@ -322,7 +322,11 @@ public: /// VSPACE_CODE, /// - MATHMACROARG_CODE + MATHMACROARG_CODE, + /// + NOMENCL_CODE, // 45 + /// + NOMENCL_PRINT_CODE }; /** returns the Code corresponding to the \c name. Index: src/insets/insetcommandparams.C =================================================================== --- src/insets/insetcommandparams.C (Revision 15688) +++ src/insets/insetcommandparams.C (Arbeitskopie) @@ -109,14 +109,23 @@ InsetCommandParams::findInfo(std::string return &info; } - // InsetIndex, InsetPrintIndex, InsetLabel - if (name == "index" || name == "printindex" || name == "label") { + // InsetIndex, InsetPrintIndex, InsetLabel, InsetPrintNomencl + if (name == "index" || name == "printindex" || name == "label" || + name == "printglossary") { static const char * const paramnames[] = {"name", ""}; static const bool isoptional[] = {false}; static const CommandInfo info = {1, paramnames, isoptional}; return &info; } + // InsetNomencl + if (name == "nomenclature") { + static const char * const paramnames[] = {"sortas", "name", "explanation", ""}; + static const bool isoptional[] = {true, false, false}; + static const CommandInfo info = {3, paramnames, isoptional}; + return &info; + } + // InsetRef if (name == "eqref" || name == "pageref" || name == "vpageref" || name == "vref" || name == "prettyref" || name == "ref") { Index: src/insets/insetnomencl.C =================================================================== --- src/insets/insetnomencl.C (Revision 0) +++ src/insets/insetnomencl.C (Revision 0) @@ -0,0 +1,76 @@ +/** + * \file insetnomencl.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of Lars Gullik Bjnnes. Thanks Lars.) + * + * Full author contact details are available in file CREDITS. + */ +#include <config.h> + +#include "insetnomencl.h" + +#include "dispatchresult.h" +#include "funcrequest.h" +#include "gettext.h" +#include "LaTeXFeatures.h" +#include "metricsinfo.h" +#include "sgml.h" + + +namespace lyx { + +using std::string; + + +InsetNomencl::InsetNomencl(InsetCommandParams const & p) + : InsetCommand(p, "nomenclature") +{} + + +docstring const InsetNomencl::getScreenLabel(Buffer const &) const +{ + return _("Not"); +} + + +int InsetNomencl::docbook(Buffer const &, odocstream & os, + OutputParams const &) const +{ + return 0; +} + + +InsetBase::Code InsetNomencl::lyxCode() const +{ + return InsetBase::NOMENCL_CODE; +} + + +InsetPrintNomencl::InsetPrintNomencl(InsetCommandParams const & p) + : InsetCommand(p, string()) +{} + + +docstring const InsetPrintNomencl::getScreenLabel(Buffer const &) const +{ + return _("Notation"); +} + + +void InsetPrintNomencl::validate(LaTeXFeatures & features) const +{ + features.require("nomencl"); +} + + +InsetBase::Code InsetPrintNomencl::lyxCode() const +{ + return InsetBase::NOMENCL_PRINT_CODE; +} + + +} // namespace lyx Index: src/insets/insetbase.C =================================================================== --- src/insets/insetbase.C (Revision 15688) +++ src/insets/insetbase.C (Arbeitskopie) @@ -63,6 +63,7 @@ static TranslatorMap const build_transla InsetName("accent", InsetBase::ACCENT_CODE), InsetName("math", InsetBase::MATH_CODE), InsetName("index", InsetBase::INDEX_CODE), + InsetName("nomenclature", InsetBase::NOMENCL_CODE), InsetName("include", InsetBase::INCLUDE_CODE), InsetName("graphics", InsetBase::GRAPHICS_CODE), InsetName("bibitem", InsetBase::BIBITEM_CODE), @@ -81,6 +82,7 @@ static TranslatorMap const build_transla InsetName("cite", InsetBase::CITE_CODE), InsetName("float_list", InsetBase::FLOAT_LIST_CODE), InsetName("index_print", InsetBase::INDEX_PRINT_CODE), + InsetName("nomencl_print", InsetBase::NOMENCL_PRINT_CODE), InsetName("optarg", InsetBase::OPTARG_CODE), InsetName("environment", InsetBase::ENVIRONMENT_CODE), InsetName("hfill", InsetBase::HFILL_CODE), Index: src/insets/Makefile.am =================================================================== --- src/insets/Makefile.am (Revision 15688) +++ src/insets/Makefile.am (Arbeitskopie) @@ -85,6 +85,8 @@ libinsets_la_SOURCES = \ insetmarginal.C \ insetnewline.C \ insetnewline.h \ + insetnomencl.C \ + insetnomencl.h \ insetnote.C \ insetnote.h \ insetoptarg.C \ Index: src/factory.C =================================================================== --- src/factory.C (Revision 15688) +++ src/factory.C (Arbeitskopie) @@ -37,6 +37,7 @@ #include "insets/insethfill.h" #include "insets/insetinclude.h" #include "insets/insetindex.h" +#include "insets/insetnomencl.h" #include "insets/insetlabel.h" #include "insets/insetline.h" #include "insets/insetmarginal.h" @@ -171,6 +172,11 @@ InsetBase * createInset(BufferView * bv, return new InsetIndex(icp); } + case LFUN_NOMENCL_INSERT: { + InsetCommandParams icp("nomenclature"); + return new InsetNomencl(icp); + } + case LFUN_TABULAR_INSERT: { if (cmd.argument().empty()) return 0; @@ -195,6 +201,9 @@ InsetBase * createInset(BufferView * bv, case LFUN_INDEX_PRINT: return new InsetPrintIndex(InsetCommandParams("printindex")); + case LFUN_NOMENCL_PRINT: + return new InsetPrintNomencl(InsetCommandParams("printglossary")); + case LFUN_TOC_INSERT: return new InsetTOC(InsetCommandParams("tableofcontents")); @@ -264,6 +273,12 @@ InsetBase * createInset(BufferView * bv, icp); return new InsetIndex(icp); + } else if (name == "nomenclature") { + InsetCommandParams icp(name); + InsetCommandMailer::string2params(name, lyx::to_utf8(cmd.argument()), + icp); + return new InsetNomencl(icp); + } else if (name == "label") { InsetCommandParams icp(name); InsetCommandMailer::string2params(name, to_utf8(cmd.argument()), @@ -369,6 +384,8 @@ InsetBase * readInset(LyXLex & lex, Buff inset.reset(new InsetBibtex(inscmd)); } else if (cmdName == "index") { inset.reset(new InsetIndex(inscmd)); + } else if (cmdName == "nomenclature") { + inset.reset(new InsetNomencl(inscmd)); } else if (cmdName == "include") { inset.reset(new InsetInclude(inscmd)); } else if (cmdName == "label") { @@ -396,6 +413,8 @@ InsetBase * readInset(LyXLex & lex, Buff inset.reset(new InsetFloatList("table")); } else if (cmdName == "printindex") { inset.reset(new InsetPrintIndex(inscmd)); + } else if (cmdName == "printglossary") { + inset.reset(new InsetPrintNomencl(inscmd)); } else { lyxerr << "unknown CommandInset '" << cmdName << "'" << std::endl; Index: src/buffer.C =================================================================== --- src/buffer.C (Revision 15688) +++ src/buffer.C (Arbeitskopie) @@ -142,7 +142,7 @@ using std::string; namespace { -int const LYX_FORMAT = 252; +int const LYX_FORMAT = 253; } // namespace anon Index: src/lyxfunc.C =================================================================== --- src/lyxfunc.C (Revision 15688) +++ src/lyxfunc.C (Arbeitskopie) @@ -1249,6 +1249,7 @@ void LyXFunc::dispatch(FuncRequest const name == "label" || name == "ref" || name == "toc" || + name == "nomenclature" || name == "url") { InsetCommandParams p(name); data = InsetCommandMailer::params2string(name, p); @@ -1341,6 +1342,10 @@ void LyXFunc::dispatch(FuncRequest const dispatch(FuncRequest(LFUN_DIALOG_SHOW, "citation")); break; } + case LFUN_NOMENCL_INSERT: { + dispatch(FuncRequest(LFUN_DIALOG_SHOW_NEW_INSET, "nomenclature")); + break; + } case LFUN_BUFFER_CHILD_OPEN: { BOOST_ASSERT(lyx_view_); Index: src/LaTeX.C =================================================================== --- src/LaTeX.C (Revision 15688) +++ src/LaTeX.C (Arbeitskopie) @@ -158,6 +158,10 @@ void LaTeX::deleteFilesOnError() const string const ind = changeExtension(ofname, ".ind"); unlink(ind); + // nomencl file + string const gls = changeExtension(ofname, ".gls"); + unlink(gls); + // Also remove the aux file string const aux = changeExtension(ofname, ".aux"); unlink(aux); @@ -283,6 +287,12 @@ int LaTeX::run(TeXErrors & terr) message(_("Running MakeIndex.")); rerun |= runMakeIndex(onlyFilename(changeExtension(file, ".idx")), runparams); } + if (head.haschanged(onlyFilename(changeExtension(file, ".glo")))) { + lyxerr[Debug::LATEX] << "Running MakeIndex for nomencl." << endl; + message(_("Running Makeindex for nomencl.")); + string const nomenclstr = " -s nomencl.ist -o " + changeExtension(file, ".gls"); + rerun |= runMakeIndex(onlyFilename(changeExtension(file, ".glo")), runparams, nomenclstr); + } // run bibtex // if (scanres & UNDEF_CIT || scanres & RERUN || run_bibtex) @@ -352,6 +362,14 @@ int LaTeX::run(TeXErrors & terr) rerun = runMakeIndex(onlyFilename(changeExtension(file, ".idx")), runparams); } + // I am not pretty sure if need this twice. + if (head.haschanged(onlyFilename(changeExtension(file, ".glo")))) { + lyxerr[Debug::LATEX] << "Running MakeIndex for nomencl." << endl; + message(_("Running Makeindex for nomencl. ")); + string nomenclstr = " -s nomencl.ist -o " + changeExtension(file, ".gls"); + rerun |= runMakeIndex(onlyFilename(changeExtension(file, ".glo")), runparams, nomenclstr); + } + // 2 // we will only run latex more if the log file asks for it. // or if the sumchange() is true. @@ -396,13 +414,17 @@ int LaTeX::startscript() } -bool LaTeX::runMakeIndex(string const & f, OutputParams const & runparams) +bool LaTeX::runMakeIndex(string const & f, OutputParams const & runparams, + string const & params) { - lyxerr[Debug::LATEX] << "idx file has been made," - " running makeindex on file " << f << endl; - string tmp = lyxrc.index_command + " "; + lyxerr[Debug::LATEX] + << "idx file has been made, running makeindex on file " + << f << endl; + string tmp = lyxrc.index_command + ' '; + tmp = subst(tmp, "$$lang", runparams.document_language); tmp += quoteName(f); + tmp += params; Systemcall one; one.startscript(Systemcall::Wait, tmp); return true; @@ -712,7 +734,7 @@ void handleFoundFile(string const & ff, // (2) foundfile is in the tmpdir // insert it into head if (fs::exists(onlyfile)) { - static regex unwanted("^.*\\.(aux|log|dvi|bbl|ind|glo)$"); + static regex unwanted("^.*\\.(aux|log|dvi|bbl|ind)$"); if (regex_match(onlyfile, unwanted)) { lyxerr[Debug::DEPEND] << "We don't want " @@ -761,6 +783,7 @@ void LaTeX::deplog(DepTable & head) // but instead only a line like this into the log: // Writing index file sample.idx static regex reg5("Writing index file ([^ ]+).*"); + static regex regnomencl("Writing glossary file ([^ ]+).*"); // If a toc should be created, MikTex does not write a line like // \openout# = `sample.toc'. // but only a line like this into the log: @@ -809,6 +832,8 @@ void LaTeX::deplog(DepTable & head) handleFoundFile(sub.str(1), head); else if (regex_match(token, sub, reg5)) handleFoundFile(sub.str(1), head); + else if (regex_match(token, sub, regnomencl)) + handleFoundFile(sub.str(1), head); else if (regex_match(token, sub, miktexTocReg)) handleFoundFile(changeExtension(file, ".toc"), head); } Index: src/frontends/qt4/QNomenclDialog.h =================================================================== --- src/frontends/qt4/QNomenclDialog.h (Revision 0) +++ src/frontends/qt4/QNomenclDialog.h (Revision 0) @@ -0,0 +1,42 @@ +// -*- C++ -*- +/** + * \file QNomenclDialog.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of John Levon. Thanks John) + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef QNOMENCLDIALOG_H +#define QNOMENCLDIALOG_H + +#include "ui/QNomenclUi.h" + +#include <QDialog> +#include <QCloseEvent> + +namespace lyx { +namespace frontend { + +class QNomencl; + +class QNomenclDialog : public QDialog, public Ui::QNomenclUi { + Q_OBJECT +public: + QNomenclDialog(QNomencl * form); + virtual void show(); +protected Q_SLOTS: + virtual void change_adaptor(); + virtual void reject(); +protected: + virtual void closeEvent(QCloseEvent * e); +private: + QNomencl * form_; +}; + +} // namespace frontend +} // namespace lyx + +#endif // QNOMENCLDIALOG_H Index: src/frontends/qt4/Makefile.dialogs =================================================================== --- src/frontends/qt4/Makefile.dialogs (Revision 15688) +++ src/frontends/qt4/Makefile.dialogs (Arbeitskopie) @@ -37,6 +37,7 @@ UIFILES = \ QViewSourceUi.ui \ QMathUi.ui \ QMathMatrixUi.ui \ + QNomenclUi.ui \ QNoteUi.ui \ QParagraphUi.ui \ QPrefAsciiUi.ui \ @@ -114,6 +115,7 @@ MOCFILES = \ QLPrintDialog.C QLPrintDialog.h \ QMathDialog.C QMathDialog.h \ QMathMatrixDialog.C QMathMatrixDialog.h \ + QNomenclDialog.C QNomenclDialog.h \ QNoteDialog.C QNoteDialog.h \ QParagraphDialog.C QParagraphDialog.h \ QPrefsDialog.C QPrefsDialog.h \ Index: src/frontends/qt4/Makefile.am =================================================================== --- src/frontends/qt4/Makefile.am (Revision 15688) +++ src/frontends/qt4/Makefile.am (Arbeitskopie) @@ -64,6 +64,7 @@ libqt4_la_SOURCES = \ QLPainter.C QLPainter.h \ QLyXKeySym.C QLyXKeySym.h \ QMath.C QMath.h \ + QNomencl.C QNomencl.h \ QNote.C QNote.h \ QParagraph.C QParagraph.h \ QPrefs.C QPrefs.h \ Index: src/frontends/qt4/ui/QNomenclUi.ui =================================================================== --- src/frontends/qt4/ui/QNomenclUi.ui (Revision 0) +++ src/frontends/qt4/ui/QNomenclUi.ui (Revision 0) @@ -0,0 +1,150 @@ +<ui version="4.0" > + <author></author> + <comment></comment> + <exportmacro></exportmacro> + <class>QNomenclUi</class> + <widget class="QDialog" name="QNomenclUi" > + <property name="geometry" > + <rect> + <x>0</x> + <y>0</y> + <width>260</width> + <height>170</height> + </rect> + </property> + <property name="windowTitle" > + <string>QNomenclDialogBase</string> + </property> + <property name="sizeGripEnabled" > + <bool>true</bool> + </property> + <widget class="QWidget" name="layout4" > + <property name="geometry" > + <rect> + <x>10</x> + <y>11</y> + <width>240</width> + <height>149</height> + </rect> + </property> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <layout class="QGridLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="0" column="0" > + <widget class="QLabel" name="keywordLA" > + <property name="text" > + <string/> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="expLA" > + <property name="text" > + <string/> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="sortasLA" > + <property name="text" > + <string/> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QLineEdit" name="keywordED" > + <property name="toolTip" > + <string/> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QLineEdit" name="expED" /> + </item> + <item row="2" column="1" > + <widget class="QLineEdit" name="sortasED" /> + </item> + </layout> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>16</height> + </size> + </property> + </spacer> + </item> + <item> + <layout class="QHBoxLayout" > + <property name="margin" > + <number>0</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Horizontal</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <size> + <width>20</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + <item> + <widget class="QPushButton" name="okPB" > + <property name="text" > + <string>&OK</string> + </property> + <property name="shortcut" > + <string>Alt+O</string> + </property> + <property name="default" > + <bool>true</bool> + </property> + </widget> + </item> + <item> + <widget class="QPushButton" name="closePB" > + <property name="text" > + <string>Cancel</string> + </property> + </widget> + </item> + </layout> + </item> + </layout> + </widget> + </widget> + <layoutdefault spacing="6" margin="11" /> + <pixmapfunction>qPixmapFromMimeSource</pixmapfunction> + <resources/> + <connections/> +</ui> Index: src/frontends/qt4/QNomencl.C =================================================================== --- src/frontends/qt4/QNomencl.C (Revision 0) +++ src/frontends/qt4/QNomencl.C (Revision 0) @@ -0,0 +1,79 @@ +/** + * \file QNomencl.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of John Levon. Thanks John) + * + * Full author contact details are available in file CREDITS. + */ + +#include <config.h> + +#include "debug.h" +#include "ControlCommand.h" +#include "qt_helpers.h" + +#include "QNomenclDialog.h" +#include "QNomencl.h" +#include "Qt2BC.h" +#include "ButtonController.h" +#include <qlabel.h> +#include <qlineedit.h> +#include <qpushbutton.h> + +using std::string; + +namespace lyx { +namespace frontend { + +typedef QController<ControlCommand, QView<QNomenclDialog> > base_class; + + +QNomencl::QNomencl(Dialog & parent, docstring const & title) + : base_class(parent, title) +{ +} + + +void QNomencl::build_dialog() +{ + dialog_.reset(new QNomenclDialog(this)); + + dialog_->keywordLA->setText(qt_("Symbol:")); + dialog_->expLA->setText(qt_("Description:")); + dialog_->sortasLA->setText(qt_("Sort as:")); + + bcview().setOK(dialog_->okPB); + bcview().setCancel(dialog_->closePB); + bcview().addReadOnly(dialog_->keywordED); + bcview().addReadOnly(dialog_->expED); + bcview().addReadOnly(dialog_->sortasED); +} + + +void QNomencl::update_contents() +{ + dialog_->keywordED->setText(toqstr(controller().params()["name"])); + dialog_->expED->setText(toqstr(controller().params()["explanation"])); + dialog_->sortasED->setText(toqstr(controller().params()["sortas"])); + + bc().valid(isValid()); +} + + +void QNomencl::apply() +{ + controller().params()["name"] = qstring_to_ucs4(dialog_->keywordED->text()); + controller().params()["explanation"] = qstring_to_ucs4(dialog_->expED->text()); + controller().params()["sortas"] = qstring_to_ucs4(dialog_->sortasED->text()); +} + + +bool QNomencl::isValid() +{ + return (!dialog_->keywordED->text().isEmpty() && !dialog_->expED->text().isEmpty() ); +} + +} // namespace frontend +} // namespace lyx Index: src/frontends/qt4/QNomencl.h =================================================================== --- src/frontends/qt4/QNomencl.h (Revision 0) +++ src/frontends/qt4/QNomencl.h (Revision 0) @@ -0,0 +1,47 @@ +// -*- C++ -*- +/** + * \file QNomencl.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of John Levon and Kalle Dalheimer. Thanks Guys) + * + * Full author contact details are available in file CREDITS. + */ + +#ifndef QNOMENCL_H +#define QNOMENCL_H + +#include "QDialogView.h" + +namespace lyx { +namespace frontend { + +class ControlCommand; +class QNomenclDialog; + + +class QNomencl : + public QController<ControlCommand, QView<QNomenclDialog> > +{ +public: + friend class QNomenclDialog; + + QNomencl(Dialog &, lyx::docstring const & title); +protected: + virtual bool isValid(); +private: + /// Apply changes + virtual void apply(); + /// update + virtual void update_contents(); + /// build the dialog + virtual void build_dialog(); +}; + +} // namespace frontend +} // namespace lyx + +#endif // QNOMENCL_H Index: src/frontends/qt4/QNomenclDialog.C =================================================================== --- src/frontends/qt4/QNomenclDialog.C (Revision 0) +++ src/frontends/qt4/QNomenclDialog.C (Revision 0) @@ -0,0 +1,69 @@ +/** + * \file QNomenclDialog.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author O. U. BARAN (derived from Index counterpart of John Levon. Thanks John) + * + * Full author contact details are available in file CREDITS. + */ + +#include <config.h> + +#include "qt_helpers.h" + +#include "QNomencl.h" +#include "QNomenclDialog.h" + +#include <QPushButton> +#include <QLineEdit> +#include <QWhatsThis> +#include <QCloseEvent> + +namespace lyx { +namespace frontend { + +QNomenclDialog::QNomenclDialog(QNomencl * form) + : form_(form) +{ + setupUi(this); + + connect(okPB, SIGNAL(clicked()), form, SLOT(slotOK())); + connect(closePB, SIGNAL(clicked()), form, SLOT(slotClose())); + connect(keywordED, SIGNAL(textChanged(const QString&)), + this, SLOT(change_adaptor())); + connect(expED, SIGNAL(textChanged(const QString&)), + this, SLOT(change_adaptor())); + +} + + +void QNomenclDialog::show() +{ + QDialog::show(); + keywordED->setFocus(); +} + + +void QNomenclDialog::change_adaptor() +{ + form_->changed(); +} + + +void QNomenclDialog::reject() +{ + form_->slotClose(); +} + + +void QNomenclDialog::closeEvent(QCloseEvent * e) +{ + form_->slotWMHide(); + e->accept(); +} + +} // namespace frontend +} // namespace lyx + +#include "QNomenclDialog_moc.cpp" Index: src/frontends/qt4/Dialogs.C =================================================================== --- src/frontends/qt4/Dialogs.C (Revision 15688) +++ src/frontends/qt4/Dialogs.C (Arbeitskopie) @@ -61,6 +61,7 @@ #include "QGraphics.h" #include "QInclude.h" #include "QIndex.h" +#include "QNomencl.h" #include "QLog.h" #include "QViewSource.h" #include "QMath.h" @@ -101,7 +102,7 @@ namespace { char const * const dialognames[] = { "aboutlyx", "bibitem", "bibtex", "box", "branch", "changes", "character", "citation", "document", "errorlist", "ert", "external", "file", -"findreplace", "float", "graphics", "include", "index", "label", "log", "view-source", +"findreplace", "float", "graphics", "include", "index", "nomenclature", "label", "log", "mathpanel", "mathdelimiter", "mathmatrix", "note", "paragraph", "prefs", "print", "ref", "sendto", "spellchecker","tabular", "tabularcreate", @@ -109,7 +110,7 @@ char const * const dialognames[] = { "thesaurus", #endif -"texinfo", "toc", "url", "vspace", "wrap" }; +"texinfo", "toc", "url", "view-source", "vspace", "wrap" }; char const * const * const end_dialognames = dialognames + (sizeof(dialognames) / sizeof(char *)); @@ -219,6 +220,12 @@ Dialogs::DialogPtr Dialogs::build(string _("Index Entry"), qt_("&Keyword:"))); dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy); + } else if (name == "nomenclature") { + dialog->setController(new ControlCommand(*dialog, name, name)); + dialog->setView(new QNomencl(*dialog, + _("Notation Entry"))); + dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy); } else if (name == "label") { dialog->setController(new ControlCommand(*dialog, name, name)); dialog->setView(new QIndex(*dialog, Index: src/text3.C =================================================================== --- src/text3.C (Revision 15688) +++ src/text3.C (Arbeitskopie) @@ -1174,6 +1174,7 @@ void LyXText::dispatch(LCursor & cur, Fu } case LFUN_INDEX_PRINT: + case LFUN_NOMENCL_PRINT: case LFUN_TOC_INSERT: case LFUN_HFILL_INSERT: case LFUN_LINE_INSERT: @@ -1550,6 +1551,8 @@ bool LyXText::getStatus(LCursor & cur, F code = InsetBase::INCLUDE_CODE; else if (cmd.argument() == "index") code = InsetBase::INDEX_CODE; + else if (cmd.argument() == "nomenclature") + code = InsetBase::NOMENCL_CODE; else if (cmd.argument() == "label") code = InsetBase::LABEL_CODE; else if (cmd.argument() == "note") @@ -1632,6 +1635,12 @@ bool LyXText::getStatus(LCursor & cur, F case LFUN_INDEX_PRINT: code = InsetBase::INDEX_PRINT_CODE; break; + case LFUN_NOMENCL_INSERT: + code = InsetBase::NOMENCL_CODE; + break; + case LFUN_NOMENCL_PRINT: + code = InsetBase::NOMENCL_PRINT_CODE; + break; case LFUN_TOC_INSERT: code = InsetBase::TOC_CODE; break; Index: src/LaTeX.h =================================================================== --- src/LaTeX.h (Revision 15688) +++ src/LaTeX.h (Arbeitskopie) @@ -161,7 +161,8 @@ private: void deplog(DepTable & head); /// - bool runMakeIndex(std::string const &, OutputParams const &); + bool runMakeIndex(std::string const &, OutputParams const &, + std::string const & = std::string()); /// std::vector<Aux_Info> const scanAuxFiles(std::string const &); Index: src/lfuns.h =================================================================== --- src/lfuns.h (Revision 15688) +++ src/lfuns.h (Arbeitskopie) @@ -374,7 +374,9 @@ enum kb_action { LFUN_UNICODE_INSERT, // Lgb 20061022 // 285 LFUN_BOOKMARK_CLEAR, // bpeng 20061031 - + LFUN_NOMENCL_INSERT, // Ugras + LFUN_NOMENCL_PRINT, // Ugras + LFUN_LASTACTION // end of the table }; Index: lib/lyx2lyx/LyX.py =================================================================== --- lib/lyx2lyx/LyX.py (Revision 15688) +++ lib/lyx2lyx/LyX.py (Arbeitskopie) @@ -73,7 +73,7 @@ format_relation = [("0_06", [200], ge ("1_2", [220], generate_minor_versions("1.2" , 4)), ("1_3", [221], generate_minor_versions("1.3" , 7)), ("1_4", range(222,246), generate_minor_versions("1.4" , 3)), - ("1_5", range(246,253), generate_minor_versions("1.5" , 0))] + ("1_5", range(246,254), generate_minor_versions("1.5" , 0))] def formats_list(): Index: lib/lyx2lyx/lyx_1_5.py =================================================================== --- lib/lyx2lyx/lyx_1_5.py (Revision 15688) +++ lib/lyx2lyx/lyx_1_5.py (Arbeitskopie) @@ -488,6 +488,56 @@ def revert_commandparams(document): i = j + 1 +def revert_nomencl(document): + regex = re.compile(r'(\S+)\s+(.+)') + i = 0 + use_nomencl = 0 + while 1: + i = find_token(document.body, "\\begin_inset LatexCommand nomencl", i) + if i == -1: + break + use_nomencl = 1 + j = find_end_of_inset(document.body, i + 1) + preview_line = "" + name = "" + explanation = "" + sortas = "" + for k in range(i + 1, j): + match = re.match(regex, document.body[k]) + if match: + pname = match.group(1) + pvalue = match.group(2) + if pname == "preview": + preview_line = document.body[k] + elif pname == "name": + name = pvalue.strip('"').replace('\\"', '"') + elif pname == "explanation": + explanation = pvalue.strip('"').replace('\\"', '"') + elif pname == "sortas": + sortas = pvalue.strip('"').replace('\\"', '"') + elif document.body[k].strip() != "": + document.warning("Ignoring unknown contents `%s' in nomencl inset." % document.body[k])) + if sortas == "": + command = 'nomenclature{%s}{%s}' % (name, explanation) + else: + command = 'nomenclature[%s]{%s}{%s}' % (sortas, name, explanation) + document.body[i:j+1] = ['\\begin_inset ERT', + 'status collapsed', + '', + '\\begin_layout %s' % document.default_layout, + '', + '', + '\\backslash', + command, + '\\end_layout', + '', + '\\end_inset'] + i = i + 11 + if use_nomencl: + document.preamble.append('\\usepackage{nomencl}') + document.preamble.append('\\makeglossary') + + ## # Conversion hub # @@ -499,9 +549,11 @@ convert = [[246, []], [249, [convert_utf8]], [250, []], [251, []], - [252, [convert_commandparams, convert_bibitem]]] + [252, [convert_commandparams, convert_bibitem]], + [253, []]] -revert = [[251, [revert_commandparams]], +revert = [[252, [revert_nomencl]], + [251, [revert_commandparams]], [250, [revert_cs_label]], [249, []], [248, [revert_utf8]], Index: lib/ui/stdtoolbars.ui =================================================================== --- lib/ui/stdtoolbars.ui (Revision 15688) +++ lib/ui/stdtoolbars.ui (Arbeitskopie) @@ -76,6 +76,7 @@ Toolbar "extra" "Extra" Item "Insert cross-reference" "dialog-show-new-inset ref" Item "Insert citation" "dialog-show-new-inset citation" Item "Insert index entry" "index-insert" + Item "Insert notation entry" "nomencl-insert" Separator Item "Insert footnote" "footnote-insert" Item "Insert margin note" "marginalnote-insert" Index: lib/ui/classic.ui =================================================================== --- lib/ui/classic.ui (Revision 15688) +++ lib/ui/classic.ui (Arbeitskopie) @@ -221,6 +221,7 @@ Menuset Item "Marginal Note|M" "marginalnote-insert" Item "Short Title" "optional-insert" Item "Index Entry|I" "index-insert" + Item "Notation Entry" "nomencl-insert" Item "URL...|U" "url-insert" Item "Note|N" "note-insert" Submenu "Lists & TOC|O" "insert_toc" @@ -310,6 +311,7 @@ Menuset Item "Table of Contents|C" "toc-insert" FloatListInsert Item "Index List|I" "index-print" + Item "Notation List|N" "nomencl-print" Item "BibTeX Bibliography...|B" "dialog-show-new-inset bibtex" End Index: lib/ui/stdmenus.ui =================================================================== --- lib/ui/stdmenus.ui (Revision 15688) +++ lib/ui/stdmenus.ui (Arbeitskopie) @@ -294,6 +294,7 @@ Menuset Item "Cross-reference...|r" "dialog-show-new-inset ref" Item "Label...|L" "label-insert" Item "Index Entry|d" "index-insert" + Item "Notation Entry" "nomencl-insert" Item "Date" "date-insert" # I'm going to kill this dumb dialog, but for now ... Separator @@ -363,6 +364,7 @@ Menuset Item "Table of Contents|C" "toc-insert" FloatListInsert Item "Index List|I" "index-print" + Item "Notation List" "nomencl-print" Item "BibTeX Bibliography...|B" "dialog-show-new-inset bibtex" End Index: development/scons/scons_manifest.py =================================================================== --- development/scons/scons_manifest.py (Revision 15688) +++ development/scons/scons_manifest.py (Arbeitskopie) @@ -350,6 +350,7 @@ src_insets_header_files = Split(''' insetline.h insetmarginal.h insetnewline.h + insetnomencl.h insetnote.h insetoptarg.h insetpagebreak.h @@ -405,6 +406,7 @@ src_insets_files = Split(''' insetline.C insetmarginal.C insetnewline.C + insetnomencl.C insetnote.C insetoptarg.C insetpagebreak.C @@ -627,6 +629,7 @@ src_frontends_qt4_ui_files = Split(''' QLogUi.ui QMathMatrixUi.ui QMathUi.ui + QNomenclUi.ui QNoteUi.ui QParagraphUi.ui QPrefAsciiUi.ui @@ -706,6 +709,8 @@ src_frontends_qt4_moc_files = Split(''' QLPrintDialog.C QMathDialog.C QMathMatrixDialog.C + QNomencl.C + QNomenclDialog.C QNoteDialog.C QParagraphDialog.C QPrefsDialog.C @@ -798,6 +803,8 @@ src_frontends_qt4_header_files = Split(' QMath.h QMathDialog.h QMathMatrixDialog.h + QNomencl.h + QNomenclDialog.h QNote.h QNoteDialog.h QParagraph.h @@ -918,6 +925,8 @@ src_frontends_qt4_files = Split(''' QMath.C QMathDialog.C QMathMatrixDialog.C + QNomencl.C + QNomenclDialog.C QNote.C QNoteDialog.C QParagraph.C Index: development/FORMAT =================================================================== --- development/FORMAT (Revision 15688) +++ development/FORMAT (Arbeitskopie) @@ -1,6 +1,10 @@ LyX file-format changes ----------------------- +2006-10-18 Georg Baum <[EMAIL PROTECTED]> + + * format incremented to 253: new nomenclature inset + 2006-10-15 Georg Baum <[EMAIL PROTECTED]> * format incremented to 252: changed command inset syntax @@ -28,7 +32,6 @@ LyX file-format changes The order of the parameters and for each parameter the name and optional/required bit is now stored in InsetCommandParams. - 2006-10-03 Jrgen Spitzmller <[EMAIL PROTECTED]> * format incremented to 251: save show_label param for charstyles.
nomencl.lyx
Description: application/lyx