Ronen's patch for lfun language set

This adds an optional 'set' argument to the language lfun and reintroduces toggling.

Additions by me reintroduce the possibility to reset to the document language via 'language reset' or just 'language'
This commit is contained in:
Juergen Spitzmueller 2012-10-03 07:27:36 +02:00
parent 3b9c75ce27
commit e3e6befc54
3 changed files with 19 additions and 7 deletions

View File

@ -2514,9 +2514,14 @@ void LyXAction::init()
/*! /*!
* \var lyx::FuncCode lyx::LFUN_LANGUAGE * \var lyx::FuncCode lyx::LFUN_LANGUAGE
* \li Action: Set language from the current cursor position. * \li Action: Set language from the current cursor position.
* \li Syntax: language <LANG> * \li Syntax: language <LANG> [set]
* \li Params: <LANG>: Requested language. Look in lib/languages for * \li Params: <LANG>: Requested language. Look in lib/languages for
the list. the list. "language reset" or "language" (without param)
reset to the document language.
set: If used, the language will be set to the specified
language. Otherwise, the language will be toggled (i.e., if
the current language is LANG, switch to the document language
or the default language, if LANG is the document language).
* \li Origin: Dekel, 2 Mar 2000 * \li Origin: Dekel, 2 Mar 2000
* \endvar * \endvar
*/ */

View File

@ -1962,12 +1962,19 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
} }
case LFUN_LANGUAGE: { case LFUN_LANGUAGE: {
Language const * lang = languages.getLanguage(to_utf8(cmd.argument())); string const lang_arg = cmd.getArg(0);
if (!lang) bool const reset = (lang_arg.empty() || lang_arg == "reset");
Language const * lang =
reset ? reset_language
: languages.getLanguage(lang_arg);
// we allow reset_language, which is 0, but only if it
// was requested via empty or "reset" arg.
if (!lang && !reset)
break; break;
bool const toggle = (cmd.getArg(1) != "set");
selectWordWhenUnderCursor(cur, WHOLE_WORD_STRICT); selectWordWhenUnderCursor(cur, WHOLE_WORD_STRICT);
Font font(ignore_font, lang); Font font(ignore_font, lang);
toggleAndShow(cur, this, font, false); toggleAndShow(cur, this, font, toggle);
break; break;
} }
@ -2749,7 +2756,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
case LFUN_LANGUAGE: case LFUN_LANGUAGE:
enable = !cur.paragraph().isPassThru(); enable = !cur.paragraph().isPassThru();
flag.setOnOff(to_utf8(cmd.argument()) == cur.real_current_font.language()->lang()); flag.setOnOff(cmd.getArg(0) == cur.real_current_font.language()->lang());
break; break;
case LFUN_PARAGRAPH_BREAK: case LFUN_PARAGRAPH_BREAK:

View File

@ -887,7 +887,7 @@ void MenuDefinition::expandLanguageSelector(Buffer const * buf)
} }
} }
MenuItem w(MenuItem::Command, label, MenuItem w(MenuItem::Command, label,
FuncRequest(LFUN_LANGUAGE, (*cit)->lang())); FuncRequest(LFUN_LANGUAGE, (*cit)->lang() + " set"));
item.submenu().addWithStatusCheck(w); item.submenu().addWithStatusCheck(w);
} }
item.submenu().add(MenuItem(MenuItem::Separator)); item.submenu().add(MenuItem(MenuItem::Separator));