]> git.lyx.org Git - features.git/commitdiff
Tweaks to the quotes GUI
authorJuergen Spitzmueller <spitz@lyx.org>
Thu, 5 Jan 2017 13:25:36 +0000 (14:25 +0100)
committerJuergen Spitzmueller <spitz@lyx.org>
Thu, 5 Jan 2017 13:25:36 +0000 (14:25 +0100)
This follows some suggestions put forward yesterday.

src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/GuiDocument.h
src/frontends/qt4/Menus.cpp
src/insets/InsetQuotes.cpp
src/insets/InsetQuotes.h

index 6ef39dcb4def5ac21e4392e1f1647b87507beca5..453e45dae31b6a8a211693764b95fe7ad9ea1c0d 100644 (file)
@@ -1069,13 +1069,6 @@ GuiDocument::GuiDocument(GuiView & lv)
        encodinglist.sort();
        langModule->encodingCO->addItems(encodinglist);
 
-       for (int i = 0; i < quoteparams.stylescount(); ++i) {
-               InsetQuotesParams::QuoteStyle qs = InsetQuotesParams::QuoteStyle(i);
-               if (qs == InsetQuotesParams::DynamicQuotes)
-                       continue;
-               langModule->quoteStyleCO->addItem(toqstr(quoteparams.getGuiLabel(qs)), qs);
-       }
-
        langModule->languagePackageCO->addItem(
                qt_("Default"), toqstr("default"));
        langModule->languagePackageCO->addItem(
@@ -1760,6 +1753,38 @@ void GuiDocument::deleteBoxBackgroundColor()
 }
 
 
+void GuiDocument::updateQuoteStyles(bool const set)
+{
+       Language const * lang = lyx::languages.getLanguage(
+               fromqstr(langModule->languageCO->itemData(
+                       langModule->languageCO->currentIndex()).toString()));
+
+       InsetQuotesParams::QuoteStyle def = bp_.getQuoteStyle(lang->quoteStyle());
+
+       langModule->quoteStyleCO->clear();
+
+       bool has_default = false;
+       for (int i = 0; i < quoteparams.stylescount(); ++i) {
+               InsetQuotesParams::QuoteStyle qs = InsetQuotesParams::QuoteStyle(i);
+               if (qs == InsetQuotesParams::DynamicQuotes)
+                       continue;
+               bool const langdef = (qs == def);
+               if (langdef) {
+                       // add the default style on top
+                       langModule->quoteStyleCO->insertItem(0,
+                               toqstr(quoteparams.getGuiLabel(qs, langdef)), qs);
+                       has_default = true;
+               }
+               else
+                       langModule->quoteStyleCO->addItem(
+                               toqstr(quoteparams.getGuiLabel(qs, langdef)), qs);
+       }
+       if (set && has_default)
+               // (re)set to the default style
+               langModule->quoteStyleCO->setCurrentIndex(0);
+}
+
+
 void GuiDocument::languageChanged(int i)
 {
        // some languages only work with polyglossia
@@ -1784,10 +1809,7 @@ void GuiDocument::languageChanged(int i)
        }
 
        // set appropriate quotation mark style
-       if (!lang->quoteStyle().empty()) {
-               langModule->quoteStyleCO->setCurrentIndex(
-                       bp_.getQuoteStyle(lang->quoteStyle()));
-       }
+       updateQuoteStyles(true);
 }
 
 
@@ -3067,6 +3089,8 @@ void GuiDocument::paramsToDialog()
                bp_.language->lang()));
        langModule->languageCO->setCurrentIndex(pos);
 
+       updateQuoteStyles();
+
        langModule->quoteStyleCO->setCurrentIndex(
                bp_.quotes_style);
        langModule->dynamicQuotesCB->setChecked(bp_.dynamic_quotes);
