]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/Menus.cpp
Account for old versions of Pygments
[lyx.git] / src / frontends / qt4 / Menus.cpp
index 1100dd30e36a057dd4ffa72cabcb91c6a5974263..627ec4c4c95c31be9ff7c4694c7a3266488c1fab 100644 (file)
@@ -135,6 +135,9 @@ public:
                /** This is a list of exportable formats
                    typically for the File->Export menu. */
                ExportFormats,
+               /** This exports the document default format
+                   typically for the File->Export menu. */
+               ExportFormat,
                /** This is a list of importable formats
                    typically for the File->Import menu. */
                ImportFormats,
@@ -351,6 +354,7 @@ public:
        void expandFloatListInsert(Buffer const * buf);
        void expandFloatInsert(Buffer const * buf);
        void expandFlexInsert(Buffer const * buf, InsetLayout::InsetLyXType type);
+       void expandTocSubmenu(std::string const & type, Toc const & toc_list);
        void expandToc2(Toc const & toc_list, size_t from, size_t to, int depth, string toc_type);
        void expandToc(Buffer const * buf);
        void expandPasteRecent(Buffer const * buf);
@@ -453,6 +457,7 @@ void MenuDefinition::read(Lexer & lex)
                md_custom,
                md_elements,
                md_endmenu,
+               md_exportformat,
                md_exportformats,
                md_importformats,
                md_indices,
@@ -494,6 +499,7 @@ void MenuDefinition::read(Lexer & lex)
                { "elements", md_elements },
                { "end", md_endmenu },
                { "environmentseparators", md_env_separators },
+               { "exportformat", md_exportformat },
                { "exportformats", md_exportformats },
                { "floatinsert", md_floatinsert },
                { "floatlistinsert", md_floatlistinsert },
@@ -586,6 +592,10 @@ void MenuDefinition::read(Lexer & lex)
                        add(MenuItem(MenuItem::ExportFormats));
                        break;
 
+               case md_exportformat:
+                       add(MenuItem(MenuItem::ExportFormat));
+                       break;
+
                case md_importformats:
                        add(MenuItem(MenuItem::ImportFormats));
                        break;
@@ -980,6 +990,8 @@ void MenuDefinition::expandDocuments()
                QString label = toqstr(b.fileName().displayName(20));
                if (!b.isClean())
                        label += "*";
