Conversion routines for preference files.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37233 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Richard Heck 2011-01-16 20:28:43 +00:00
parent 586d60af6a
commit dfb67984f2
4 changed files with 74 additions and 126 deletions

View File

@ -29,7 +29,8 @@ def remove_obsolete(line):
tags = ("\\use_tempdir", "\\spell_command", "\\personal_dictionary",
"\\plaintext_roff_command", "\\use_alt_language",
"\\use_escape_chars", "\\use_input_encoding",
"\\use_personal_dictionary", "\\use_pspell")
"\\use_personal_dictionary", "\\use_pspell",
"\\use_spell_lib")
line = line.lstrip()
for tag in tags:
if line.startswith(tag):

View File

@ -54,6 +54,8 @@ namespace os = support::os;
namespace {
static unsigned int const LYXRC_FILEFORMAT = 1;
// when adding something to this array keep it sorted!
LexerKeyword lyxrcTags[] = {
{ "\\accept_compound", LyXRC::RC_ACCEPT_COMPOUND },
@ -97,7 +99,7 @@ LexerKeyword lyxrcTags[] = {
{ "\\example_path", LyXRC::RC_EXAMPLEPATH },
{ "\\export_overwrite", LyXRC::RC_EXPORT_OVERWRITE },
{ "\\font_encoding", LyXRC::RC_FONT_ENCODING },
{ "\\format", LyXRC::RC_FORMAT },
{ "\\format", LyXRC::RC_FILEFORMAT },
{ "\\forward_search_dvi", LyXRC::RC_FORWARD_SEARCH_DVI },
{ "\\forward_search_pdf", LyXRC::RC_FORWARD_SEARCH_PDF },
{ "\\fullscreen_limit", LyXRC::RC_FULL_SCREEN_LIMIT },
@ -137,9 +139,7 @@ LexerKeyword lyxrcTags[] = {
{ "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
{ "\\paragraph_markers", LyXRC::RC_PARAGRAPH_MARKERS },
{ "\\path_prefix", LyXRC::RC_PATH_PREFIX },
{ "\\personal_dictionary", LyXRC::RC_PERS_DICT },
{ "\\plaintext_linelen", LyXRC::RC_PLAINTEXT_LINELEN },
{ "\\plaintext_roff_command", LyXRC::RC_PLAINTEXT_ROFF_COMMAND },
{ "\\preview", LyXRC::RC_PREVIEW },
{ "\\preview_hashed_labels", LyXRC::RC_PREVIEW_HASHED_LABELS },
{ "\\preview_scale_factor", LyXRC::RC_PREVIEW_SCALE_FACTOR },
@ -181,7 +181,6 @@ LexerKeyword lyxrcTags[] = {
{ "\\single_close_tab_button", LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON },
{ "\\single_instance", LyXRC::RC_SINGLE_INSTANCE },
{ "\\sort_layouts", LyXRC::RC_SORT_LAYOUTS },
{ "\\spell_command", LyXRC::RC_SPELL_COMMAND },
{ "\\spellcheck_continuously", LyXRC::RC_SPELLCHECK_CONTINUOUSLY },
{ "\\spellcheck_notes", LyXRC::RC_SPELLCHECK_NOTES },
{ "\\spellchecker", LyXRC::RC_SPELLCHECKER },
@ -192,18 +191,11 @@ LexerKeyword lyxrcTags[] = {
{ "\\tex_expects_windows_paths", LyXRC::RC_TEX_EXPECTS_WINDOWS_PATHS },
{ "\\thesaurusdir_path", LyXRC::RC_THESAURUSDIRPATH },
{ "\\ui_file", LyXRC::RC_UIFILE },
{ "\\use_alt_language", LyXRC::RC_USE_ALT_LANG },
{ "\\use_converter_cache", LyXRC::RC_USE_CONVERTER_CACHE },
{ "\\use_escape_chars", LyXRC::RC_USE_ESC_CHARS },
{ "\\use_input_encoding", LyXRC::RC_USE_INP_ENC },
{ "\\use_lastfilepos", LyXRC::RC_USELASTFILEPOS },
{ "\\use_personal_dictionary", LyXRC::RC_USE_PERS_DICT },
{ "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
// compatibility with versions older than 1.4.0 only
{ "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
{ "\\use_system_colors", LyXRC::RC_USE_SYSTEM_COLORS },
// compatibility with versions older than 1.4.0 only
{ "\\use_tempdir", LyXRC::RC_USETEMPDIR },
{ "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
{ "\\user_email", LyXRC::RC_USER_EMAIL },
{ "\\user_name", LyXRC::RC_USER_NAME },
@ -211,7 +203,8 @@ LexerKeyword lyxrcTags[] = {
// compatibility with versions older than 1.4.0 only
{ "\\viewer", LyXRC::RC_VIEWER},
{ "\\viewer_alternatives", LyXRC::RC_VIEWER_ALTERNATIVES },
{ "\\visual_cursor" ,LyXRC::RC_VISUAL_CURSOR}
{ "\\visual_cursor", LyXRC::RC_VISUAL_CURSOR },
{ "format", LyXRC::RC_LYXRCFORMAT }
};
const int lyxrcCount = sizeof(lyxrcTags) / sizeof(lyxrcTags[0]);
@ -384,42 +377,53 @@ void oldFontFormat(string & family, string & foundry)
} // namespace anon
int LyXRC::read(FileName const & filename)
bool LyXRC::read(FileName const & filename)
{
Lexer lexrc(lyxrcTags);
if (lyxerr.debugging(Debug::PARSER))
lexrc.printTable(lyxerr);
lexrc.setFile(filename);
if (!lexrc.isOK())
return -2;
LYXERR(Debug::LYXRC, "Reading '" << filename << "'...");
ReturnValues retval = read(lexrc);
if (retval != FormatMismatch)
return retval == ReadOK;
return read(lexrc);
LYXERR(Debug::FILES, "Converting LyXRC file to " << LYXRC_FILEFORMAT);
FileName const tempfile = FileName::tempName("convert_lyxrc");
bool const success = prefs2prefs(filename, tempfile, false);
if (!success) {
LYXERR0 ("Unable to convert " << filename.absFileName() <<
" to format " << LYXRC_FILEFORMAT);
return false;
}
Lexer lexrc2(lyxrcTags);
lexrc2.setFile(tempfile);
LYXERR(Debug::LYXRC, "Reading '" << tempfile << "'...");
retval = read(lexrc2);
tempfile.removeFile();
return retval == ReadOK;
}
int LyXRC::read(istream & is)
// don't need to worry about conversion, because this is always
// from an internal source
bool LyXRC::read(istream & is)
{
Lexer lexrc(lyxrcTags);
lexrc.setStream(is);
LYXERR(Debug::LYXRC, "Reading istream...");
return read(lexrc) == ReadOK;
}
LyXRC::ReturnValues LyXRC::read(Lexer & lexrc)
{
if (lyxerr.debugging(Debug::PARSER))
lexrc.printTable(lyxerr);
lexrc.setStream(is);
if (!lexrc.isOK())
return -2;
return ReadError;
LYXERR(Debug::LYXRC, "Reading istream...");
return read(lexrc);
}
int LyXRC::read(Lexer & lexrc)
{
if (!lexrc.isOK())
return -2;
// format prior to 2.0 and introduction of format tag
unsigned int format = 0;
while (lexrc.isOK()) {
// By using two switches we take advantage of the compiler
@ -440,6 +444,10 @@ int LyXRC::read(Lexer & lexrc)
break;
}
switch (static_cast<LyXRCTags>(le)) {
case RC_LYXRCFORMAT:
if (lexrc.next())
format = lexrc.getInteger();
break;
case RC_INPUT: // Include file
if (lexrc.next()) {
FileName const tmp =
@ -1051,7 +1059,7 @@ int LyXRC::read(Lexer & lexrc)
formats.setViewer(format, command);
break;
}
case RC_FORMAT: {
case RC_FILEFORMAT: {
string format, extension, prettyname, shortcut;
lexrc >> format >> extension >> prettyname >> shortcut;
string viewer, editor;
@ -1248,32 +1256,21 @@ int LyXRC::read(Lexer & lexrc)
}
break;
// Obsoteted in 1.4.0
case RC_USETEMPDIR:
// Obsoleted in 2.0
case RC_SPELL_COMMAND:
case RC_PERS_DICT:
case RC_PLAINTEXT_ROFF_COMMAND:
case RC_USE_ALT_LANG:
case RC_USE_ESC_CHARS:
case RC_USE_INP_ENC:
case RC_USE_PERS_DICT:
case RC_USE_SPELL_LIB:
LYXERR(Debug::LYXRC, "Skipping obsolete tag `"
<< lexrc.getString() << "'.");
lexrc.next(true);
break;
case RC_LAST:
break; // this is just a dummy
}
// This is triggered the first time through the loop unless
// we hit a format tag.
if (format != LYXRC_FILEFORMAT)
return FormatMismatch;
}
/// Update converters data-structures
theConverters().update(formats);
theConverters().buildGraph();
return 0;
return ReadOK;
}
@ -1336,8 +1333,8 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
if (tag == RC_LAST)
os << "# LyX " << lyx_version
<< " generated this file. If you want to make your own\n"
<< "# modifications you should do them from inside LyX and save.\n"
<< "\n";
<< "# modifications you should do them from inside LyX and save.\n\n"
<< "Format " << LYXRC_FILEFORMAT << "\n\n";
// Why the switch you might ask. It is a trick to ensure that all
// the elements in the LyXRCTags enum are handled. As you can see
@ -1348,6 +1345,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
case RC_LAST:
case RC_INPUT:
// input/include files are not done here
case RC_LYXRCFORMAT:
case RC_BINDFILE:
if (ignore_system_lyxrc ||
bind_file != system_lyxrc.bind_file) {
@ -2349,13 +2347,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
}
if (tag != RC_LAST)
break;
case RC_USETEMPDIR:
if (tag != RC_LAST)
break;
// Ignore it
case RC_PLAINTEXT_ROFF_COMMAND: // Obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_PLAINTEXT_LINELEN:
if (ignore_system_lyxrc ||
plaintext_linelen != system_lyxrc.plaintext_linelen) {
@ -2394,11 +2385,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
<< "# SPELLCHECKER SECTION ##############################\n"
<< "#\n\n";
case RC_SPELL_COMMAND:
case RC_USE_SPELL_LIB:
// Obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_ACCEPT_COMPOUND:
if (ignore_system_lyxrc ||
spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
@ -2407,10 +2393,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
}
if (tag != RC_LAST)
break;
case RC_USE_ALT_LANG:
// Obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_ALT_LANG:
if (ignore_system_lyxrc ||
spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
@ -2419,9 +2401,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
}
if (tag != RC_LAST)
break;
case RC_USE_ESC_CHARS:
if (tag != RC_LAST)
break;
case RC_ESC_CHARS:
if (ignore_system_lyxrc ||
spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
@ -2429,10 +2408,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
}
if (tag != RC_LAST)
break;
case RC_USE_PERS_DICT:
// obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_USE_SYSTEM_COLORS:
if (ignore_system_lyxrc ||
use_system_colors != system_lyxrc.use_system_colors) {
@ -2460,14 +2435,6 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
}
if (tag != RC_LAST)
break;
case RC_PERS_DICT:
// obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_USE_INP_ENC:
// obsoleted in 2.0
if (tag != RC_LAST)
break;
os << "\n#\n"
<< "# LANGUAGE SUPPORT SECTION ##########################\n"
@ -2689,7 +2656,7 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
<< "# FORMATS SECTION ##########################\n"
<< "#\n\n";
case RC_FORMAT:
case RC_FILEFORMAT:
// New/modified formats
for (Formats::const_iterator cit = formats.begin();
cit != formats.end(); ++cit) {
@ -2866,7 +2833,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_ACCEPT_COMPOUND:
case LyXRC::RC_ALT_LANG:
case LyXRC::RC_PLAINTEXT_LINELEN:
case LyXRC::RC_PLAINTEXT_ROFF_COMMAND:
case LyXRC::RC_AUTOCORRECTION_MATH:
case LyXRC::RC_AUTOREGIONDELETE:
case LyXRC::RC_AUTORESET_OPTIONS:
@ -2912,7 +2878,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_ESC_CHARS:
case LyXRC::RC_EXAMPLEPATH:
case LyXRC::RC_FONT_ENCODING:
case LyXRC::RC_FORMAT:
case LyXRC::RC_FILEFORMAT:
case LyXRC::RC_GROUP_LAYOUTS:
case LyXRC::RC_HUNSPELLDIR_PATH:
case LyXRC::RC_INDEX_ALTERNATIVES:
@ -2932,6 +2898,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_LANGUAGE_GLOBAL_OPTIONS:
case LyXRC::RC_LANGUAGE_CUSTOM_PACKAGE:
case LyXRC::RC_LANGUAGE_PACKAGE_SELECTION:
case LyXRC::RC_LYXRCFORMAT:
case LyXRC::RC_MAC_DONTSWAP_CTRL_META:
case LyXRC::RC_MAC_LIKE_WORD_MOVEMENT:
case LyXRC::RC_MACRO_EDIT_STYLE:
@ -2944,7 +2911,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
if (lyxrc_orig.path_prefix != lyxrc_new.path_prefix) {
prependEnvPath("PATH", lyxrc.path_prefix);
}
case LyXRC::RC_PERS_DICT:
case LyXRC::RC_PREVIEW:
case LyXRC::RC_PREVIEW_HASHED_LABELS:
case LyXRC::RC_PREVIEW_SCALE_FACTOR:
@ -2983,7 +2949,6 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_SET_COLOR:
case LyXRC::RC_SHOW_BANNER:
case LyXRC::RC_OPEN_BUFFERS_IN_TABS:
case LyXRC::RC_SPELL_COMMAND:
case LyXRC::RC_SPELLCHECKER:
case LyXRC::RC_SPELLCHECK_CONTINUOUSLY:
case LyXRC::RC_SPELLCHECK_NOTES:
@ -2999,16 +2964,10 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_UIFILE:
case LyXRC::RC_USER_EMAIL:
case LyXRC::RC_USER_NAME:
case LyXRC::RC_USETEMPDIR:
case LyXRC::RC_USE_ALT_LANG:
case LyXRC::RC_USE_CONVERTER_CACHE:
case LyXRC::RC_USE_ESC_CHARS:
case LyXRC::RC_USE_INP_ENC:
case LyXRC::RC_USE_PERS_DICT:
case LyXRC::RC_USE_SYSTEM_COLORS:
case LyXRC::RC_USE_TOOLTIP:
case LyXRC::RC_USE_PIXMAP_CACHE:
case LyXRC::RC_USE_SPELL_LIB:
case LyXRC::RC_VIEWDVI_PAPEROPTION:
case LyXRC::RC_SINGLE_CLOSE_TAB_BUTTON:
case LyXRC::RC_SINGLE_INSTANCE:
@ -3044,14 +3003,9 @@ string const LyXRC::getDescription(LyXRCTags tag)
break;
case RC_ALT_LANG:
case RC_USE_ALT_LANG:
str = _("Specify an alternate language. The default is to use the language of the document.");
break;
case RC_PLAINTEXT_ROFF_COMMAND:
str = _("Use to define an external program to render tables in plain text output. E.g. \"groff -t -Tlatin1 $$FName\" where $$FName is the input file. If \"\" is specified, an internal routine is used.");
break;
case RC_PLAINTEXT_LINELEN:
str = _("The maximum line length of exported plain text/LaTeX/SGML files. If set to 0, paragraphs are output in a single line; if the line length is > 0, paragraphs are separated by a blank line.");
break;
@ -3155,7 +3109,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
break;
case RC_ESC_CHARS:
case RC_USE_ESC_CHARS:
str = _("Specify additional chars that can be part of a word.");
break;
@ -3167,7 +3120,7 @@ string const LyXRC::getDescription(LyXRCTags tag)
str = _("The font encoding used for the LaTeX2e fontenc package. T1 is highly recommended for non-English languages.");
break;
case RC_FORMAT:
case RC_FILEFORMAT:
break;
case RC_INDEX_COMMAND:
@ -3458,9 +3411,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
case RC_USER_NAME:
break;
case RC_USETEMPDIR:
break;
case RC_USE_USE_SYSTEM_COLORS:
str = _("Enable use the system colors for some things like main window background and selection.");
break;
@ -3473,9 +3423,6 @@ string const LyXRC::getDescription(LyXRCTags tag)
str = _("Enable the pixmap cache that might improve performance on Mac and Windows.");
break;
case RC_USE_SPELL_LIB:
break;
case RC_VIEWDVI_PAPEROPTION:
_("Specify the paper command to DVI viewer (leave empty or use \"-paper\")");
break;

View File

@ -79,7 +79,7 @@ public:
RC_EXAMPLEPATH,
RC_EXPORT_OVERWRITE,
RC_FONT_ENCODING,
RC_FORMAT,
RC_FILEFORMAT,
RC_FORWARD_SEARCH_DVI,
RC_FORWARD_SEARCH_PDF,
RC_FULL_SCREEN_LIMIT,
@ -109,6 +109,7 @@ public:
RC_LANGUAGE_CUSTOM_PACKAGE,
RC_LANGUAGE_PACKAGE_SELECTION,
RC_LOADSESSION,
RC_LYXRCFORMAT,
RC_MACRO_EDIT_STYLE,
RC_MAC_DONTSWAP_CTRL_META,
RC_MAC_LIKE_WORD_MOVEMENT,
@ -120,9 +121,7 @@ public:
RC_OPEN_BUFFERS_IN_TABS,
RC_PARAGRAPH_MARKERS,
RC_PATH_PREFIX,
RC_PERS_DICT,
RC_PLAINTEXT_LINELEN,
RC_PLAINTEXT_ROFF_COMMAND,
RC_PREVIEW,
RC_PREVIEW_HASHED_LABELS,
RC_PREVIEW_SCALE_FACTOR,
@ -164,7 +163,6 @@ public:
RC_SINGLE_CLOSE_TAB_BUTTON,
RC_SINGLE_INSTANCE,
RC_SORT_LAYOUTS,
RC_SPELL_COMMAND,
RC_SPELLCHECK_CONTINUOUSLY,
RC_SPELLCHECK_NOTES,
RC_SPELLCHECKER,
@ -178,16 +176,10 @@ public:
RC_USELASTFILEPOS,
RC_USER_EMAIL,
RC_USER_NAME,
RC_USETEMPDIR,
RC_USE_ALT_LANG,
RC_USE_CONVERTER_CACHE,
RC_USE_ESC_CHARS,
RC_USE_INP_ENC,
RC_USE_PERS_DICT,
RC_USE_SYSTEM_COLORS,
RC_USE_TOOLTIP,
RC_USE_PIXMAP_CACHE,
RC_USE_SPELL_LIB,
RC_VIEWDVI_PAPEROPTION,
RC_VIEWER,
RC_VIEWER_ALTERNATIVES,
@ -200,16 +192,24 @@ public:
///
void setDefaults();
///
int read(support::FileName const & filename);
bool read(support::FileName const & filename);
///
int read(std::istream &);
bool read(std::istream &);
private:
enum ReturnValues {
ReadOK,
FileError,
ReadError,
FormatMismatch
};
///
int read(Lexer &);
ReturnValues readWithoutConv(support::FileName const &);
///
ReturnValues read(Lexer &);
public:
///
///
typedef std::set<std::string> CommandSet;
/// maps a format to a set of commands that can be used to
/// maps a format to a set of commands that can be used to
/// edit or view it.
typedef std::map<std::string, CommandSet> Alternatives;
///
@ -217,7 +217,7 @@ public:
bool ignore_system_lyxrc) const;
/// write rc. If a specific tag is given, only output that one.
void write(std::ostream & os,
bool ignore_system_lyxrc,
bool ignore_system_lyxrc,
std::string const & tag = std::string()) const;
///
void print() const;

View File

@ -1419,7 +1419,7 @@ void GuiApplication::dispatch(FuncRequest const & cmd, DispatchResult & dr)
LyXRC const lyxrc_orig = lyxrc;
istringstream ss(to_utf8(cmd.argument()));
bool const success = lyxrc.read(ss) == 0;
bool const success = lyxrc.read(ss);
if (!success) {
lyxerr << "Warning in LFUN_LYXRC_APPLY!\n"