]> git.lyx.org Git - features.git/commitdiff
Fix bug #11084.
authorRichard Kimberly Heck <rikiheck@lyx.org>
Thu, 22 Mar 2018 03:08:12 +0000 (23:08 -0400)
committerRichard Heck <rikiheck@lyx.org>
Tue, 17 Apr 2018 03:26:08 +0000 (23:26 -0400)
Allow unicode-insert to accept a sequence of codepoints.

(cherry picked from commits 83b1ac3bf7d502d0, and a714f6cb)

src/BufferView.cpp
src/LyXAction.cpp
src/Text3.cpp
src/mathed/InsetMathNest.cpp
src/support/lstrings.h
status.23x

index b1c995d4714f8f57ad61ee5d4614f6d6bf1e88da..73cf4520b9b076edb3817413dd1928fbd91f2565 100644 (file)
@@ -65,6 +65,7 @@
 #include "insets/InsetText.h"
 
 #include "mathed/MathData.h"
+#include "mathed/InsetMathNest.h"
 
 #include "frontends/alert.h"
 #include "frontends/Application.h"
@@ -1891,6 +1892,33 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
        }
 
 
+       case LFUN_UNICODE_INSERT: {
+               if (cmd.argument().empty())
+                       break;
+
+               FuncCode code = cur.inset().currentMode() == Inset::MATH_MODE ?
+                       LFUN_MATH_INSERT : LFUN_SELF_INSERT;
+               int i = 0;
+               while (true) {
+                       docstring const arg = from_utf8(cmd.getArg(i));
+                       if (arg.empty())
+                               break;
+                       if (!isHex(arg)) {
+                               LYXERR0("Not a hexstring: " << arg);
+                               ++i;
+                               continue;
+                       }
+                       char_type c = hexToInt(arg);
+                       if (c >= 32 && c < 0x10ffff) {
+                               LYXERR(Debug::KEY, "Inserting c: " << c);
+                               lyx::dispatch(FuncRequest(code, docstring(1, c)));
+                       }
+                       ++i;
+               }
+               break;
+       }
+
+
        // This would be in Buffer class if only Cursor did not
        // require a bufferview
        case LFUN_INSET_FORALL: {
index d2e92b1c949f60cc2d76d14b04679e305a44bf5a..83625105abb45b332789d2ffac176c53f17bb721 100644 (file)
@@ -3841,10 +3841,10 @@ void LyXAction::init()
 /*!
  * \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
  */
index adeb80b88f15ec737c699a0d305d6cd71683f8b2..e0358fc46405fdd5be5f0917269e1d44fa205c01 100644 (file)
@@ -1695,21 +1695,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                bv->buffer().errors("Paste");
                break;
 
-       case LFUN_UNICODE_INSERT: {
-               if (cmd.argument().empty())
-                       break;
-               docstring hexstring = cmd.argument();
-               if (isHex(hexstring)) {
-                       char_type c = hexToInt(hexstring);
-                       if (c >= 32 && c < 0x10ffff) {
-                               lyxerr << "Inserting c: " << c << endl;
-                               docstring s = docstring(1, c);
-                               lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, s));
-                       }
-               }
-               break;
-       }
-
        case LFUN_QUOTE_INSERT: {
                cap::replaceSelection(cur);
                cur.recordUndo();
index af50a7ec3cc6974cf7e5a088b716ca81e7432034..afe4f062cdc4610e40fca095b361529cc72c8e02 100644 (file)
@@ -1246,22 +1246,6 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_UNICODE_INSERT: {
-               if (cmd.argument().empty())
-                       break;
-               docstring hexstring = cmd.argument();
-               if (isHex(hexstring)) {
-                       char_type c = hexToInt(hexstring);
-                       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));
-                       }
-               }
-               break;
-       }
-
        case LFUN_DIALOG_SHOW_NEW_INSET: {
                docstring const & name = cmd.argument();
                string data;
index 398bf8dd337ae1a1ff0adced2343b4a04114a81c..9bcff42afa1a2e89470d76daa96959140006a804 100644 (file)
@@ -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<std::string> const getVectorFromString(std::string const & str,
         std::string const & delim = std::string(","),
         bool keepempty = false, bool trimit = true);
index 5b75dfb9ab1a0c3013c836564b50fa50e9d35996..94c311dbba7b84b2aae671f44349b820cfb61c5a 100644 (file)
@@ -203,6 +203,8 @@ What's new
 
 - Allow for spaces in bibliography keys (bug 9847).
 
+- Allow LFUN_UNICODE_INSERT to take multiple arguments (bug 11084).
+
 
 * INTERNALS