+               if (b.notifiesExternalModification())
+                       label += QChar(0x26a0);
                if (i < 10)
                        label = QString::number(i) + ". " + label + '|' + QString::number(i);
                add(MenuItem(MenuItem::Command, label,
@@ -997,6 +1009,8 @@ void MenuDefinition::expandDocuments()
                        QString label = toqstr(b->fileName().displayName(20));
                        if (!b->isClean())
                                label += "*";
+                       if (b->notifiesExternalModification())
+                               label += QChar(0x26a0);
                        if (i < 10)
                                label = QString::number(i) + ". " + label + '|' + QString::number(i);
                        item.submenu().add(MenuItem(MenuItem::Command, label,
@@ -1207,7 +1221,7 @@ void MenuDefinition::expandFlexInsert(
                }
        }
        // FIXME This is a little clunky.
-       if (items_.empty() && type == InsetLayout::CUSTOM && !buf->isReadonly())
+       if (items_.empty() && type == InsetLayout::CUSTOM && !buf->hasReadonlyFlag())
                add(MenuItem(MenuItem::Help, qt_("No Custom Insets Defined!")));
 }
 
@@ -1310,25 +1324,20 @@ void MenuDefinition::expandToc(Buffer const * buf)
        }
 
        MenuDefinition other_lists;
-       FloatList const & floatlist = buf->params().documentClass().floats();
-       TocList const & toc_list = buf->tocBackend().tocs();
-       TocList::const_iterator cit = toc_list.begin();
-       TocList::const_iterator end = toc_list.end();
-       for (; cit != end; ++cit) {
+       // In the navigation menu, only add tocs from this document
+       TocBackend const & backend = buf->tocBackend();
+       TocList const & toc_list = backend.tocs();
+       for (pair<string, shared_ptr<Toc>> const & toc : toc_list) {
                // Handle table of contents later
-               if (cit->first == "tableofcontents" || cit->second->empty())
+               if (toc.first == "tableofcontents" || toc.second->empty())
                        continue;
                MenuDefinition submenu;
-               // "Open outliner..." entry
-               FuncRequest f(LFUN_DIALOG_SHOW, "toc " + cit->first);
-               submenu.add(MenuItem(MenuItem::Command, qt_("Open Outliner..."), f));
-               submenu.add(MenuItem(MenuItem::Separator));
-               // add entries
-               submenu.expandToc2(*cit->second, 0, cit->second->size(), 0, cit->first);
-               MenuItem item(MenuItem::Submenu, guiName(cit->first, buf->params()));
+               submenu.expandTocSubmenu(toc.first, *toc.second);
+               docstring const toc_name = backend.outlinerName(toc.first);
+               MenuItem item(MenuItem::Submenu, toqstr(toc_name));
                item.setSubmenu(submenu);
                // deserves to be in the main menu?
-               if (floatlist.typeExist(cit->first) || cit->first == "child")
+               if (!TocBackend::isOther(toc.first))
                        add(item);
                else
                        other_lists.add(item);
@@ -1340,8 +1349,8 @@ void MenuDefinition::expandToc(Buffer const * buf)
        }
        // Handle normal TOC
        add(MenuItem(MenuItem::Separator));
-       cit = toc_list.find("tableofcontents");
-       if (cit == end)
+       TocList::const_iterator cit = toc_list.find("tableofcontents");
+       if (cit == toc_list.end())
                LYXERR(Debug::GUI, "No table of contents.");
        else {
                if (!cit->second->empty())
@@ -1353,6 +1362,17 @@ void MenuDefinition::expandToc(Buffer const * buf)
 }
 
 
+void MenuDefinition::expandTocSubmenu(std::string const & type, Toc const & toc)
+{
+       // "Open outliner..." entry
+       FuncRequest f(LFUN_DIALOG_SHOW, "toc " + type);
+       add(MenuItem(MenuItem::Command, qt_("Open Outliner..."), f));
+       add(MenuItem(MenuItem::Separator));
+       // add entries
+       expandToc2(toc, 0, toc.size(), 0, type);
+}
+
+
 void MenuDefinition::expandPasteRecent(Buffer const * buf)
 {
        docstring_list const sel = cap::availableSelections(buf);
@@ -1392,7 +1412,7 @@ void MenuDefinition::expandToolbars()
 
 void MenuDefinition::expandBranches(Buffer const * buf)
 {
-       if (!buf || buf->isReadonly())
+       if (!buf || buf->hasReadonlyFlag())
                return;
 
        BufferParams const & master_params = buf->masterBuffer()->params();
@@ -1529,10 +1549,11 @@ void MenuDefinition::expandCiteStyles(BufferView const * bv)
                                    FuncRequest(LFUN_NOACTION)));
                return;
        }
-       InsetCommand const * citinset =
-                               static_cast<InsetCommand const *>(inset);
+       InsetCitation const * citinset =
+                               static_cast<InsetCitation const *>(inset);
 
        Buffer const * buf = &bv->buffer();
+       BufferParams const & bp = buf->masterParams();
        string const cmd = citinset->params().getCmdName();
 
        docstring const & key = citinset->getParam("key");
@@ -1543,33 +1564,85 @@ void MenuDefinition::expandCiteStyles(BufferView const * bv)
                return;
        }
 
-       docstring const & before = citinset->getParam("before");
-       docstring const & after = citinset->getParam("after");
-
        size_t const n = cmd.size();
-       bool const force = cmd[0] == 'C';
-       bool const full = cmd[n] == '*';
+       bool const force = isUpperCase(cmd[0]);
+       bool const star = cmd[n] == '*';
 
        vector<docstring> const keys = getVectorFromString(key);
 
-       vector<CitationStyle> const citeStyleList = buf->params().citeStyles();
-       static const size_t max_length = 40;
-       vector<docstring> citeStrings =
-               buf->masterBibInfo().getCiteStrings(keys, citeStyleList, bv->buffer(),
-               before, after, from_utf8("dialog"), max_length);
-
-       vector<docstring>::const_iterator cit = citeStrings.begin();
-       vector<docstring>::const_iterator end = citeStrings.end();
+       vector<CitationStyle> const citeStyleList = bp.citeStyles();
+
+       CitationStyle cs = citinset->getCitationStyle(bp, cmd, citeStyleList);
+       bool const qualified = cs.hasQualifiedList
+               && (keys.size() > 1
+                   || !citinset->getParam("pretextlist").empty()
+                   || !citinset->getParam("posttextlist").empty());
+       std::map<docstring, docstring> pres =
+               citinset->getQualifiedLists(citinset->getParam("pretextlist"));
+       std::map<docstring, docstring> posts =
+               citinset->getQualifiedLists(citinset->getParam("posttextlist"));
+
+       CiteItem ci;
+       ci.textBefore = citinset->getParam("before");
+       ci.textAfter = citinset->getParam("after");
+       ci.forceUpperCase = force;
+       ci.Starred = star;
+       ci.context = CiteItem::Dialog;
+       ci.max_size = 40;
+       ci.isQualified = qualified;
+       ci.pretexts = pres;
+       ci.posttexts = posts;
+       BiblioInfo::CiteStringMap citeStrings =
+               buf->masterBibInfo().getCiteStrings(keys, citeStyleList, bv->buffer(), ci);
+
+       BiblioInfo::CiteStringMap::const_iterator cit = citeStrings.begin();
+       BiblioInfo::CiteStringMap::const_iterator end = citeStrings.end();
 
        for (int ii = 1; cit != end; ++cit, ++ii) {
-               docstring label = *cit;
+               docstring label = cit->second;
                CitationStyle cs = citeStyleList[ii - 1];
                cs.forceUpperCase &= force;
-               cs.fullAuthorList &= full;
+               cs.hasStarredVersion &= star;
                addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(label),
                                    FuncRequest(LFUN_INSET_MODIFY,
                                                "changetype " + from_utf8(citationStyleToString(cs)))));
        }
