On Sun, Nov 09, 2014 at 09:57:37PM +0100, Enrico Forestieri wrote:

> commit 29cebc7fb0bb3ab5acf2759ff4b964657ad59495
> Author: Enrico Forestieri <[email protected]>
> Date:   Sun Nov 9 21:56:40 2014 +0100
> 
>     Fix CAS computation of a selected subformula.
>     
>     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.

Richard, ok for stable?

> diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
> index 55185a2..538eee1 100644
> --- a/src/mathed/InsetMathHull.cpp
> +++ b/src/mathed/InsetMathHull.cpp
> @@ -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 {

-- 
Enrico

Reply via email to