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);
}
}
+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
{
}
-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)));
}
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_);
}