index c055378429a28c03c8f255c437ba3a385a3c2980..4206a9bf21ed07fec2257d8b6df9f1b280e3f5b4 100644 (file)
@@ -184,6 +184,8 @@ private:
        void useClassDefaults();
        ///
        void setLayoutComboByIDString(std::string const & idString);
+       /// Update quotes styles combo, indicating the current language's default
+       void updateQuoteStyles(bool const set = false);
 
        /// available modules
        GuiIdListModel modules_av_model_;
index 81ce5764ae7e839c281452da9883e378cbb20fd4..de0c887d528546993a78639e8fa75427933aac9c 100644 (file)
@@ -1675,186 +1675,106 @@ void MenuDefinition::expandQuotes(BufferView const * bv)
        map<string, docstring>::const_iterator qq = styles.begin();
        map<string, docstring>::const_iterator end = styles.end();
 
-       MenuDefinition eqs;
-       MenuDefinition sqs;
-       MenuDefinition gqs;
-       MenuDefinition pqs;
-       MenuDefinition cqs;
        MenuDefinition aqs;
-       MenuDefinition qqs;
-       MenuDefinition bqs;
-       MenuDefinition wqs;
-       MenuDefinition fqs;
-       MenuDefinition iqs;
-       MenuDefinition rqs;
-       MenuDefinition jqs;
-       MenuDefinition kqs;
-       MenuDefinition xqs;
-       InsetQuotesParams::QuoteStyle globalqs =
-                       bv->buffer().masterBuffer()->params().quotes_style;
-       FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype xld"));
-       docstring desc = bformat(_("%1$stext (dynamic)"),
-                                docstring(1, quoteparams.getQuoteChar(globalqs,
-                                                                      InsetQuotesParams::PrimaryQuotes,
-                                                                      InsetQuotesParams::OpeningQuote)));
-       if (prefixIs(qtype, "x"))
+
+       BufferParams const & bp = bv->buffer().masterBuffer()->params();
+
+       // The global setting
+       InsetQuotesParams::QuoteStyle globalqs = bp.quotes_style;
+       char const globalqsc = quoteparams.getStyleChar(globalqs);
+
+       // The current language's default
+       InsetQuotesParams::QuoteStyle langdefqs =
+               bp.getQuoteStyle(bv->cursor().current_font.language()->quoteStyle());
+       char const langqs = quoteparams.getStyleChar(langdefqs);
+
+       bool main_global_qs = false;
+       bool main_langdef_qs = false;
+       bool main_dynamic_qs = false;
+       docstring const subcmd = from_ascii("changetype ");
+       docstring const wildcards = from_ascii("..");
+       // Add the items
+       // First the top level menu (all glyphs of the current style) ...
+       // Begin with dynamic (if they are current style),
+       if (qtype[0] == 'x') {
+               FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + from_ascii("xld"));
+               docstring desc = bformat(_("%1$s (dynamic)"),
+                       quoteparams.getShortGuiLabel(globalqsc + from_ascii("ld")));
                add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       else
-               xqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype xls"));
-       desc = bformat(_("%1$stext (dynamic)"),
-                      docstring(1, quoteparams.getQuoteChar(globalqs, 
-                                                            InsetQuotesParams::SecondaryQuotes,
-                                                            InsetQuotesParams::OpeningQuote)));
-       if (prefixIs(qtype, "x"))
+               cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + from_ascii("xls"));
+               desc = bformat(_("%1$s (dynamic)"),
+                       quoteparams.getShortGuiLabel(globalqsc + from_ascii("ls")));
                add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       else
-               xqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype xrd"));
-       desc = bformat(_("text%1$s (dynamic)"),
-                      docstring(1, quoteparams.getQuoteChar(globalqs,
-                                                            InsetQuotesParams::PrimaryQuotes,
-                                                            InsetQuotesParams::ClosingQuote)));
-       if (prefixIs(qtype, "x"))
+               cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + from_ascii("xrd"));
+               desc = bformat(_("%1$s (dynamic)"),
+                       quoteparams.getShortGuiLabel(globalqsc + from_ascii("rd")));
                add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       else
