From 83b1ac3b55ada8d9198b611e8a52ac5d02111e8b Mon Sep 17 00:00:00 2001 From: Richard Kimberly Heck Date: Wed, 21 Mar 2018 23:08:12 -0400 Subject: [PATCH] Fix bug #11084. Allow unicode-insert to accept a sequence of codepoints. --- src/LyXAction.cpp | 6 +++--- src/Text3.cpp | 17 +++++++++++------ src/mathed/InsetMathNest.cpp | 15 ++++++++++----- src/support/lstrings.h | 2 ++ 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 771a7e5c54..7307d22b23 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -3850,10 +3850,10 @@ void LyXAction::init() /*! * \var lyx::FuncCode lyx::LFUN_UNICODE_INSERT * \li Action: Inserts a single unicode character. - * \li Syntax: unicode-insert - * \li Params: : The character to insert, given as its code + * \li Syntax: unicode-insert ... + * \li Params: : The character to insert, given as its code point, in hexadecimal. - * \li Sample: unicode-insert 0x0100 + * \li Sample: unicode-insert 0x0100 0x0259 * \li Origin: Lgb, 22 Oct 2006 * \endvar */ diff --git a/src/Text3.cpp b/src/Text3.cpp index 84395adec4..195879ad17 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -1699,13 +1699,18 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_UNICODE_INSERT: { if (cmd.argument().empty()) break; - docstring hexstring = cmd.argument(); - if (isHex(hexstring)) { - char_type c = hexToInt(hexstring); + // splits on whitespace + vector args = + getVectorFromString(cmd.argument(), from_ascii(" "), false, true); + for (auto const & arg : args) { + if (!isHex(arg)) { + LYXERR0("Not a hexstring: " << arg); + continue; + } + char_type c = hexToInt(arg); if (c >= 32 && c < 0x10ffff) { - lyxerr << "Inserting c: " << c << endl; - docstring s = docstring(1, c); - lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, s)); + LYXERR(Debug::KEY, "Inserting c: " << c); + lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, docstring(1, c))); } } break; diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp index a03aaefb16..2ce31a45e7 100644 --- a/src/mathed/InsetMathNest.cpp +++ b/src/mathed/InsetMathNest.cpp @@ -1249,14 +1249,19 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_UNICODE_INSERT: { if (cmd.argument().empty()) break; - docstring hexstring = cmd.argument(); - if (isHex(hexstring)) { - char_type c = hexToInt(hexstring); + // splits on whitespace + vector args = + getVectorFromString(cmd.argument(), from_ascii(" "), false, true); + for (auto const & arg : args) { + if (!isHex(arg)) { + LYXERR0("Not a hexstring: " << arg); + continue; + } + char_type c = hexToInt(arg); if (c >= 32 && c < 0x10ffff) { - docstring s = docstring(1, c); FuncCode code = currentMode() == MATH_MODE ? LFUN_MATH_INSERT : LFUN_SELF_INSERT; - lyx::dispatch(FuncRequest(code, s)); + lyx::dispatch(FuncRequest(code, docstring(1, c))); } } break; diff --git a/src/support/lstrings.h b/src/support/lstrings.h index 398bf8dd33..9bcff42afa 100644 --- a/src/support/lstrings.h +++ b/src/support/lstrings.h @@ -326,6 +326,8 @@ docstring wrapParas(docstring const & str, int const indent = 0, /// If \p keepempty is true, empty strings will be pushed to the vector as well /// If \p trimit is true, leading and trailing whitespace will be trimmed from /// all values. Note that this can affect what counts as "empty". +/// NOTE: If you want to split a string on whitespace, then do: +/// getVectorFromString(str, " ", false, true); std::vector const getVectorFromString(std::string const & str, std::string const & delim = std::string(","), bool keepempty = false, bool trimit = true); -- 2.39.5