* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
- * \author Lars Gullik Bjønnes
+ * \author Lars Gullik Bjønnes
* \author Jean-Marc Lasgouttes
* \author Angus Leeming
* \author John Levon
- * \author André Pönitz
+ * \author André Pönitz
* \author Allan Rae
* \author Dekel Tsur
*
#include "Color.h"
#include "Converter.h"
+#include "FontEnums.h"
#include "Format.h"
-#include "Session.h"
#include "Lexer.h"
-#include "FontEnums.h"
#include "Mover.h"
+#include "Session.h"
+#include "version.h"
#include "graphics/GraphicsTypes.h"
{ "\\fullscreen_toolbars", LyXRC::RC_FULL_SCREEN_TOOLBARS },
{ "\\fullscreen_width", LyXRC::RC_FULL_SCREEN_WIDTH },
{ "\\group_layouts", LyXRC::RC_GROUP_LAYOUTS },
+ { "\\gui_language", LyXRC::RC_GUI_LANGUAGE },
{ "\\index_command", LyXRC::RC_INDEX_COMMAND },
{ "\\input", LyXRC::RC_INPUT },
{ "\\kbmap", LyXRC::RC_KBMAP },
{ "\\language_package", LyXRC::RC_LANGUAGE_PACKAGE },
{ "\\language_use_babel", LyXRC::RC_LANGUAGE_USE_BABEL },
{ "\\load_session", LyXRC::RC_LOADSESSION },
+ { "\\mac_like_word_movement", LyXRC::RC_MAC_LIKE_WORD_MOVEMENT },
{ "\\macro_edit_style", LyXRC::RC_MACRO_EDIT_STYLE },
{ "\\make_backup", LyXRC::RC_MAKE_BACKUP },
{ "\\mark_foreign_language", LyXRC::RC_MARK_FOREIGN_LANGUAGE },
{ "\\mouse_wheel_speed", LyXRC::RC_MOUSE_WHEEL_SPEED },
+ { "\\nomencl_command", LyXRC::RC_NOMENCL_COMMAND },
{ "\\num_lastfiles", LyXRC::RC_NUMLASTFILES },
{ "\\open_buffers_in_tabs", LyXRC::RC_OPEN_BUFFERS_IN_TABS },
{ "\\path_prefix", LyXRC::RC_PATH_PREFIX },
{ "\\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_spell_lib", LyXRC::RC_USE_SPELL_LIB },
// compatibility with versions older than 1.4.0 only
{ "\\use_tempdir", LyXRC::RC_USETEMPDIR },
{ "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
bibtex_command = "bibtex";
fontenc = "default";
index_command = "makeindex -c -q";
+ nomencl_command = "makeindex -s nomencl.ist";
dpi = 75;
// Because a screen typically is wider than a piece of paper:
zoom = 150;
load_session = false;
make_backup = true;
backupdir_path.erase();
- display_graphics = graphics::ColorDisplay;
+ display_graphics = true;
// Spellchecker settings:
- use_spell_lib = true;
- isp_command = "ispell";
- isp_accept_compound = false;
- isp_use_input_encoding = false;
- isp_use_alt_lang = false;
- isp_use_pers_dict = false;
- isp_use_esc_chars = false;
+ spellchecker_accept_compound = false;
+ spellchecker_use_input_encoding = false;
+ spellchecker_use_alt_lang = false;
+ spellchecker_use_pers_dict = false;
+ spellchecker_use_esc_chars = false;
use_kbmap = false;
rtl_support = true;
visual_cursor = false;
sort_layouts = false;
group_layouts = true;
default_language = "english";
+ gui_language = "auto";
show_banner = true;
windows_style_tex_paths = false;
tex_allows_spaces = false;
date_insert_format = "%x";
cursor_follows_scrollbar = false;
+ mac_like_word_movement = false;
macro_edit_style = MACRO_EDIT_INLINE_BOX;
dialogs_iconify_with_main = false;
label_init_length = 3;
int LyXRC::read(Lexer & lexrc)
{
- if (!lexrc.isOK()) return -2;
+ if (!lexrc.isOK())
+ return -2;
while (lexrc.isOK()) {
// By using two switches we take advantage of the compiler
continue;
case Lexer::LEX_FEOF:
continue;
- default: break;
+ default:
+ break;
}
switch (static_cast<LyXRCTags>(le)) {
case RC_INPUT: // Include file
}
break;
case RC_BINDFILE:
- if (lexrc.next()) {
+ if (lexrc.next())
bind_file = os::internal_path(lexrc.getString());
- }
break;
case RC_DEFFILE:
- if (lexrc.next()) {
+ if (lexrc.next())
def_file = os::internal_path(lexrc.getString());
- }
break;
case RC_UIFILE:
- if (lexrc.next()) {
+ if (lexrc.next())
ui_file = os::internal_path(lexrc.getString());
- }
break;
case RC_AUTORESET_OPTIONS:
case RC_DISPLAY_GRAPHICS:
if (lexrc.next())
- display_graphics = graphics::displayTranslator().find(lexrc.getString());
+ display_graphics = lexrc.getString() == "true";
break;
case RC_TEX_EXPECTS_WINDOWS_PATHS:
break;
case RC_PRINT_COMMAND:
- lexrc >> print_command;
+ if (lexrc.next(true)) {
+ print_command = lexrc.getString();
+ }
break;
case RC_PRINTEVENPAGEFLAG:
break;
case RC_PRINTSPOOL_COMMAND:
- lexrc >> print_spool_command;
+ if (lexrc.next(true)) {
+ print_spool_command = lexrc.getString();
+ }
break;
case RC_PRINTSPOOL_PRINTERPREFIX:
break;
case RC_CHKTEX_COMMAND:
- lexrc >> chktex_command;
+ if (lexrc.next(true)) {
+ chktex_command = lexrc.getString();
+ }
break;
case RC_BIBTEX_COMMAND:
- lexrc >> bibtex_command;
+ if (lexrc.next(true)) {
+ bibtex_command = lexrc.getString();
+ }
break;
case RC_INDEX_COMMAND:
- lexrc >> index_command;
+ if (lexrc.next(true)) {
+ index_command = lexrc.getString();
+ }
+ break;
+
+ case RC_NOMENCL_COMMAND:
+ if (lexrc.next(true)) {
+ nomencl_command = lexrc.getString();
+ }
break;
case RC_SCREEN_DPI:
case RC_USETEMPDIR:
if (lexrc.next())
- lyxerr << "Ignoring obsolete use_tempdir flag." << endl;
+ LYXERR0("Ignoring obsolete use_tempdir flag.");
break;
case RC_USELASTFILEPOS:
lexrc >> typewriter_font_foundry;
break;
- case RC_SET_COLOR:
- {
- string lyx_name, x11_name;
-
- if (lexrc.next()) {
- lyx_name = lexrc.getString();
- } else {
+ case RC_SET_COLOR: {
+ if (!lexrc.next()) {
lexrc.printError("Missing color tag.");
break;
}
+ string lyx_name = lexrc.getString();
- if (lexrc.next()) {
- x11_name = lexrc.getString();
- } else {
+ if (!lexrc.next()) {
lexrc.printError("Missing color name for color: `$$Token'");
break;
}
+ string x11_name = lexrc.getString();
ColorCode const col =
lcolor.getFromLyXName(lyx_name);
col == Color_ignore)
break;
- if (!lcolor.setColor(col, x11_name)) {
- lyxerr << "Bad lyxrc set_color for "
- << lyx_name << endl;
-
- }
+ if (!lcolor.setColor(col, x11_name))
+ LYXERR0("Bad lyxrc set_color for " << lyx_name);
break;
}
+
case RC_AUTOREGIONDELETE:
// Auto region delete defaults to true
lexrc >> auto_region_delete;
lexrc >> cursor_follows_scrollbar;
break;
+ case RC_MAC_LIKE_WORD_MOVEMENT:
+ lexrc >> mac_like_word_movement;
+ break;
+
case RC_MACRO_EDIT_STYLE:
if (lexrc.next()) {
switch (lexrc.getInteger()) {
lexrc >> dialogs_iconify_with_main;
break;
- case RC_PLAINTEXT_ROFF_COMMAND:
- lexrc >> plaintext_roff_command;
+ case RC_PLAINTEXT_ROFF_COMMAND:
+ (void) lexrc.getString(); // Obsoleted in 2.0
break;
case RC_PLAINTEXT_LINELEN:
lexrc >> plaintext_linelen;
break;
// Spellchecker settings:
- case RC_USE_SPELL_LIB:
- lexrc >> use_spell_lib;
- break;
- case RC_SPELL_COMMAND:
- lexrc >> isp_command;
- break;
case RC_ACCEPT_COMPOUND:
- lexrc >> isp_accept_compound;
+ lexrc >> spellchecker_accept_compound;
break;
case RC_USE_INP_ENC:
- lexrc >> isp_use_input_encoding;
+ lexrc >> spellchecker_use_input_encoding;
break;
case RC_USE_ALT_LANG:
- lexrc >> isp_use_alt_lang;
+ lexrc >> spellchecker_use_alt_lang;
break;
case RC_USE_PERS_DICT:
- lexrc >> isp_use_pers_dict;
+ lexrc >> spellchecker_use_pers_dict;
break;
case RC_USE_TOOLTIP:
lexrc >> use_tooltip;
lexrc >> use_pixmap_cache;
break;
case RC_USE_ESC_CHARS:
- lexrc >> isp_use_esc_chars;
+ lexrc >> spellchecker_use_esc_chars;
break;
case RC_ALT_LANG:
- lexrc >> isp_alt_lang;
+ lexrc >> spellchecker_alt_lang;
break;
case RC_PERS_DICT:
if (lexrc.next())
- isp_pers_dict = os::internal_path(lexrc.getString());
+ spellchecker_pers_dict = os::internal_path(lexrc.getString());
break;
case RC_ESC_CHARS:
- lexrc >> isp_esc_chars;
+ lexrc >> spellchecker_esc_chars;
break;
case RC_MAKE_BACKUP:
lexrc >> make_backup;
case RC_COPIER: {
string fmt, command;
- lexrc >> fmt >> command;
+ if (lexrc.next())
+ fmt = lexrc.getString();
+ if (lexrc.next(true))
+ command = lexrc.getString();
setMover(fmt, command);
break;
}
case RC_CONVERTER: {
string from, to, command, flags;
- lexrc >> from >> to >> command >> flags;
+ if (lexrc.next())
+ from = lexrc.getString();
+ if (lexrc.next())
+ to = lexrc.getString();
+ if (lexrc.next(true))
+ command = lexrc.getString();
+ if (lexrc.next())
+ flags = lexrc.getString();
if (command.empty())
theConverters().erase(from, to);
else
string format, extension, prettyname, shortcut;
lexrc >> format >> extension >> prettyname >> shortcut;
string viewer, editor;
- lexrc >> viewer >> editor;
+ if (lexrc.next(true))
+ viewer = lexrc.getString();
+ if (lexrc.next(true))
+ editor = lexrc.getString();
string flags;
// Hack to ensure compatibility with versions older
// than 1.5.0
else if (flag == "vector")
flgs |= Format::vector;
else
- lyxerr << "Ignoring unknown flag `"
+ LYXERR0("Ignoring unknown flag `"
<< flag << "' for format `"
- << format << "'." << endl;
+ << format << "'.");
}
if (prettyname.empty()) {
if (theConverters().formatIsUsed(format))
- LYXERR0( "Can't delete format " << format);
+ LYXERR0("Can't delete format " << format);
else
formats.erase(format);
} else {
lexrc >> default_language;
break;
+ case RC_GUI_LANGUAGE:
+ lexrc >> gui_language;
+ break;
+
case RC_LABEL_INIT_LENGTH:
lexrc >> label_init_length;
break;
else {
preview = PREVIEW_OFF;
if (tmp != "false" && tmp != "off")
- lyxerr << "Unrecognized "
- "preview status \""
- << tmp << '\n' << endl;
+ LYXERR0("Unrecognized preview status \""
+ << tmp << '\n');
}
}
break;
lexrc >> open_buffers_in_tabs;
break;
+ // Obsoleted in 2.0
+ case RC_SPELL_COMMAND:
+ case RC_USE_SPELL_LIB:
+ (void) lexrc.getString();
+ break;
+
case RC_LAST:
break; // this is just a dummy
}
};
+namespace {
+
+ // Escape \ and " so that LyXLex can read the string later
+ string escapeCommand(string const & str) {
+ return subst(subst(str , "\\", "\\\\"),
+ "\"", "\\\"");
+ }
+
+}
+
+
void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) const
{
LyXRCTags tag = RC_LAST;
}
if (tag == RC_LAST)
- os << "### This file is part of\n"
- << "### ========================================================\n"
- << "### LyX, The Document Processor\n"
- << "###\n"
- << "### Copyright 1995 Matthias Ettrich\n"
- << "### Copyright 1995-2007 The LyX Team.\n"
- << "###\n"
- << "### ========================================================\n"
- << "\n"
- << "# This file is written by LyX, if you want to make your own\n"
- << "# modifications you should do them from inside LyX and save\n"
+ 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";
// Why the switch you might ask. It is a trick to ensure that all
- // the elements in the LyXRCTags enum is handled. As you can see
+ // the elements in the LyXRCTags enum are handled. As you can see
// there are no breaks at all. So it is just a huge fall-through.
// The nice thing is that we will get a warning from the compiler
// if we forget an element.
if (ignore_system_lyxrc ||
display_graphics != system_lyxrc.display_graphics) {
os << "# Display graphics within LyX\n"
- << "# monochrome|grayscale|color|none\n"
+ << "# true|false\n"
<< "\\display_graphics "
- << graphics::displayTranslator().find(
- graphics::DisplayType(display_graphics))
+ << (display_graphics ? "true" : "false")
<< '\n';
}
if (tag != RC_LAST)
case RC_CHKTEX_COMMAND:
if (ignore_system_lyxrc ||
chktex_command != system_lyxrc.chktex_command) {
- os << "\\chktex_command \"" << chktex_command << "\"\n";
+ os << "\\chktex_command \"" << escapeCommand(chktex_command) << "\"\n";
}
if (tag != RC_LAST)
break;
case RC_BIBTEX_COMMAND:
if (ignore_system_lyxrc ||
bibtex_command != system_lyxrc.bibtex_command) {
- os << "\\bibtex_command \"" << bibtex_command << "\"\n";
+ os << "\\bibtex_command \"" << escapeCommand(bibtex_command) << "\"\n";
}
if (tag != RC_LAST)
break;
case RC_INDEX_COMMAND:
if (ignore_system_lyxrc ||
index_command != system_lyxrc.index_command) {
- os << "\\index_command \"" << index_command << "\"\n";
+ os << "\\index_command \"" << escapeCommand(index_command) << "\"\n";
+ }
+ if (tag != RC_LAST)
+ break;
+ case RC_NOMENCL_COMMAND:
+ if (ignore_system_lyxrc ||
+ nomencl_command != system_lyxrc.nomencl_command) {
+ os << "\\nomencl_command \"" << escapeCommand(nomencl_command) << "\"\n";
}
if (tag != RC_LAST)
break;
}
if (tag != RC_LAST)
break;
+ case RC_MAC_LIKE_WORD_MOVEMENT:
+ if (ignore_system_lyxrc ||
+ mac_like_word_movement
+ != system_lyxrc.mac_like_word_movement) {
+ os << "\\mac_like_word_movement "
+ << convert<string>(mac_like_word_movement) << '\n';
+ }
+ if (tag != RC_LAST)
+ break;
case RC_MACRO_EDIT_STYLE:
if (ignore_system_lyxrc ||
macro_edit_style
case RC_SET_COLOR:
for (int i = 0; i < Color_ignore; ++i) {
ColorCode lc = static_cast<ColorCode>(i);
-
- string const col(lcolor.getX11Name(lc));
- if (ignore_system_lyxrc ||
- col != system_lcolor.getX11Name(lc)) {
+ string const col = lcolor.getX11Name(lc);
+ if (ignore_system_lyxrc
+ || col != system_lcolor.getX11Name(lc)) {
os << "\\set_color \""
<< lcolor.getLyXName(lc) << "\" \""
<< col << "\"\n";
case RC_PRINT_COMMAND:
if (ignore_system_lyxrc ||
print_command != system_lyxrc.print_command) {
- os << "\\print_command \"" << print_command << "\"\n";
+ os << "\\print_command \"" << escapeCommand(print_command) << "\"\n";
}
if (tag != RC_LAST)
break;
case RC_PRINTSPOOL_COMMAND:
if (ignore_system_lyxrc ||
print_spool_command != system_lyxrc.print_spool_command) {
- os << "\\print_spool_command \"" << print_spool_command
+ os << "\\print_spool_command \"" << escapeCommand(print_spool_command)
<< "\"\n";
}
if (tag != RC_LAST)
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) {
<< "# PLAIN TEXT EXPORT SECTION ##############################\n"
<< "#\n\n";
- case RC_PLAINTEXT_ROFF_COMMAND:
- if (ignore_system_lyxrc ||
- plaintext_roff_command != system_lyxrc.plaintext_roff_command) {
- os << "\\plaintext_roff_command \"" << plaintext_roff_command
- << "\"\n";
- }
- if (tag != RC_LAST)
- break;
-
os << "\n#\n"
<< "# SPELLCHECKER SECTION ##############################\n"
<< "#\n\n";
- case RC_USE_SPELL_LIB:
- if (ignore_system_lyxrc ||
- use_spell_lib != system_lyxrc.use_spell_lib) {
- os << "\\use_spell_lib " << convert<string>(use_spell_lib) << '\n';
- }
- if (tag != RC_LAST)
- break;
case RC_SPELL_COMMAND:
- if (ignore_system_lyxrc ||
- isp_command != system_lyxrc.isp_command) {
- os << "\\spell_command \"" << isp_command << "\"\n";
- }
+ case RC_USE_SPELL_LIB:
+ // Obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_ACCEPT_COMPOUND:
if (ignore_system_lyxrc ||
- isp_accept_compound != system_lyxrc.isp_accept_compound) {
- os << "\\accept_compound " << convert<string>(isp_accept_compound)
+ spellchecker_accept_compound != system_lyxrc.spellchecker_accept_compound) {
+ os << "\\accept_compound " << convert<string>(spellchecker_accept_compound)
<< '\n';
}
if (tag != RC_LAST)
break;
case RC_USE_ALT_LANG:
if (ignore_system_lyxrc ||
- isp_use_alt_lang != system_lyxrc.isp_use_alt_lang) {
- os << "\\use_alt_language " << convert<string>(isp_use_alt_lang)
+ spellchecker_use_alt_lang != system_lyxrc.spellchecker_use_alt_lang) {
+ os << "\\use_alt_language " << convert<string>(spellchecker_use_alt_lang)
<< '\n';
}
if (tag != RC_LAST)
break;
case RC_ALT_LANG:
if (ignore_system_lyxrc ||
- isp_alt_lang != system_lyxrc.isp_alt_lang) {
- os << "\\alternate_language \"" << isp_alt_lang
+ spellchecker_alt_lang != system_lyxrc.spellchecker_alt_lang) {
+ os << "\\alternate_language \"" << spellchecker_alt_lang
<< "\"\n";
}
if (tag != RC_LAST)
break;
case RC_USE_ESC_CHARS:
if (ignore_system_lyxrc ||
- isp_use_esc_chars != system_lyxrc.isp_use_esc_chars) {
- os << "\\use_escape_chars " << convert<string>(isp_use_esc_chars)
+ spellchecker_use_esc_chars != system_lyxrc.spellchecker_use_esc_chars) {
+ os << "\\use_escape_chars " << convert<string>(spellchecker_use_esc_chars)
<< '\n';
}
if (tag != RC_LAST)
break;
case RC_ESC_CHARS:
if (ignore_system_lyxrc ||
- isp_esc_chars != system_lyxrc.isp_esc_chars) {
- os << "\\escape_chars \"" << isp_esc_chars << "\"\n";
+ spellchecker_esc_chars != system_lyxrc.spellchecker_esc_chars) {
+ os << "\\escape_chars \"" << spellchecker_esc_chars << "\"\n";
}
if (tag != RC_LAST)
break;
case RC_USE_PERS_DICT:
if (ignore_system_lyxrc ||
- isp_use_pers_dict != system_lyxrc.isp_use_pers_dict) {
+ spellchecker_use_pers_dict != system_lyxrc.spellchecker_use_pers_dict) {
os << "\\use_personal_dictionary "
- << convert<string>(isp_use_pers_dict)
+ << convert<string>(spellchecker_use_pers_dict)
<< '\n';
}
if (tag != RC_LAST)
<< '\n';
}
case RC_PERS_DICT:
- if (isp_pers_dict != system_lyxrc.isp_pers_dict) {
- string const path = os::external_path(isp_pers_dict);
+ if (spellchecker_pers_dict != system_lyxrc.spellchecker_pers_dict) {
+ string const path = os::external_path(spellchecker_pers_dict);
os << "\\personal_dictionary \"" << path << "\"\n";
}
if (tag != RC_LAST)
break;
case RC_USE_INP_ENC:
if (ignore_system_lyxrc ||
- isp_use_input_encoding
- != system_lyxrc.isp_use_input_encoding) {
+ spellchecker_use_input_encoding
+ != system_lyxrc.spellchecker_use_input_encoding) {
os << "\\use_input_encoding "
- << convert<string>(isp_use_input_encoding)
+ << convert<string>(spellchecker_use_input_encoding)
<< '\n';
}
if (tag != RC_LAST)
}
if (tag != RC_LAST)
break;
+ case RC_GUI_LANGUAGE:
+ if (ignore_system_lyxrc ||
+ gui_language != system_lyxrc.gui_language) {
+ os << "\\gui_language " << gui_language << '\n';
+ }
+ if (tag != RC_LAST)
+ break;
os << "\n#\n"
<< "# FORMATS SECTION ##########################\n"
<< cit->extension() << "\" \""
<< cit->prettyname() << "\" \""
<< cit->shortcut() << "\" \""
- << cit->viewer() << "\" \""
- << cit->editor() << "\" \"";
+ << escapeCommand(cit->viewer()) << "\" \""
+ << escapeCommand(cit->editor()) << "\" \"";
vector<string> flags;
if (cit->documentFormat())
flags.push_back("document");
converter->flags != cit->flags)
os << "\\converter \"" << cit->from << "\" \""
<< cit->to << "\" \""
- << cit->command << "\" \""
+ << escapeCommand(cit->command) << "\" \""
<< cit->flags << "\"\n";
}
it->second.command();
os << "\\copier " << fmt
- << " \"" << command << "\"\n";
+ << " \"" << escapeCommand(command) << "\"\n";
}
}
if (tag != RC_LAST)
str = _("LyX normally doesn't update the cursor position if you move the scrollbar. Set to true if you'd prefer to always have the cursor on screen.");
break;
+ case RC_MAC_LIKE_WORD_MOVEMENT:
+ str = _("Use the Mac OS X conventions for the word-level cursor movement");
+ break;
+
case RC_SHOW_MACRO_LABEL:
str = _("Show a small box around a Math Macro with the macro name when the cursor is inside.");
break;
str = _("Define the options of makeindex (cf. man makeindex) or select an alternative compiler. E.g., using xindy/make-rules, the command string would be \"makeindex.sh -m $$lang\".");
break;
+ case RC_NOMENCL_COMMAND:
+ str = _("Define the options of makeindex (cf. man makeindex) to be used for nomenclatures. This might differ from the index processing options.");
+ break;
+
case RC_INPUT:
break;
str = _("De-select if you don't want the startup banner.");
break;
- case RC_SPELL_COMMAND:
- str = _("What command runs the spellchecker?");
- break;
-
case RC_TEMPDIRPATH:
str = _("LyX will place its temporary directories in this path. They will be deleted when you quit LyX.");
break;