]> git.lyx.org Git - features.git/commitdiff
Fix CAS computation of a selected subformula.
authorEnrico Forestieri <forenr@lyx.org>
Sun, 9 Nov 2014 20:56:40 +0000 (21:56 +0100)
committerEnrico Forestieri <forenr@lyx.org>
Sun, 9 Nov 2014 20:57:29 +0000 (21:57 +0100)
Invoking a computer algebra system program for computing a selected
subformula has never worked (checked with all LyX versions back to 1.3)
and, moreover, in the presence of a selection things go awry.
This commit allows this computation by replacing the selected
subformula with the result of the computation.

src/mathed/InsetMathHull.cpp

index 55185a22cd57b5d8b52ab0b42745fafed0197629..538eee163a213c9ea6a464ac46bd36bdcbf494ed 100644 (file)
@@ -66,6 +66,7 @@ using namespace lyx::support;
 namespace lyx {
 
 using cap::grabAndEraseSelection;
+using cap::reduceSelectionToOneCell;
 
 namespace {
 
@@ -1324,14 +1325,14 @@ void InsetMathHull::doExtern(Cursor & cur, FuncRequest & func)
                extra = from_ascii("noextra");
        string const lang = to_ascii(dlang);
 
-       // FIXME: temporarily disabled
-       //if (cur.selection()) {
-       //      MathData ar;
-       //      selGet(cur.ar);
-       //      lyxerr << "use selection: " << ar << endl;
-       //      insert(pipeThroughExtern(lang, extra, ar));
-       //      return;
-       //}
+       // replace selection with result of computation
+       if (reduceSelectionToOneCell(cur)) {
+               MathData ar;
+               asArray(grabAndEraseSelection(cur), ar);
+               lyxerr << "use selection: " << ar << endl;
+               cur.insert(pipeThroughExtern(lang, extra, ar));
+               return;
+       }
 
        // only inline, display or eqnarray math is allowed
        if (getType() > hullEqnArray) {
@@ -1352,9 +1353,7 @@ void InsetMathHull::doExtern(Cursor & cur, FuncRequest & func)
        if (getType() == hullSimple) {
                size_type pos = cur.cell().find_last(eq);
                MathData ar;
-               if (cur.inMathed() && cur.selection()) {
-                       asArray(grabAndEraseSelection(cur), ar);
-               } else if (pos == cur.cell().size()) {
+               if (pos == cur.cell().size()) {
                        ar = cur.cell();
                        lyxerr << "use whole cell: " << ar << endl;
                } else {