-               xqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype xrs"));
-       desc = bformat(_("text%1$s (dynamic)"),
-                      docstring(1, quoteparams.getQuoteChar(globalqs,
-                                                            InsetQuotesParams::SecondaryQuotes,
-                                                            InsetQuotesParams::ClosingQuote)));
-       if (prefixIs(qtype, "x"))
+               cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + from_ascii("xrs"));
+               desc = bformat(_("%1$s (dynamic)"),
+                       quoteparams.getShortGuiLabel(globalqsc + from_ascii("rs")));
                add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       else
-               xqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-
+               main_dynamic_qs = true;
+       }
+       // now traverse through the static styles ...
        for (; qq != end; ++qq) {
                docstring const style = from_ascii(qq->first);
-               cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype ") + style);
-               desc = contains(style, 'l') ? 
-                       bformat(_("%1$stext"), qq->second) : bformat(_("text%1$s"), qq->second);
-               if (prefixIs(style, qtype[0]))
+               bool langdef = (style[0] == langqs);
+               bool globaldef = (style[0] == globalqsc);
+               
+               if (prefixIs(style, qtype[0])) {
+                       FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + style);
+                       docstring const desc = quoteparams.getShortGuiLabel(style);
                        add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'e') && !prefixIs(qtype, "e"))
-                       eqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 's') && !prefixIs(qtype, "s"))
-                       sqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'g') && !prefixIs(qtype, "g"))
-                       gqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'p') && !prefixIs(qtype, "p"))
-                       pqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'c') && !prefixIs(qtype, "c"))
-                       cqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'a') && !prefixIs(qtype, "a"))
+                       main_global_qs = globaldef;
+                       main_langdef_qs = langdef;
+               }
+               else if (!langdef && !globaldef && suffixIs(style, from_ascii("ld"))) {
+                       docstring const desc =
+                               quoteparams.getGuiLabel(quoteparams.getQuoteStyle(to_ascii(style)));
+                       FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + style[0] + "..");
                        aqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'q') && !prefixIs(qtype, "q"))
-                       qqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'b') && !prefixIs(qtype, "b"))
-                       bqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'w') && !prefixIs(qtype, "w"))
-                       wqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'f') && !prefixIs(qtype, "f"))
-                       fqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'i') && !prefixIs(qtype, "i"))
-                       iqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'r') && !prefixIs(qtype, "r"))
-                       rqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'j') && !prefixIs(qtype, "j"))
-                       jqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-               else if (prefixIs(style, 'k') && !prefixIs(qtype, "k"))
-                       kqs.add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
-       }
-
-       if (!xqs.empty()) {
-               MenuItem item(MenuItem::Submenu, qt_("Dynamic Quotation Marks"));
-               item.setSubmenu(xqs);
-               add(item);
-       }
-       if (!eqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::EnglishQuotes)));
-               item.setSubmenu(eqs);
-               add(item);
-       }
-       if (!sqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::SwedishQuotes)));
-               item.setSubmenu(sqs);
-               add(item);
-       }
-       if (!gqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::GermanQuotes)));
-               item.setSubmenu(gqs);
-               add(item);
-       }
-       if (!pqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::PolishQuotes)));
-               item.setSubmenu(pqs);
-               add(item);
-       }
-       if (!cqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::SwissQuotes)));
-               item.setSubmenu(cqs);
-               add(item);
-       }
-       if (!aqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::DanishQuotes)));
-               item.setSubmenu(aqs);
-               add(item);
-       }
-       if (!qqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::PlainQuotes)));
-               item.setSubmenu(qqs);
-               add(item);
-       }
-       if (!bqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::BritishQuotes)));
-               item.setSubmenu(bqs);
-               add(item);
-       }
-       if (!wqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::SwedishGQuotes)));
-               item.setSubmenu(wqs);
-               add(item);
-       }
-       if (!fqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::FrenchQuotes)));
-               item.setSubmenu(fqs);
-               add(item);
-       }
-       if (!iqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::FrenchINQuotes)));
-               item.setSubmenu(iqs);
-               add(item);
-       }
-       if (!rqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::RussianQuotes)));
-               item.setSubmenu(rqs);
-               add(item);
-       }
-       if (!jqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::CJKQuotes)));
-               item.setSubmenu(jqs);
-               add(item);
+               }
        }
-       if (!kqs.empty()) {
-               MenuItem item(MenuItem::Submenu,
-                             toqstr(quoteparams.getGuiLabel(InsetQuotesParams::CJKAngleQuotes)));
-               item.setSubmenu(kqs);
-               add(item);
+
+       add(MenuItem(MenuItem::Separator));
+
+       bool have_section = false;
+       bool display_static = false;
+       // ... then potentially items to reset to the defaults and to dynamic style ...
+       if (!main_dynamic_qs && globalqsc != 'x') {
+               FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + 'x' + wildcards);
+               docstring const desc = bformat(_("Use dynamic quotes (%1$s)|d"),
+                                               quoteparams.getGuiLabel(globalqs));
+               add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
+               have_section = true;
+               display_static = true;
+       }
+       if (!main_global_qs && langdefqs != globalqs) {
+               docstring const variant = main_dynamic_qs ? _("dynamic[[Quotes]]") : _("static[[Quotes]]");
+               FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + globalqsc + wildcards);
+               docstring const desc = bformat(_("Reset to document default (%1$s, %2$s)|o"),
+                                               quoteparams.getGuiLabel(globalqs), variant);
+               add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
+               have_section = true;
+       }
+       if (!main_langdef_qs) {
+               FuncRequest cmd = FuncRequest(LFUN_INSET_MODIFY, subcmd + globalqsc + wildcards);
+               docstring const desc = (main_dynamic_qs || display_static) 
+                                       ? bformat(_("Reset to language default (%1$s, %2$s)|l"),
+                                                 quoteparams.getGuiLabel(langdefqs), _("static[[Quotes]]"))
+                                       : bformat(_("Reset to language default (%1$s)|l"),
+                                                 quoteparams.getGuiLabel(langdefqs));
+               add(MenuItem(MenuItem::Command, toqstr(desc), cmd));
+               have_section = true;
        }
+
+       if (have_section)
+               add(MenuItem(MenuItem::Separator));
+
+       // ... and a subitem with the rest
+       MenuItem item(MenuItem::Submenu, qt_("Change Style|y"));
+       item.setSubmenu(aqs);
+       add(item);
 }
 
 
index 6ed66b2e3ede5d3d09bc9af457e7b5a57c0a23fc..89da6a611dddc9175b26b99006aa1b0e4f292989 100644 (file)
@@ -93,6 +93,111 @@ int InsetQuotesParams::stylescount() const
 }
 
 
+char InsetQuotesParams::getStyleChar(QuoteStyle const & style) const
+{
+       return style_char[style];
+}
+
+
+InsetQuotesParams::QuoteStyle InsetQuotesParams::getQuoteStyle(string const & s,
+                           bool const allow_wildcards, QuoteStyle fb)
+{
+       QuoteStyle res = fb;
+
+       string str = s;
+       if (str.length() != 3) {
+               LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                       " bad string length.");
+               str = "eld";
+       }
+
+       int i;
+
+       // '.' wildcard means: keep current style
+       if (!allow_wildcards || str[0] != '.') {
+               for (i = 0; i < stylescount(); ++i) {
+                       if (str[0] == style_char[i]) {
+                               res = QuoteStyle(i);
+                               break;
+                       }
+               }
+               if (i >= stylescount()) {
+                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                               " bad style specification.");
+                       res = EnglishQuotes;
+               }
+       }
+
+       return res;
+}
+
+
+InsetQuotesParams::QuoteSide InsetQuotesParams::getQuoteSide(string const & s,
+                       bool const allow_wildcards, QuoteSide fb)
+{
+       QuoteSide res = fb;
+
+       string str = s;
+       if (str.length() != 3) {
+               LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                       " bad string length.");
+               str = "eld";
+       }
+
+       int i;
+
+       // '.' wildcard means: keep current side
+       if (!allow_wildcards || str[1] != '.') {
+               for (i = 0; i < 2; ++i) {
+                       if (str[1] == side_char[i]) {
+                               res = InsetQuotesParams::QuoteSide(i);
+                               break;
+                       }
+               }
+               if (i >= 2) {
+                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                               " bad side specification.");
+                       res = OpeningQuote;
+               }
+       }
+
+       return res;
+}
+
+
+InsetQuotesParams::QuoteLevel InsetQuotesParams::getQuoteLevel(string const & s,
+                       bool const allow_wildcards, QuoteLevel fb)
+{
+       QuoteLevel res = fb;
+
+       string str = s;
+       if (str.length() != 3) {
+               LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                       " bad string length.");
+               str = "eld";
+       }
+
+       int i;
+
+       // '.' wildcard means: keep current level
+       if (!allow_wildcards || str[2] != '.') {
+               for (i = 0; i < 2; ++i) {
+                       if (str[2] == level_char[i]) {
+                               res = InsetQuotesParams::QuoteLevel(i);
+                               break;
+                       }
+               }
+               if (i >= 2) {
+                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
+                               " bad level specification.");
+                       res = InsetQuotesParams::PrimaryQuotes;
+               }
+       }
+
+       return res;
+}
+
+
 char_type InsetQuotesParams::getQuoteChar(QuoteStyle const & style, QuoteLevel const & level,
                                    QuoteSide const & side) const
 {
@@ -456,14 +561,36 @@ map<string, docstring> InsetQuotesParams::getTypes() const
 }
 
 
-docstring const InsetQuotesParams::getGuiLabel(QuoteStyle const & qs)
+docstring const InsetQuotesParams::getGuiLabel(QuoteStyle const & qs, bool langdef)
 {
-       return bformat(_("%1$souter%2$s and %3$sinner%4$s[[quotation marks]]"),
-               docstring(1, quoteparams.getQuoteChar(qs, PrimaryQuotes, OpeningQuote)),
-               docstring(1, quoteparams.getQuoteChar(qs, PrimaryQuotes, ClosingQuote)),
-               docstring(1, quoteparams.getQuoteChar(qs, SecondaryQuotes, OpeningQuote)),
-               docstring(1, quoteparams.getQuoteChar(qs, SecondaryQuotes, ClosingQuote))
-               );
+       docstring const styledesc =
+               bformat(_("%1$souter%2$s and %3$sinner%4$s[[quotation marks]]"),
+                       docstring(1, getQuoteChar(qs, PrimaryQuotes, OpeningQuote)),
+                       docstring(1, getQuoteChar(qs, PrimaryQuotes, ClosingQuote)),
+                       docstring(1, getQuoteChar(qs, SecondaryQuotes, OpeningQuote)),
+                       docstring(1, getQuoteChar(qs, SecondaryQuotes, ClosingQuote))
+                       );
+
+       if (!langdef)
+               return styledesc;
+
+       return bformat(_("%1$s[[quot. mark description]] (language default)"),
+                       styledesc);
+}
+
+
+docstring const InsetQuotesParams::getShortGuiLabel(docstring const string)
+{
+       std::string const s = to_ascii(string);
+       QuoteStyle const style = getQuoteStyle(s);
+       QuoteSide const side = getQuoteSide(s);
+       QuoteLevel const level = getQuoteLevel(s);
+
+       return (side == OpeningQuote) ?
+               bformat(_("%1$stext"),
+                      docstring(1, getQuoteChar(style, level, side))) :
+               bformat(_("text%1$s"),
+                      docstring(1, getQuoteChar(style, level, side)));
 }
 
 
@@ -536,59 +663,9 @@ void InsetQuotes::setSide(char_type c)
 
 void InsetQuotes::parseString(string const & s, bool const allow_wildcards)
 {
-       string str = s;
-       if (str.length() != 3) {
-               lyxerr << "ERROR (InsetQuotes::InsetQuotes):"
-                       " bad string length." << endl;
-               str = "eld";
-       }
-
-       int i;
-
-       // '.' wildcard means: keep current stylee
-       if (!allow_wildcards || str[0] != '.') {
-               for (i = 0; i < quoteparams.stylescount(); ++i) {
-                       if (str[0] == style_char[i]) {
-                               style_ = InsetQuotesParams::QuoteStyle(i);
-                               break;
-                       }
-               }
-               if (i >= quoteparams.stylescount()) {
-                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
-                               " bad style specification.");
-                       style_ = InsetQuotesParams::EnglishQuotes;
-               }
-       }
-
-       // '.' wildcard means: keep current side
-       if (!allow_wildcards || str[1] != '.') {
-               for (i = 0; i < 2; ++i) {
-                       if (str[1] == side_char[i]) {
-                               side_ = InsetQuotesParams::QuoteSide(i);
-                               break;
-                       }
-               }
-               if (i >= 2) {
-                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
-                               " bad side specification.");
-                       side_ = InsetQuotesParams::OpeningQuote;
-               }
-       }
-
-       // '.' wildcard means: keep current level
-       if (!allow_wildcards || str[2] != '.') {
-               for (i = 0; i < 2; ++i) {
-                       if (str[2] == level_char[i]) {
-                               level_ = InsetQuotesParams::QuoteLevel(i);
-                               break;
-                       }
-               }
-               if (i >= 2) {
-                       LYXERR0("ERROR (InsetQuotes::InsetQuotes):"
-                               " bad level specification.");
-                       level_ = InsetQuotesParams::PrimaryQuotes;
-               }
-       }
+       style_ = quoteparams.getQuoteStyle(s, allow_wildcards, style_);
+       side_ = quoteparams.getQuoteSide(s, allow_wildcards, side_);
+       level_ = quoteparams.getQuoteLevel(s, allow_wildcards, level_);
 }
 
 
index fa9c26b0acaf5848c3cab5688b8938835880fdb9..f9dd5aeafa789cd98cdbc77db267c0bb5c13b39e 100644 (file)
@@ -81,10 +81,27 @@ public:
        docstring getLaTeXQuote(char_type c, std::string const &) const;
        ///
        docstring getHTMLQuote(char_type c) const;
-       /// Returns a label suitable for dialog and menu
-       docstring const getGuiLabel(QuoteStyle const & qs);
+       /// Returns a descriptive label of a style suitable for dialog and menu
+       docstring const getGuiLabel(QuoteStyle const & qs,
+                                   bool langdef = false);
+       /// Returns a descriptive label of a given char
+       docstring const getShortGuiLabel(docstring const string);
        ///
        int stylescount() const;
+       /// Returns the matching style shortcut char
+       char getStyleChar(QuoteStyle const & style) const;
+       /// Returns the quote style from the shortcut string
+       QuoteStyle getQuoteStyle(std::string const & s,
+               bool const allow_wildcards = false,
+               QuoteStyle fallback = EnglishQuotes);
+       /// Returns the quote sind from the shortcut string
+       QuoteSide getQuoteSide(std::string const & s,
+               bool const allow_wildcards = false,
+               QuoteSide fallback = OpeningQuote);
+       /// Returns the quote level from the shortcut string
+       QuoteLevel getQuoteLevel(std::string const & s,
+               bool const allow_wildcards = false,
+               QuoteLevel fallback = PrimaryQuotes);
 };
 
 ///