allow to open documents when the textclass is unavailable (backport from 1.4.0cvs)

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_3_X@8081 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2003-11-13 15:51:44 +00:00
parent 51be22303c
commit 556f26e8eb
12 changed files with 82 additions and 34 deletions

View File

@ -1,3 +1,11 @@
2003-11-12 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* configure.m4: when latex configuration detection is disabled,
fix the default textclass.lst to the new format. Also simplify it
to contain only "article".
* layouts/cv.layout: change description to lowercase
2003-11-05 Jean-Marc Lasgouttes <lasgouttes@lyx.org> 2003-11-05 Jean-Marc Lasgouttes <lasgouttes@lyx.org>
* Makefile.am (install-xfonts): fix error when PSres.upr does not * Makefile.am (install-xfonts): fix error when PSres.upr does not

View File

@ -59,9 +59,9 @@
% the variable chk_<name>. % the variable chk_<name>.
%%% %%%
\newcommand{\prefix}{+} % the character used by grep to filter 'good' output \newcommand{\prefix}{+} % the character used by grep to filter 'good' output
\newcommand{\AddLayout}[3][\default]{ \newcommand{\AddLayout}[4][\default]{
\def\default{#2} \def\default{#2}
\immediate\write\layouts{"#2" "#1" "#3"}} \immediate\write\layouts{"#2" "#1" "#3" "#4"}}
\newcommand{\AddVariable}[2]{ \newcommand{\AddVariable}[2]{
\immediate\write\sed{s!@chk_#1@!#2!g} \immediate\write\sed{s!@chk_#1@!#2!g}
\immediate\write\vars{chk_#1='#2'}} \immediate\write\vars{chk_#1='#2'}}
@ -107,15 +107,17 @@
} }
\newcommand{\DeclareLaTeXClass}[2][\default]{ \newcommand{\DeclareLaTeXClass}[2][\default]{
\TestItem[#1]{\layoutname}{document class}{cls} \TestItem[#1]{\layoutname}{document class}{cls}
{\AddLayout[\firstelement]{\layoutname}{#2}}{} {\AddLayout[\firstelement]{\layoutname}{#2}{true}}
{\AddLayout[\firstelement]{\layoutname}{#2}{false}}
\expandafter\endinput \expandafter\endinput
} }
\newcommand{\DeclareLinuxDocClass}[2][\default]{ \newcommand{\DeclareLinuxDocClass}[2][\default]{
\message{^^J\prefix checking for linuxdoc class \layoutname... } \message{^^J\prefix checking for linuxdoc class \layoutname... }
\@ifundefined{haslinuxdoc} \@ifundefined{haslinuxdoc}
{\message{no^^J}} {\message{no^^J}
\AddLayout[#1]{\layoutname}{#2}{false}}
{\message{yes^^J} {\message{yes^^J}
\AddLayout[#1]{\layoutname}{#2}} \AddLayout[#1]{\layoutname}{#2}{true}}
\expandafter\endinput \expandafter\endinput
} }
% Only for compatibility. Will be removed later. % Only for compatibility. Will be removed later.
@ -124,9 +126,10 @@
\newcommand{\DeclareDocBookClass}[2][\default]{ \newcommand{\DeclareDocBookClass}[2][\default]{
\message{^^J\prefix checking for docbook\space\space class \layoutname... } \message{^^J\prefix checking for docbook\space\space class \layoutname... }
\@ifundefined{hasdocbook} \@ifundefined{hasdocbook}
{\message{no^^J}} {\message{no^^J}
\AddLayout[#1]{\layoutname}{#2}{false}}
{\message{yes^^J} {\message{yes^^J}
\AddLayout[#1]{\layoutname}{#2}} \AddLayout[#1]{\layoutname}{#2}{true}}
\expandafter\endinput \expandafter\endinput
} }

View File

@ -408,11 +408,7 @@ PROVIDE_DEFAULT_FILE(textclass.lst,dnl
# It contains only default values, since chkconfig.ltx could not be run # It contains only default values, since chkconfig.ltx could not be run
# for some reason. Run ./configure if you need to update it after a # for some reason. Run ./configure if you need to update it after a
# configuration change. # configuration change.
article article article article article article false])
report report report
book book book
linuxdoc linuxdoc linuxdoc
letter letter letter])
PROVIDE_DEFAULT_FILE(chkconfig.sed,[s/@.*@/???/g]) PROVIDE_DEFAULT_FILE(chkconfig.sed,[s/@.*@/???/g])

View File

@ -1,5 +1,5 @@
#% Do not delete the line below; configure depends on this #% Do not delete the line below; configure depends on this
# \DeclareLaTeXClass{Curriculum Vitae} # \DeclareLaTeXClass{curriculum vitae}
# CV textclass definition file. # CV textclass definition file.
# Author : Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr) # Author : Jean-Marc Lasgouttes (Jean-Marc.Lasgouttes@inria.fr)

View File

@ -650,6 +650,19 @@ Buffer::parseSingleLyXformat2Token(LyXLex & lex, Paragraph *& par,
#endif #endif
params.textclass = 0; params.textclass = 0;
} }
if (!params.getLyXTextClass().isTeXClassAvailable()) {
#if USE_BOOST_FORMAT
Alert::alert(_("Textclass error"),
boost::io::str(boost::format(_("The document uses a missing TeX class \"%1$s\".")) % lex.getString()),
_("LyX will not be able to produce output."));
#else
Alert::alert(
_("Textclass error"),
_("The document uses a missing TeX class ")
+ lex.getString(),
_("LyX will not be able to produce output."));
#endif
}
} else if (token == "\\options") { } else if (token == "\\options") {
lex.eatLine(); lex.eatLine();
params.options = lex.getString(); params.options = lex.getString();

View File

@ -169,6 +169,7 @@ string const Exporter::BufferFormat(Buffer const * buffer)
vector<string> const Exporter::Backends(Buffer const * buffer) vector<string> const Exporter::Backends(Buffer const * buffer)
{ {
vector<string> v; vector<string> v;
if (buffer->params.getLyXTextClass().isTeXClassAvailable())
v.push_back(BufferFormat(buffer)); v.push_back(BufferFormat(buffer));
v.push_back("text"); v.push_back("text");
return v; return v;

View File

@ -115,7 +115,12 @@ void QDocument::build_dialog()
// layout // layout
for (LyXTextClassList::const_iterator cit = textclasslist.begin(); for (LyXTextClassList::const_iterator cit = textclasslist.begin();
cit != textclasslist.end(); ++cit) { cit != textclasslist.end(); ++cit) {
if (cit->isTeXClassAvailable()) {
dialog_->layoutModule->classCO->insertItem(toqstr(cit->description())); dialog_->layoutModule->classCO->insertItem(toqstr(cit->description()));
} else {
dialog_->layoutModule->classCO->insertItem(toqstr("Unavailable: " +
cit->description()));
}
} }
for (int n = 0; tex_fonts[n][0]; ++n) { for (int n = 0; tex_fonts[n][0]; ++n) {
@ -467,13 +472,7 @@ void QDocument::update_contents()
// layout // layout
for (int n = 0; n<dialog_->layoutModule->classCO->count(); ++n) { dialog_->layoutModule->classCO->setCurrentItem(params.textclass);
if (dialog_->layoutModule->classCO->text(n) ==
toqstr(controller().textClass().description())) {
dialog_->layoutModule->classCO->setCurrentItem(n);
break;
}
}
dialog_->updateFontsize(controller().textClass().opt_fontsize(), dialog_->updateFontsize(controller().textClass().opt_fontsize(),
params.fontsize); params.fontsize);

View File

@ -145,7 +145,11 @@ void FormDocument::build()
fl_end_form(); fl_end_form();
for (LyXTextClassList::const_iterator cit = textclasslist.begin(); for (LyXTextClassList::const_iterator cit = textclasslist.begin();
cit != textclasslist.end(); ++cit) { cit != textclasslist.end(); ++cit) {
if (cit->isTeXClassAvailable()) {
combo_doc_class->addto(cit->description()); combo_doc_class->addto(cit->description());
} else {
combo_doc_class->addto("Unavailable: " + cit->description());
}
} }
fl_addto_choice(class_->choice_doc_spacing, fl_addto_choice(class_->choice_doc_spacing,
@ -852,7 +856,7 @@ void FormDocument::UpdateClassParams(BufferParams const & params)
LyXTextClass const & tclass = textclasslist[params.textclass]; LyXTextClass const & tclass = textclasslist[params.textclass];
combo_doc_class->select(tclass.description()); combo_doc_class->select(params.textclass + 1);
fl_clear_choice(class_->choice_doc_fontsize); fl_clear_choice(class_->choice_doc_fontsize);
fl_addto_choice(class_->choice_doc_fontsize, "default"); fl_addto_choice(class_->choice_doc_fontsize, "default");
fl_addto_choice(class_->choice_doc_fontsize, fl_addto_choice(class_->choice_doc_fontsize,

View File

@ -49,9 +49,9 @@ struct compare_name {
LyXTextClass::LyXTextClass(string const & fn, string const & cln, LyXTextClass::LyXTextClass(string const & fn, string const & cln,
string const & desc) string const & desc, bool texClassAvail )
: name_(fn), latexname_(cln), description_(desc), : name_(fn), latexname_(cln), description_(desc),
floatlist_(new FloatList), ctrs_(new Counters) floatlist_(new FloatList), ctrs_(new Counters), texClassAvail_(texClassAvail)
{ {
outputType_ = LATEX; outputType_ = LATEX;
columns_ = 1; columns_ = 1;
@ -70,6 +70,11 @@ LyXTextClass::LyXTextClass(string const & fn, string const & cln,
} }
bool LyXTextClass::isTeXClassAvailable() const {
return texClassAvail_;
}
bool LyXTextClass::do_readStyle(LyXLex & lexrc, LyXLayout & lay) bool LyXTextClass::do_readStyle(LyXLex & lexrc, LyXLayout & lay)
{ {
lyxerr[Debug::TCLASS] << "Reading style " << lay.name() << endl; lyxerr[Debug::TCLASS] << "Reading style " << lay.name() << endl;

View File

@ -39,7 +39,11 @@ public:
explicit explicit
LyXTextClass(string const & = string(), LyXTextClass(string const & = string(),
string const & = string(), string const & = string(),
string const & = string()); string const & = string(),
bool = false);
/// check whether the TeX class is available
bool isTeXClassAvailable() const;
/// paragraph styles begin iterator. /// paragraph styles begin iterator.
const_iterator begin() const { return layoutlist_.begin(); } const_iterator begin() const { return layoutlist_.begin(); }
@ -150,6 +154,8 @@ public:
/// ///
int size() const; int size() const;
private: private:
/// Is the TeX class available?
bool texClassAvail_;
/// ///
bool delete_layout(string const &); bool delete_layout(string const &);
/// ///

View File

@ -69,7 +69,9 @@ LyXTextClassList::operator[](textclass_type textclass) const
class less_textclass_desc { class less_textclass_desc {
public: public:
int operator()(LyXTextClass const & tc1, LyXTextClass const & tc2) { int operator()(LyXTextClass const & tc1, LyXTextClass const & tc2) {
return tc1.description() < tc2.description(); return (tc1.isTeXClassAvailable() && !tc2.isTeXClassAvailable()) ||
(tc1.isTeXClassAvailable() == tc2.isTeXClassAvailable() &&
tc1.description() < tc2.description());
} }
}; };
@ -130,9 +132,12 @@ bool LyXTextClassList::Read ()
if (lex.next()) { if (lex.next()) {
string const desc = lex.getString(); string const desc = lex.getString();
lyxerr[Debug::TCLASS] << "Desc: " << desc << endl; lyxerr[Debug::TCLASS] << "Desc: " << desc << endl;
if (lex.next()) {
bool avail = lex.getBool();
lyxerr[Debug::TCLASS] << "Avail: " << avail << endl;
// This code is run when we have // This code is run when we have
// fname, clname and desc // fname, clname, desc, and avail
LyXTextClass tmpl(fname, clname, desc); LyXTextClass tmpl(fname, clname, desc, avail);
if (lyxerr.debugging(Debug::TCLASS)) { if (lyxerr.debugging(Debug::TCLASS)) {
tmpl.load(); tmpl.load();
} }
@ -141,6 +146,7 @@ bool LyXTextClassList::Read ()
} }
} }
} }
}
lyxerr[Debug::TCLASS] << "End of parsing of textclass.lst" << endl; lyxerr[Debug::TCLASS] << "End of parsing of textclass.lst" << endl;
if (classlist_.empty()) { if (classlist_.empty()) {

View File

@ -22,6 +22,13 @@ What's new
** Updates ** Updates
- it is now possible to open documents which use a textclasse for
which no LaTeX support is installed. The documents can be normally
edited, but they can of course not be previewed or printed. Note
that the format of the file .lyx/textclasses.lst has changed as a
consequence and it is therefore not possible to use LyX 1.3.4 and an
earlier version with the same .lyx/ directory.
- add support for \boldsymbol in math editor - add support for \boldsymbol in math editor
- update danish, italian, romanian and slovenian interface localizations - update danish, italian, romanian and slovenian interface localizations