+
+       if (cs.hasStarredVersion) {
+               docstring starred = _("All authors|h");
+               // Check if we have a custom string/tooltip for the starred version
+               if (!cs.stardesc.empty()) {
+                       string val =
+                               bp.documentClass().getCiteMacro(buf->params().citeEngineType(), cs.stardesc);
+                       if (!val.empty())
+                               starred = translateIfPossible(from_utf8(val));
+                       // Transform qt-style accelerators to menu-style
+                       int const amps = count_char(starred, '&');
+                       if (amps > 0) {
+                               if (amps > 1)
+                                       starred = subst(starred, from_ascii("&&"), from_ascii("<:amp:>"));
+                               size_t n = starred.find('&');
+                               char_type accel = char_type();
+                               if (n != docstring::npos && n < starred.size() - 1)
+                                       accel = starred[n + 1];
+                               starred = subst(starred, from_ascii("&"), from_ascii(""));
+                               if (amps > 1)
+                                       starred = subst(starred, from_ascii("<:amp:>"), from_ascii("&&"));
+                               if (accel != char_type())
+                                       starred = starred + '|' + accel;
+                       }
+               }
+               add(MenuItem(MenuItem::Separator));
+               addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(starred),
+                                   FuncRequest(LFUN_INSET_MODIFY, "toggleparam star")));
+       }
+
+       if (cs.forceUpperCase) {
+               if (!cs.hasStarredVersion)
+                       add(MenuItem(MenuItem::Separator));
+               addWithStatusCheck(MenuItem(MenuItem::Command, toqstr(_("Force upper case|u")),
+                                   FuncRequest(LFUN_INSET_MODIFY, "toggleparam casing")));
+       }
 }
 
 
@@ -1616,7 +1689,7 @@ void MenuDefinition::expandCaptions(Buffer const * buf, bool switchcap)
        for (pair<docstring, InsetLayout> const & il : dc.insetLayouts()) {
                docstring instype;
                docstring const type = split(il.first, instype, ':');
-               if (instype == "Caption") {
+               if (instype == from_ascii("Caption")) {
                        // skip forbidden caption types
                        FuncRequest const cmd = switchcap
                                ? FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype ") + type)
@@ -1655,7 +1728,7 @@ void MenuDefinition::expandQuotes(BufferView const * bv)
 {
        if (!bv)
                return;
-    
+
        if (!bv->cursor().inTexted())
                return;
 
@@ -1671,127 +1744,105 @@ void MenuDefinition::expandQuotes(BufferView const * bv)
 
        map<string, docstring> styles = quoteparams.getTypes();
        string const qtype = qinset->getType();
-       
+
        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;
+
+       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));
+               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));
+               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));
+               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));
+               main_dynamic_qs = true;
+       }
+       // now traverse through the static styles ...
        for (; qq != end; ++qq) {
                docstring const style = from_ascii(qq->first);
-               FuncRequest const cmd = FuncRequest(LFUN_INSET_MODIFY, from_ascii("changetype ") + style);
-               docstring const 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));
-       }
-
-       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);
+
+       add(MenuItem(MenuItem::Separator));
+
+       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));
+               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));
+       }
+       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));
        }
+
+       add(MenuItem(MenuItem::Separator));
+
+       // ... and a subitem with the rest
+       MenuItem item(MenuItem::Submenu, qt_("Change Style|y"));
+       item.setSubmenu(aqs);
+       add(item);
 }
 
 
@@ -2137,6 +2188,19 @@ void Menus::Impl::expand(MenuDefinition const & frommenu,
                        tomenu.expandFormats(cit->kind(), buf);
                        break;
 
+               case MenuItem::ExportFormat: {
+                       if (!buf)
+                               break;
+                       string const format = buf->params().getDefaultOutputFormat();
+                       Format const * f = theFormats().getFormat(format);
+                       docstring const name = f ? f->prettyname() : from_utf8(format);
+                       docstring const label = bformat(_("Export [%1$s]|E"), name);
+                       MenuItem item(MenuItem::Command, toqstr(label),
+                                     FuncRequest(LFUN_BUFFER_EXPORT));
+                       tomenu.addWithStatusCheck(item);
+                       break;
+               }
+
                case MenuItem::CharStyles:
                        tomenu.expandFlexInsert(buf, InsetLayout::CHARSTYLE);
                        break;