Allow unicode-insert to accept a sequence of codepoints.
/*!
* \var lyx::FuncCode lyx::LFUN_UNICODE_INSERT
* \li Action: Inserts a single unicode character.
- * \li Syntax: unicode-insert <CHAR>
- * \li Params: <CHAR>: The character to insert, given as its code
+ * \li Syntax: unicode-insert <CHAR1> <CHAR2> ...
+ * \li Params: <CHARn>: 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
*/
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<docstring> 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;
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<docstring> 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;
/// 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<std::string> const getVectorFromString(std::string const & str,
std::string const & delim = std::string(","),
bool keepempty = false, bool trimit = true);