// Normalise paths like /foo//bar ==> /foo/bar
for (auto doc : doclist) {
- subst(doc, from_ascii("\r"), docstring());
+ doc = subst(doc, from_ascii("\r"), docstring());
while (contains(doc, from_ascii("//")))
doc = subst(doc, from_ascii("//"), from_ascii("/"));
if (!doc.empty())
// remove duplicates
return list;
}
+
+bool translateString(docstring const & in, docstring & out, string const & lcode)
+{
+ out = translateIfPossible(in, lcode);
+ return in != out;
+}
} // namespace anon
-docstring InsetInfoParams::getDate(string const iname, QDate const date) const
+docstring InsetInfoParams::getDate(string const & iname, QDate const date) const
{
QLocale loc;
if (lang)
}
-docstring InsetInfoParams::getTime(string const iname, QTime const time) const
+docstring InsetInfoParams::getTime(string const & iname, QTime const time) const
{
QLocale loc;
if (lang)
break;
}
result.push_back(make_pair("revision", _("Revision[[Version Control]]")));
+ result.push_back(make_pair("revision-abbrev", _("Abbreviated revision[[Version Control]]")));
result.push_back(make_pair("tree-revision", _("Tree revision")));
result.push_back(make_pair("author", _("Author")));
result.push_back(make_pair("date", _("Date")));
|| name == "path" || name == "class");
case VCS_INFO:
- if (name == "revision" || name == "tree-revision"
+ if (name == "revision" || name == "revision-abbrev" || name == "tree-revision"
|| name == "author" || name == "date" || name == "time")
return buf->lyxvc().inUse();
return false;
case InsetInfoParams::VCS_INFO:
if (params_.name == "revision")
result = _("Version control revision");
+ else if (params_.name == "revision-abbrev")
+ result = _("Version control abbreviated revision");
else if (params_.name == "tree-revision")
result = _("Version control tree revision");
else if (params_.name == "author")
void InsetInfo::error(docstring const & err, Language const * lang)
{
- setText(bformat(translateIfPossible(err, lang->code()), from_utf8(params_.name)),
- Font(inherit_font, lang), false);
+ docstring const res = translateIfPossible(err, lang->code());
+ bool const translated = res != err;
+ // If the string is not translated, we use default lang (English)
+ Font const f = translated ? Font(inherit_font, lang) : Font(inherit_font);
+ setText(bformat(res, from_utf8(params_.name)), f, false);
}
void InsetInfo::info(docstring const & err, Language const * lang)
{
- setText(translateIfPossible(err, lang->code()),
- Font(inherit_font, lang), false);
+ docstring const res = translateIfPossible(err, lang->code());
+ bool const translated = res != err;
+ // If the string is not translated, we use default lang (English)
+ Font const f = translated ? Font(inherit_font, lang) : Font(inherit_font);
+ setText(translateIfPossible(err, lang->code()), f, false);
}
}
-bool InsetInfo::forceLTR() const
+bool InsetInfo::forceLTR(OutputParams const &) const
{
return params_.force_ltr;
}
-void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype) {
+bool InsetInfo::forceLocalFontSwitch() const
+{
+ return params_.type == InsetInfoParams::MENU_INFO
+ || params_.type == InsetInfoParams::SHORTCUTS_INFO
+ || params_.type == InsetInfoParams::L7N_INFO;
+}
+
+
+void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted) {
// If the Buffer is a clone, then we neither need nor want to do any
// of what follows. We want, rather, just to inherit how things were
// in the original Buffer. This is especially important for VCS.
break;
}
docstring sequence;
- if (params_.type == InsetInfoParams::SHORTCUT_INFO)
+ docstring seq_untranslated;
+ if (params_.type == InsetInfoParams::SHORTCUT_INFO) {
sequence = bindings.begin()->print(KeySequence::ForGui);
- else
+ seq_untranslated = bindings.begin()->print(KeySequence::ForGui, true);
+ } else {
sequence = theTopLevelKeymap().printBindings(func, KeySequence::ForGui);
+ seq_untranslated = theTopLevelKeymap().printBindings(func, KeySequence::ForGui, true);
+ }
// QKeySequence returns special characters for keys on the mac
// Since these are not included in many fonts, we
// re-translate them to textual names (see #10641)
odocstringstream ods;
string const lcode = params_.lang->code();
+ docstring trans;
+ bool is_translated = sequence != seq_untranslated;
for (size_t n = 0; n < sequence.size(); ++n) {
char_type const c = sequence[n];
switch(c) {
case 0x21b5://Return
gui = _("Return[[Key]]");
- ods << translateIfPossible(from_ascii("Return[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Return[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x21b9://Tab both directions (Win)
gui = _("Tab[[Key]]");
- ods << translateIfPossible(from_ascii("Tab[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Tab[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x21de://Qt::Key_PageUp
gui = _("PgUp");
- ods << translateIfPossible(from_ascii("PgUp"), lcode);
+ is_translated = translateString(from_ascii("PgUp"), trans, lcode);
+ ods << trans;
break;
case 0x21df://Qt::Key_PageDown
gui = _("PgDown");
- ods << translateIfPossible(from_ascii("PgDown"), lcode);
+ is_translated = translateString(from_ascii("PgDown"), trans, lcode);
+ ods << trans;
break;
case 0x21e4://Qt::Key_Backtab
gui = _("Backtab");
- ods << translateIfPossible(from_ascii("Backtab"), lcode);
+ is_translated = translateString(from_ascii("Backtab"), trans, lcode);
+ ods << trans;
break;
case 0x21e5://Qt::Key_Tab
gui = _("Tab");
- ods << translateIfPossible(from_ascii("Tab"), lcode);
+ is_translated = translateString(from_ascii("Tab"), trans, lcode);
+ ods << trans;
break;
case 0x21e7://Shift
gui = _("Shift");
- ods << translateIfPossible(from_ascii("Shift"), lcode);
+ is_translated = translateString(from_ascii("Shift"), trans, lcode);
+ ods << trans;
break;
case 0x21ea://Qt::Key_CapsLock
gui = _("CapsLock");
- ods << translateIfPossible(from_ascii("CapsLock"), lcode);
+ is_translated = translateString(from_ascii("CapsLock"), trans, lcode);
+ ods << trans;
break;
case 0x2303://Control
gui = _("Control[[Key]]");
- ods << translateIfPossible(from_ascii("Control[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Control[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x2318://CMD
gui = _("Command[[Key]]");
- ods << translateIfPossible(from_ascii("Command[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Command[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x2324://Qt::Key_Enter
gui = _("Return[[Key]]");
- ods << translateIfPossible(from_ascii("Return[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Return[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x2325://Option key
gui = _("Option[[Key]]");
- ods << translateIfPossible(from_ascii("Option[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Option[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x2326://Qt::Key_Delete
gui = _("Delete[[Key]]");
- ods << translateIfPossible(from_ascii("Delete[[Key]]"), lcode);
+ is_translated = translateString(from_ascii("Delete[[Key]]"), trans, lcode);
+ ods << trans;
break;
case 0x232b://Qt::Key_Backspace
gui = _("Fn+Del");
- ods << translateIfPossible(from_ascii("Fn+Delete"), lcode);
+ is_translated = translateString(from_ascii("Fn+Del"), trans, lcode);
+ ods << trans;
break;
case 0x238b://Qt::Key_Escape
gui = _("Esc");
- ods << translateIfPossible(from_ascii("Esc"), lcode);
+ is_translated = translateString(from_ascii("Esc"), trans, lcode);
+ ods << trans;
break;
default:
ods.put(c);
}
}
- setText(ods.str(), guilang);
- params_.force_ltr = !guilang->rightToLeft() && !params_.lang->rightToLeft();
+ setText(ods.str(), is_translated ? guilang : nullptr);
+ params_.force_ltr = !is_translated || (!guilang->rightToLeft() && !params_.lang->rightToLeft());
break;
}
case InsetInfoParams::LYXRC_INFO: {
initialized_ = true;
FuncRequest func = lyxaction.lookupFunc(params_.name);
docstring icon_name = frontend::Application::iconName(func, true);
- // FIXME: We should use the icon directly instead of
- // going through FileName. The code below won't work
- // if the icon is embedded in the executable through
- // the Qt resource system.
- // This is only a negligible performance problem:
- // If the installed icon differs from the resource icon the
- // installed one is preferred anyway, and all icons that are
- // embedded in the resources are installed as well.
FileName file(to_utf8(icon_name));
if (file.onlyFileNameWithoutExt() == "unknown") {
string dir = "images";
LyXVC::RevisionInfo itype = LyXVC::Unknown;
if (params_.name == "revision")
itype = LyXVC::File;
+ else if (params_.name == "revision-abbrev")
+ itype = LyXVC::FileAbbrev;
else if (params_.name == "tree-revision")
itype = LyXVC::Tree;
else if (params_.name == "author")
// Just to do something with that string
LYXERR(Debug::INFO, "info inset text: " << gui);
- InsetCollapsible::updateBuffer(it, utype);
+ InsetCollapsible::updateBuffer(it, utype, deleted);
}