commit b3585ea76caeed508c4cd9183456fda446f9bb41
Author: Pavel Sanda <[email protected]>
Date: Tue Apr 29 23:55:48 2025 +0200
CAS: Allow commands for octave (part of #13178).
---
src/mathed/MathExtern.cpp | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/mathed/MathExtern.cpp b/src/mathed/MathExtern.cpp
index 7afc14e6f0..5383f42998 100644
--- a/src/mathed/MathExtern.cpp
+++ b/src/mathed/MathExtern.cpp
@@ -1285,7 +1285,7 @@ namespace {
}
- MathData pipeThroughOctave(docstring const &, MathData const & md)
+ MathData pipeThroughOctave(docstring const &command, MathData const &
md)
{
odocstringstream os;
OctaveStream vs(os);
@@ -1297,6 +1297,14 @@ namespace {
lyxerr << "pipe: md: '" << md << "'\n"
<< "pipe: expr: '" << expr << "'" << endl;
+ string comm_left;
+ string comm_right;
+ if (command != "noextra") {
+ comm_left = to_utf8(command) + "(";
+ comm_right = ")" + comm_right;
+ }
+ int preplen = comm_left.length();
+
for (int i = 0; i < 100; ++i) { // at most 100 attempts
//
// try to fix missing '*' the hard way
@@ -1304,8 +1312,9 @@ namespace {
// >>> ([[1 2 3 ];[2 3 1 ];[3 1 2 ]])([[1 2 3 ];[2 3 1
];[3 1 2 ]])
// ^
//
- lyxerr << "checking expr: '" << expr << "'" << endl;
- out = captureOutput("octave -q 2>&1", expr);
+ string full = comm_left + expr + comm_right;
+ lyxerr << "checking input: '" << full << "'" << endl;
+ out = captureOutput("octave -q 2>&1", full);
lyxerr << "output: '" << out << "'" << endl;
// leave loop if expression syntax is probably ok
@@ -1325,11 +1334,11 @@ namespace {
// found line with error, next line is the one with
caret
getline(is, line);
size_t pos = line.find('^');
- lyxerr << "caret line: '" << line << "'" << endl;
+ lyxerr << "caret line : '" << line << "'" << endl;
lyxerr << "found caret at pos: '" << pos << "'" << endl;
if (pos == string::npos || pos < 4)
break; // caret position not found
- pos -= 4; // skip the ">>> " part
+ pos -= 4 + preplen; // skip the ">>> " part and command
prefix
if (expr[pos] == '*')
break; // two '*' in a row are definitely bad
expr.insert(pos, 1, '*');
--
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs