From 4590f1016b57eb5a2b9b0f0b969b0946f79cfa76 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Thu, 5 Jan 2017 14:25:36 +0100 Subject: [PATCH] Tweaks to the quotes GUI This follows some suggestions put forward yesterday. --- src/frontends/qt4/GuiDocument.cpp | 46 ++++-- src/frontends/qt4/GuiDocument.h | 2 + src/frontends/qt4/Menus.cpp | 258 +++++++++++------------------- src/insets/InsetQuotes.cpp | 197 ++++++++++++++++------- src/insets/InsetQuotes.h | 21 ++- 5 files changed, 282 insertions(+), 242 deletions(-) diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index 6ef39dcb4d..453e45dae3 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -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); diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h index c055378429..4206a9bf21 100644 --- a/src/frontends/qt4/GuiDocument.h +++ b/src/frontends/qt4/GuiDocument.h @@ -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_; diff --git a/src/frontends/qt4/Menus.cpp b/src/frontends/qt4/Menus.cpp index 81ce5764ae..de0c887d52 100644 --- a/src/frontends/qt4/Menus.cpp +++ b/src/frontends/qt4/Menus.cpp @@ -1675,186 +1675,106 @@ void MenuDefinition::expandQuotes(BufferView const * bv) map::const_iterator qq = styles.begin(); map::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); } diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp index 6ed66b2e3e..89da6a611d 100644 --- a/src/insets/InsetQuotes.cpp +++ b/src/insets/InsetQuotes.cpp @@ -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 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_); } diff --git a/src/insets/InsetQuotes.h b/src/insets/InsetQuotes.h index fa9c26b0ac..f9dd5aeafa 100644 --- a/src/insets/InsetQuotes.h +++ b/src/insets/InsetQuotes.h @@ -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); }; /// -- 2.39.2