@fileverse-dev/fortune-core 1.3.12-mixed-a → 1.3.13-create-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,14 +21,13 @@ var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
21
21
  import { Parser, ERROR_REF } from "@fileverse-dev/formula-parser";
22
22
  import _ from "lodash";
23
23
  import { getFlowdata } from "../context";
24
- import { columnCharToIndex, escapeScriptTag, getSheetIndex, indexToColumnChar, getSheetIdByName, escapeHTMLTag } from "../utils";
24
+ import { columnCharToIndex, escapeScriptTag, getSheetIndex, indexToColumnChar, getSheetIdByName, escapeHTMLTag, isLetterNumberPattern, removeLastSpan } from "../utils";
25
25
  import { getcellFormula, getRangetxt, mergeMoveMain, setCellValue } from "./cell";
26
26
  import { error, detectErrorFromValue } from "./validation";
27
27
  import { locale } from "../locale";
28
28
  import { colors } from "./color";
29
29
  import { colLocation, mousePosition, rowLocation } from "./location";
30
30
  import { cancelFunctionrangeSelected, clearCellError, seletedHighlistByindex, setCellError, spillSortResult } from ".";
31
- import { isLetterNumberPattern, removeLastSpan } from "../utils/index";
32
31
  var functionHTMLIndex = 0;
33
32
  var rangeIndexes = [];
34
33
  var operatorPriority = {
@@ -55,6 +54,8 @@ var FormulaCache = function () {
55
54
  var that = this;
56
55
  this.data_parm_index = 0;
57
56
  this.selectingRangeIndex = -1;
57
+ this.rangeSelectionActive = null;
58
+ this.formulaEditorOwner = null;
58
59
  this.functionlistMap = {};
59
60
  this.execFunctionGlobalData = {};
60
61
  this.cellTextToIndexList = {};
@@ -1286,8 +1287,7 @@ export function setCaretPosition(ctx, textDom, children, pos, parentTextDom) {
1286
1287
  sel === null || sel === void 0 ? void 0 : sel.removeAllRanges();
1287
1288
  sel === null || sel === void 0 ? void 0 : sel.addRange(range);
1288
1289
  el.focus();
1289
- } catch (err) {
1290
- console.error(err);
1290
+ } catch (_c) {
1291
1291
  moveCursorToEnd(parentTextDom);
1292
1292
  }
1293
1293
  }
@@ -1372,7 +1372,7 @@ export function getrangeseleciton() {
1372
1372
  return null;
1373
1373
  }
1374
1374
  function helpFunctionExe($editer, currSelection, ctx) {
1375
- var _a;
1375
+ var _a, _b, _c, _d, _e, _f;
1376
1376
  var functionlist = locale(ctx).functionlist;
1377
1377
  if (_.isEmpty(ctx.formulaCache.functionlistMap)) {
1378
1378
  for (var i_1 = 0; i_1 < functionlist.length; i_1 += 1) {
@@ -1383,22 +1383,23 @@ function helpFunctionExe($editer, currSelection, ctx) {
1383
1383
  return null;
1384
1384
  }
1385
1385
  var $prev = currSelection;
1386
- var $span = $editer.querySelectorAll("span");
1387
- var currentIndex = _.indexOf((_a = currSelection.parentNode) === null || _a === void 0 ? void 0 : _a.childNodes, currSelection);
1386
+ var $span = Array.from($editer.querySelectorAll("span"));
1387
+ var selectionSpan = currSelection.nodeType === Node.ELEMENT_NODE ? currSelection.closest("span") : (_a = currSelection.parentElement) === null || _a === void 0 ? void 0 : _a.closest("span");
1388
+ var currentIndex = selectionSpan ? $span.indexOf(selectionSpan) : -1;
1388
1389
  var i = currentIndex;
1389
- if ($prev == null) {
1390
+ if ($prev == null || currentIndex < 0 || !$span[currentIndex]) {
1390
1391
  return null;
1391
1392
  }
1392
1393
  var funcName = null;
1393
1394
  var paramindex = null;
1394
- if ($span[i].classList.contains("luckysheet-formula-text-func")) {
1395
+ if ((_c = (_b = $span[i]) === null || _b === void 0 ? void 0 : _b.classList) === null || _c === void 0 ? void 0 : _c.contains("luckysheet-formula-text-func")) {
1395
1396
  funcName = $span[i].textContent;
1396
1397
  } else {
1397
1398
  var $cur = null;
1398
1399
  var exceptIndex = [-1, -1];
1399
1400
  while (--i > 0) {
1400
1401
  $cur = $span[i];
1401
- if ($cur.classList.contains("luckysheet-formula-text-func") || _.trim($cur.textContent || "").toUpperCase() in ctx.formulaCache.functionlistMap) {
1402
+ if (((_d = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _d === void 0 ? void 0 : _d.contains("luckysheet-formula-text-func")) || _.trim($cur.textContent || "").toUpperCase() in ctx.formulaCache.functionlistMap) {
1402
1403
  funcName = $cur.textContent;
1403
1404
  paramindex = null;
1404
1405
  var endstate = true;
@@ -1410,13 +1411,13 @@ function helpFunctionExe($editer, currSelection, ctx) {
1410
1411
  continue;
1411
1412
  }
1412
1413
  $cur = $span[a];
1413
- if ($cur.classList.contains("luckysheet-formula-text-rpar")) {
1414
+ if ((_e = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _e === void 0 ? void 0 : _e.contains("luckysheet-formula-text-rpar")) {
1414
1415
  exceptIndex = [i, a];
1415
1416
  funcName = null;
1416
1417
  endstate = false;
1417
1418
  break;
1418
1419
  }
1419
- if ($cur.classList.contains("luckysheet-formula-text-comma")) {
1420
+ if ((_f = $cur === null || $cur === void 0 ? void 0 : $cur.classList) === null || _f === void 0 ? void 0 : _f.contains("luckysheet-formula-text-comma")) {
1420
1421
  paramindex += 1;
1421
1422
  }
1422
1423
  }
@@ -1449,6 +1450,7 @@ export function rangeHightlightselected(ctx, $editor) {
1449
1450
  var funcName = helpFunctionExe($editor, currSelection, ctx);
1450
1451
  ctx.functionHint = funcName === null || funcName === void 0 ? void 0 : funcName.toUpperCase();
1451
1452
  ctx.functionCandidates = [];
1453
+ ctx.defaultCandidates = [];
1452
1454
  }
1453
1455
  }
1454
1456
  function functionHTML(txt) {
@@ -1599,6 +1601,226 @@ function getRangeIndexes($editor) {
1599
1601
  });
1600
1602
  return res;
1601
1603
  }
1604
+ export function getLastFormulaRangeIndex($editor) {
1605
+ var spans = Array.from($editor.querySelectorAll("span")).filter(function (span) {
1606
+ var _a;
1607
+ return (_a = span.textContent) === null || _a === void 0 ? void 0 : _a.trim().length;
1608
+ });
1609
+ var lastSpan = spans[spans.length - 1];
1610
+ if (!lastSpan) return null;
1611
+ if (!lastSpan.classList.contains("fortune-formula-functionrange-cell")) {
1612
+ return null;
1613
+ }
1614
+ var indexStr = lastSpan.getAttribute("rangeindex");
1615
+ if (!indexStr) return null;
1616
+ var rangeIndex = parseInt(indexStr, 10);
1617
+ return Number.isNaN(rangeIndex) ? null : rangeIndex;
1618
+ }
1619
+ export function getFormulaRangeIndexAtCaret($editor) {
1620
+ var sel = window.getSelection();
1621
+ if (!sel || sel.rangeCount === 0) return null;
1622
+ var anchorNode = sel.anchorNode;
1623
+ if (!anchorNode) return null;
1624
+ var el = anchorNode.nodeType === Node.ELEMENT_NODE ? anchorNode : anchorNode.parentElement;
1625
+ if (!el) return null;
1626
+ var cell = el.closest(".fortune-formula-functionrange-cell");
1627
+ if (!cell || !$editor.contains(cell)) return null;
1628
+ var ri = cell.getAttribute("rangeindex");
1629
+ if (!ri) return null;
1630
+ var n = parseInt(ri, 10);
1631
+ return Number.isNaN(n) ? null : n;
1632
+ }
1633
+ export function setFormulaEditorOwner(ctx, owner) {
1634
+ ctx.formulaCache.formulaEditorOwner = owner;
1635
+ }
1636
+ export function getFormulaEditorOwner(ctx) {
1637
+ var _a, _b;
1638
+ var cachedOwner = ctx.formulaCache.formulaEditorOwner;
1639
+ if (cachedOwner === "cell" || cachedOwner === "fx") {
1640
+ return cachedOwner;
1641
+ }
1642
+ if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
1643
+ return "fx";
1644
+ }
1645
+ if (((_b = document.activeElement) === null || _b === void 0 ? void 0 : _b.id) === "luckysheet-rich-text-editor") {
1646
+ return "cell";
1647
+ }
1648
+ return null;
1649
+ }
1650
+ function getActiveFormulaEditorElement(ctx) {
1651
+ var _a;
1652
+ var cellEditor = document.getElementById("luckysheet-rich-text-editor");
1653
+ var fxEditor = document.getElementById("luckysheet-functionbox-cell");
1654
+ var owner = getFormulaEditorOwner(ctx);
1655
+ if (owner === "fx") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
1656
+ if (owner === "cell") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1657
+ var activeId = (_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id;
1658
+ if (activeId === "luckysheet-functionbox-cell") return fxEditor !== null && fxEditor !== void 0 ? fxEditor : cellEditor;
1659
+ if (activeId === "luckysheet-rich-text-editor") return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1660
+ return cellEditor !== null && cellEditor !== void 0 ? cellEditor : fxEditor;
1661
+ }
1662
+ function getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset) {
1663
+ var textBefore = editor.innerText.slice(0, caretOffset);
1664
+ var parts = textBefore.split(/[=,(+\-*/&<>]/);
1665
+ return _.trim(parts[parts.length - 1] || "");
1666
+ }
1667
+ export function hasIncompleteTruncatedCellRangeSyntax(formulaText) {
1668
+ var t = formulaText.replace(/\s/g, "");
1669
+ if (!t.startsWith("=")) return false;
1670
+ if (/[A-Za-z]+\d+:[A-Za-z]+$/i.test(t)) return true;
1671
+ if (/[A-Za-z]+\d+:\s*$/i.test(t)) return true;
1672
+ return false;
1673
+ }
1674
+ function isIncompleteTruncatedRangeToken(token) {
1675
+ var t = token.replace(/\s/g, "");
1676
+ if (!t) return false;
1677
+ if (/[A-Za-z]+\d+:[A-Za-z]*$/i.test(t)) {
1678
+ return !/[A-Za-z]+\d+:[A-Za-z]+\d+$/i.test(t);
1679
+ }
1680
+ return false;
1681
+ }
1682
+ function isCaretInsideIncompleteTruncatedRangeSyntax(editor, caretOffset) {
1683
+ var textBefore = editor.innerText.slice(0, caretOffset);
1684
+ var textAfter = editor.innerText.slice(caretOffset);
1685
+ var tokenSplit = /[=,()+\-*/&<>%^]/;
1686
+ var leftToken = (textBefore.split(tokenSplit).pop() || "").trim();
1687
+ var rightToken = (textAfter.split(tokenSplit)[0] || "").trim();
1688
+ var tokenAtCaret = "".concat(leftToken).concat(rightToken);
1689
+ return isIncompleteTruncatedRangeToken(tokenAtCaret);
1690
+ }
1691
+ export function isBareCellOrRangeOnlyFormula(formulaText) {
1692
+ var t = formulaText.trim();
1693
+ if (!t.startsWith("=")) return false;
1694
+ var body = t.slice(1).trim();
1695
+ if (!body) return false;
1696
+ if (body.includes("(") || body.includes(")")) return false;
1697
+ return iscelldata(body);
1698
+ }
1699
+ export function suppressFormulaRangeSelectionForInitialEdit(ctx) {
1700
+ ctx.formulaCache.rangeSelectionActive = false;
1701
+ ctx.formulaCache.keyboardRangeSelectionLock = true;
1702
+ ctx.formulaCache.rangestart = false;
1703
+ ctx.formulaCache.rangedrag_column_start = false;
1704
+ ctx.formulaCache.rangedrag_row_start = false;
1705
+ }
1706
+ export function isCaretAtValidFormulaRangeInsertionPoint(editor) {
1707
+ var currSelection = window.getSelection();
1708
+ if (!editor || !currSelection || currSelection.rangeCount === 0) {
1709
+ return false;
1710
+ }
1711
+ var anchorNode = currSelection.anchorNode;
1712
+ if (anchorNode && !editor.contains(anchorNode)) {
1713
+ return false;
1714
+ }
1715
+ var inputText = editor.innerText.trim();
1716
+ if (!inputText.startsWith("=")) {
1717
+ return false;
1718
+ }
1719
+ if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
1720
+ return false;
1721
+ }
1722
+ if (isBareCellOrRangeOnlyFormula(inputText)) {
1723
+ return false;
1724
+ }
1725
+ var caretRange = currSelection.getRangeAt(0).cloneRange();
1726
+ var preCaretRange = document.createRange();
1727
+ preCaretRange.selectNodeContents(editor);
1728
+ preCaretRange.setEnd(caretRange.endContainer, caretRange.endOffset);
1729
+ var caretOffset = preCaretRange.toString().length;
1730
+ var slotTextBeforeCaret = getCurrentFormulaSlotTextBeforeCaret(editor, caretOffset);
1731
+ if (isCaretInsideIncompleteTruncatedRangeSyntax(editor, caretOffset)) {
1732
+ return false;
1733
+ }
1734
+ if (slotTextBeforeCaret.length > 0 && !iscelldata(slotTextBeforeCaret)) {
1735
+ return false;
1736
+ }
1737
+ var textAfter = editor.innerText.slice(caretOffset);
1738
+ var remaining = textAfter.replace(/^\s+/, "");
1739
+ if (remaining.length === 0) {
1740
+ var atCaret = getFormulaRangeIndexAtCaret(editor);
1741
+ if (atCaret !== null) {
1742
+ return true;
1743
+ }
1744
+ var textBefore = editor.innerText.slice(0, caretOffset).trimEnd();
1745
+ var lastCh = textBefore.slice(-1);
1746
+ if (!lastCh) {
1747
+ return false;
1748
+ }
1749
+ if (lastCh === ")") {
1750
+ return false;
1751
+ }
1752
+ if (/^[=,(+\-*/&%^<>]$/.test(lastCh)) {
1753
+ return true;
1754
+ }
1755
+ return false;
1756
+ }
1757
+ var first = remaining[0];
1758
+ return first === "," || first === ")" || first === "&" || first in operatorjson;
1759
+ }
1760
+ function hasCommaOrAnotherRefAfterRangeCell(cell) {
1761
+ var _a, _b;
1762
+ var n = cell.nextSibling;
1763
+ while (n) {
1764
+ if (n.nodeType === Node.ELEMENT_NODE) {
1765
+ var e = n;
1766
+ if ((_a = e.classList) === null || _a === void 0 ? void 0 : _a.contains("luckysheet-formula-text-comma")) return true;
1767
+ if ((_b = e.classList) === null || _b === void 0 ? void 0 : _b.contains("fortune-formula-functionrange-cell")) return true;
1768
+ }
1769
+ n = n.nextSibling;
1770
+ }
1771
+ return false;
1772
+ }
1773
+ export function markRangeSelectionDirty(ctx) {
1774
+ ctx.formulaCache.rangeSelectionActive = false;
1775
+ ctx.formulaRangeHighlight = [];
1776
+ ctx.formulaRangeSelect = undefined;
1777
+ ctx.formulaCache.selectingRangeIndex = -1;
1778
+ ctx.formulaCache.func_selectedrange = undefined;
1779
+ ctx.formulaCache.rangestart = false;
1780
+ ctx.formulaCache.rangedrag_column_start = false;
1781
+ ctx.formulaCache.rangedrag_row_start = false;
1782
+ ctx.formulaCache.rangechangeindex = undefined;
1783
+ }
1784
+ export function getFormulaRangeIndexForKeyboardSync($editor) {
1785
+ var atCaret = getFormulaRangeIndexAtCaret($editor);
1786
+ if (atCaret !== null) return atCaret;
1787
+ var lastIdx = getLastFormulaRangeIndex($editor);
1788
+ if (lastIdx === null) return null;
1789
+ var cell = $editor.querySelector("span.fortune-formula-functionrange-cell[rangeindex=\"".concat(lastIdx, "\"]"));
1790
+ if (!cell) return null;
1791
+ var sel = window.getSelection();
1792
+ if (!(sel === null || sel === void 0 ? void 0 : sel.anchorNode)) return lastIdx;
1793
+ var caretRange = document.createRange();
1794
+ try {
1795
+ caretRange.setStart(sel.anchorNode, sel.anchorOffset);
1796
+ caretRange.collapse(true);
1797
+ } catch (_a) {
1798
+ return lastIdx;
1799
+ }
1800
+ var cellRange = document.createRange();
1801
+ try {
1802
+ cellRange.selectNodeContents(cell);
1803
+ } catch (_b) {
1804
+ return lastIdx;
1805
+ }
1806
+ if (caretRange.compareBoundaryPoints(Range.START_TO_START, cellRange) < 0) {
1807
+ return null;
1808
+ }
1809
+ var afterCell = document.createRange();
1810
+ try {
1811
+ afterCell.setStartAfter(cell);
1812
+ afterCell.collapse(true);
1813
+ } catch (_c) {
1814
+ return lastIdx;
1815
+ }
1816
+ if (caretRange.compareBoundaryPoints(Range.START_TO_START, afterCell) >= 0) {
1817
+ if (hasCommaOrAnotherRefAfterRangeCell(cell)) {
1818
+ return null;
1819
+ }
1820
+ return lastIdx;
1821
+ }
1822
+ return lastIdx;
1823
+ }
1602
1824
  export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refreshRangeSelect) {
1603
1825
  var _a, _b, _c, _d, _e, _f;
1604
1826
  if (refreshRangeSelect === void 0) {
@@ -1606,6 +1828,16 @@ export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refres
1606
1828
  }
1607
1829
  if (!$editor) return;
1608
1830
  try {
1831
+ if (ctx.formulaCache.keyboardRangeSelectionLock === true) {
1832
+ ctx.formulaCache.keyboardRangeSelectionLock = false;
1833
+ }
1834
+ var isBackspaceOrDelete = kcode === 8 || kcode === 46;
1835
+ var isAlphaNumeric = kcode >= 48 && kcode <= 57 || kcode >= 65 && kcode <= 90 || kcode >= 97 && kcode <= 122;
1836
+ if (ctx.formulaCache.rangeSelectionActive === true) {
1837
+ if (isBackspaceOrDelete || isAlphaNumeric) {
1838
+ markRangeSelectionDirty(ctx);
1839
+ }
1840
+ }
1609
1841
  var value1 = void 0;
1610
1842
  var value1txt = preText !== null && preText !== void 0 ? preText : $editor.innerText;
1611
1843
  var value = $editor.innerText;
@@ -1634,9 +1866,7 @@ export function handleFormulaInput(ctx, $copyTo, $editor, kcode, preText, refres
1634
1866
  functionRange(ctx, $editor, value, value1);
1635
1867
  if (refreshRangeSelect) {
1636
1868
  cancelFunctionrangeSelected(ctx);
1637
- if (kcode !== 46) {
1638
- createRangeHightlight(ctx, value);
1639
- }
1869
+ createRangeHightlight(ctx, value);
1640
1870
  ctx.formulaCache.rangestart = false;
1641
1871
  ctx.formulaCache.rangedrag_column_start = false;
1642
1872
  ctx.formulaCache.rangedrag_row_start = false;
@@ -1836,61 +2066,190 @@ function functionStrChange_range(txt, type, rc, orient, stindex, step) {
1836
2066
  }
1837
2067
  return "";
1838
2068
  }
2069
+ function setRangeSetValueToFromCaretPosition(ctx, editor, sel) {
2070
+ if (sel.rangeCount === 0 || !sel.anchorNode) return false;
2071
+ if (!editor.contains(sel.anchorNode)) return false;
2072
+ var range = sel.getRangeAt(0).cloneRange();
2073
+ range.collapse(true);
2074
+ var startContainer = range.startContainer,
2075
+ startOffset = range.startOffset;
2076
+ if (startContainer.nodeType === Node.TEXT_NODE) {
2077
+ if (startOffset === 0) {
2078
+ var textParent = startContainer.parentElement;
2079
+ if (textParent === editor) {
2080
+ var prev = startContainer.previousSibling;
2081
+ if (prev) {
2082
+ ctx.formulaCache.rangeSetValueTo = prev;
2083
+ return true;
2084
+ }
2085
+ return false;
2086
+ }
2087
+ var el = textParent;
2088
+ while (el && el !== editor) {
2089
+ if (el.previousSibling) {
2090
+ ctx.formulaCache.rangeSetValueTo = el.previousSibling;
2091
+ return true;
2092
+ }
2093
+ el = el.parentElement;
2094
+ }
2095
+ return false;
2096
+ }
2097
+ var p = startContainer.parentElement;
2098
+ if (p && editor.contains(p)) {
2099
+ ctx.formulaCache.rangeSetValueTo = p;
2100
+ return true;
2101
+ }
2102
+ return false;
2103
+ }
2104
+ if (startContainer.nodeType === Node.ELEMENT_NODE && startContainer === editor) {
2105
+ if (startOffset > 0) {
2106
+ var prev = startContainer.childNodes[startOffset - 1];
2107
+ if (prev) {
2108
+ ctx.formulaCache.rangeSetValueTo = prev;
2109
+ return true;
2110
+ }
2111
+ }
2112
+ return false;
2113
+ }
2114
+ if (startContainer.nodeType === Node.ELEMENT_NODE) {
2115
+ if (startOffset > 0) {
2116
+ var prev = startContainer.childNodes[startOffset - 1];
2117
+ if (prev) {
2118
+ ctx.formulaCache.rangeSetValueTo = prev;
2119
+ return true;
2120
+ }
2121
+ }
2122
+ var el = startContainer;
2123
+ while (el && el !== editor) {
2124
+ if (el.previousSibling) {
2125
+ ctx.formulaCache.rangeSetValueTo = el.previousSibling;
2126
+ return true;
2127
+ }
2128
+ el = el.parentElement;
2129
+ }
2130
+ }
2131
+ return false;
2132
+ }
1839
2133
  export function israngeseleciton(ctx, istooltip) {
1840
- var _a, _b, _c;
2134
+ var _a, _b, _c, _d;
1841
2135
  if (istooltip == null) {
1842
2136
  istooltip = false;
1843
2137
  }
1844
2138
  var currSelection = window.getSelection();
1845
- if (currSelection == null) return false;
2139
+ if (currSelection == null) {
2140
+ return false;
2141
+ }
1846
2142
  var anchor = currSelection.anchorNode;
1847
- if (!(anchor === null || anchor === void 0 ? void 0 : anchor.textContent)) return false;
2143
+ if (!anchor) {
2144
+ return false;
2145
+ }
1848
2146
  var anchorOffset = currSelection.anchorOffset;
1849
2147
  var anchorElement = anchor;
1850
2148
  var parentElement = anchor.parentNode;
2149
+ var allowRangeInsertionAtCaret = function allowRangeInsertionAtCaret() {
2150
+ var _a, _b;
2151
+ if (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true) {
2152
+ return true;
2153
+ }
2154
+ var editor = ((_a = anchorElement.closest) === null || _a === void 0 ? void 0 : _a.call(anchorElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || ((_b = parentElement.closest) === null || _b === void 0 ? void 0 : _b.call(parentElement, "#luckysheet-rich-text-editor, #luckysheet-functionbox-cell")) || document.getElementById("luckysheet-rich-text-editor");
2155
+ return isCaretAtValidFormulaRangeInsertionPoint(editor);
2156
+ };
1851
2157
  if (((_a = anchor === null || anchor === void 0 ? void 0 : anchor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeName.toLowerCase()) === "span" && anchorOffset !== 0) {
1852
- var txt = _.trim(anchor.textContent);
2158
+ var txt = _.trim((_b = anchor.textContent) !== null && _b !== void 0 ? _b : "");
1853
2159
  var lasttxt = "";
1854
2160
  if (txt.length === 0 && anchor.parentNode.previousSibling) {
1855
2161
  var ahr = anchor.parentNode.previousSibling;
1856
2162
  txt = _.trim(ahr.textContent || "");
1857
- lasttxt = txt.substring(txt.length - 1, 1);
1858
- ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
2163
+ lasttxt = txt.slice(-1);
1859
2164
  } else {
1860
- lasttxt = txt.substring(anchorOffset - 1, 1);
1861
- ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
2165
+ lasttxt = anchorOffset > 0 ? txt.charAt(anchorOffset - 1) : "";
1862
2166
  }
1863
2167
  if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
1864
- return true;
2168
+ ctx.formulaCache.rangeSetValueTo = anchor.parentNode;
2169
+ return allowRangeInsertionAtCaret();
1865
2170
  }
1866
2171
  } else if (anchorElement.id === "luckysheet-rich-text-editor" || anchorElement.id === "luckysheet-functionbox-cell") {
1867
- var txt = _.trim((_b = _.last(anchorElement.querySelectorAll("span"))) === null || _b === void 0 ? void 0 : _b.innerText);
1868
- ctx.formulaCache.rangeSetValueTo = _.last(anchorElement.querySelectorAll("span"));
1869
- if (txt.length === 0 && anchorElement.querySelectorAll("span").length > 1) {
1870
- var ahr = anchorElement.querySelectorAll("span");
1871
- txt = _.trim(ahr[ahr.length - 2].innerText);
1872
- txt = _.trim(ahr[ahr.length - 2].innerText);
1873
- ctx.formulaCache.rangeSetValueTo = ahr;
2172
+ var editorEl = anchorElement;
2173
+ if (currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editorEl, currSelection) && allowRangeInsertionAtCaret()) {
2174
+ return true;
2175
+ }
2176
+ var spans = editorEl.querySelectorAll("span");
2177
+ var txt = _.trim((_c = _.last(spans)) === null || _c === void 0 ? void 0 : _c.innerText);
2178
+ var refSpan = _.last(spans);
2179
+ if (txt.length === 0 && spans.length > 1) {
2180
+ txt = _.trim(spans[spans.length - 2].innerText);
2181
+ refSpan = spans[spans.length - 2];
1874
2182
  }
1875
- var lasttxt = txt.substring(txt.length - 1, 1);
2183
+ var lasttxt = txt.slice(-1);
1876
2184
  if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
1877
- return true;
2185
+ ctx.formulaCache.rangeSetValueTo = refSpan;
2186
+ return allowRangeInsertionAtCaret();
1878
2187
  }
1879
2188
  } else if (parentElement.id === "luckysheet-rich-text-editor" || parentElement.id === "luckysheet-functionbox-cell" || anchorOffset === 0) {
1880
2189
  if (anchorOffset === 0) {
1881
2190
  anchor = anchor.parentNode;
1882
2191
  }
1883
- if (!anchor) return false;
1884
- if (((_c = anchor.previousSibling) === null || _c === void 0 ? void 0 : _c.textContent) == null) return false;
2192
+ if (!anchor) {
2193
+ return false;
2194
+ }
2195
+ if (((_d = anchor.previousSibling) === null || _d === void 0 ? void 0 : _d.textContent) == null) {
2196
+ return false;
2197
+ }
1885
2198
  if (anchor.previousSibling) {
1886
2199
  var txt = _.trim(anchor.previousSibling.textContent);
1887
- var lasttxt = txt.substring(txt.length - 1, 1);
1888
- ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
2200
+ var lasttxt = txt.slice(-1);
1889
2201
  if (istooltip && (lasttxt === "(" || lasttxt === ",") || !istooltip && (lasttxt === "(" || lasttxt === "," || lasttxt === "=" || lasttxt in operatorjson || lasttxt === "&")) {
1890
- return true;
2202
+ ctx.formulaCache.rangeSetValueTo = anchor.previousSibling;
2203
+ return allowRangeInsertionAtCaret();
1891
2204
  }
1892
2205
  }
1893
2206
  }
2207
+ if (!istooltip && (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true)) {
2208
+ var editor = document.getElementById("luckysheet-rich-text-editor") || document.getElementById("luckysheet-functionbox-cell");
2209
+ if (editor && currSelection.rangeCount > 0 && setRangeSetValueToFromCaretPosition(ctx, editor, currSelection) && allowRangeInsertionAtCaret()) {
2210
+ return true;
2211
+ }
2212
+ }
2213
+ return false;
2214
+ }
2215
+ export function isFormulaReferenceInputMode(ctx) {
2216
+ var editor = getActiveFormulaEditorElement(ctx);
2217
+ var inputText = ((editor === null || editor === void 0 ? void 0 : editor.innerText) || "").trim();
2218
+ var refFlowActive = !!ctx.formulaCache.rangestart || !!ctx.formulaCache.rangedrag_column_start || !!ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
2219
+ if (refFlowActive) {
2220
+ return true;
2221
+ }
2222
+ if (!inputText.startsWith("=")) {
2223
+ return false;
2224
+ }
2225
+ if (/^=\s*[A-Za-z_][A-Za-z0-9_]*$/.test(inputText)) {
2226
+ return false;
2227
+ }
2228
+ if (editor && isCaretAtValidFormulaRangeInsertionPoint(editor)) {
2229
+ if (ctx.formulaCache.rangeSelectionActive === false) {
2230
+ ctx.formulaCache.rangeSelectionActive = null;
2231
+ }
2232
+ return true;
2233
+ }
2234
+ if (ctx.formulaCache.rangeSelectionActive === false) {
2235
+ return false;
2236
+ }
2237
+ return israngeseleciton(ctx);
2238
+ }
2239
+ export function maybeRecoverDirtyRangeSelection(ctx) {
2240
+ if (ctx.formulaCache.rangeSelectionActive !== false) {
2241
+ return false;
2242
+ }
2243
+ var editor = getActiveFormulaEditorElement(ctx);
2244
+ if (!editor) {
2245
+ return false;
2246
+ }
2247
+ var inputText = (editor.innerText || "").trim();
2248
+ var atCaretRangeIndex = getFormulaRangeIndexAtCaret(editor);
2249
+ if (inputText.startsWith("=") && atCaretRangeIndex === null && isCaretAtValidFormulaRangeInsertionPoint(editor) && israngeseleciton(ctx)) {
2250
+ ctx.formulaCache.rangeSelectionActive = null;
2251
+ return true;
2252
+ }
1894
2253
  return false;
1895
2254
  }
1896
2255
  export function functionStrChange(txt, type, rc, orient, stindex, step) {
@@ -1988,18 +2347,22 @@ export function functionStrChange(txt, type, rc, orient, stindex, step) {
1988
2347
  return function_str;
1989
2348
  }
1990
2349
  export function rangeSetValue(ctx, cellInput, selected, fxInput) {
1991
- var _a, _b, _c, _d, _e;
2350
+ var _a, _b, _c, _d, _e, _f;
1992
2351
  var parser = new DOMParser();
1993
2352
  var doc = parser.parseFromString("<div>".concat(cellInput.innerHTML, "</div>"), "text/html");
1994
2353
  var spans = doc.querySelectorAll("span");
1995
2354
  var lastSpan = spans[spans.length - 1];
1996
- if (lastSpan && isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText)) {
2355
+ var isManagedRangeSpan = (_b = (_a = lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.classList) === null || _a === void 0 ? void 0 : _a.contains("fortune-formula-functionrange-cell")) !== null && _b !== void 0 ? _b : false;
2356
+ if (lastSpan && isLetterNumberPattern(lastSpan === null || lastSpan === void 0 ? void 0 : lastSpan.innerText) && !isManagedRangeSpan) {
1997
2357
  var htmlR = removeLastSpan(cellInput.innerHTML);
1998
2358
  cellInput.innerHTML = "".concat(htmlR);
2359
+ cellInput.focus();
2360
+ var kids = cellInput.childNodes;
2361
+ ctx.formulaCache.rangeSetValueTo = kids.length > 0 ? kids[kids.length - 1] : undefined;
1999
2362
  }
2000
2363
  var $editor = cellInput;
2001
2364
  var $copyTo = fxInput;
2002
- if (((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.id) === "luckysheet-functionbox-cell") {
2365
+ if (getFormulaEditorOwner(ctx) === "fx") {
2003
2366
  $editor = fxInput;
2004
2367
  $copyTo = cellInput;
2005
2368
  }
@@ -2014,20 +2377,23 @@ export function rangeSetValue(ctx, cellInput, selected, fxInput) {
2014
2377
  } else {
2015
2378
  range = getRangetxt(ctx, ctx.currentSheetId, selected, ctx.formulaCache.rangetosheet);
2016
2379
  }
2017
- if (!israngeseleciton(ctx) && (ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start)) {
2018
- var span = $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']"));
2019
- if (span) {
2020
- span.innerHTML = range;
2021
- setCaretPosition(ctx, span, 0, range.length);
2022
- }
2380
+ var activeRangeFlow = ctx.formulaCache.rangestart || ctx.formulaCache.rangedrag_column_start || ctx.formulaCache.rangedrag_row_start || ctx.formulaCache.rangeSelectionActive === true;
2381
+ var spanToReplace = !_.isNil(ctx.formulaCache.rangechangeindex) ? $editor.querySelector("span[rangeindex='".concat(ctx.formulaCache.rangechangeindex, "']")) : null;
2382
+ if (activeRangeFlow && spanToReplace) {
2383
+ spanToReplace.innerHTML = range;
2384
+ setCaretPosition(ctx, spanToReplace, 0, range.length);
2023
2385
  } else {
2024
2386
  var function_str = "<span class=\"fortune-formula-functionrange-cell\" rangeindex=\"".concat(functionHTMLIndex, "\" dir=\"auto\" style=\"color:").concat(colors[functionHTMLIndex], ";\">").concat(range, "</span>");
2025
2387
  var newEle = parseElement(function_str);
2026
2388
  var refEle = ctx.formulaCache.rangeSetValueTo;
2389
+ if (refEle && !refEle.parentNode) {
2390
+ israngeseleciton(ctx);
2391
+ refEle = ctx.formulaCache.rangeSetValueTo;
2392
+ }
2027
2393
  if (refEle && refEle.parentNode) {
2028
- var leftPar = (_b = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _b === void 0 ? void 0 : _b[0];
2029
- if ((_c = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _c === void 0 ? void 0 : _c.classList.contains("luckysheet-formula-text-color")) {
2030
- (_e = (_d = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _d === void 0 ? void 0 : _d[0].parentNode) === null || _e === void 0 ? void 0 : _e.appendChild(newEle);
2394
+ var leftPar = (_c = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _c === void 0 ? void 0 : _c[0];
2395
+ if ((_d = leftPar === null || leftPar === void 0 ? void 0 : leftPar.parentElement) === null || _d === void 0 ? void 0 : _d.classList.contains("luckysheet-formula-text-color")) {
2396
+ (_f = (_e = document.getElementsByClassName("luckysheet-formula-text-lpar")) === null || _e === void 0 ? void 0 : _e[0].parentNode) === null || _f === void 0 ? void 0 : _f.appendChild(newEle);
2031
2397
  } else {
2032
2398
  refEle.parentNode.insertBefore(newEle, refEle.nextSibling);
2033
2399
  }
@@ -2067,6 +2433,7 @@ function setRangeSelect(container, left, top, height, width) {
2067
2433
  rangeElement.style.width = "".concat(width, "px");
2068
2434
  }
2069
2435
  export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
2436
+ ctx.formulaCache.rangeSelectionActive = true;
2070
2437
  var func_selectedrange = ctx.formulaCache.func_selectedrange;
2071
2438
  if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
2072
2439
  var rect = container.getBoundingClientRect();
@@ -2122,6 +2489,20 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
2122
2489
  func_selectedrange.width_move = width;
2123
2490
  func_selectedrange.top_move = top;
2124
2491
  func_selectedrange.height_move = height;
2492
+ ctx.luckysheet_select_save = [{
2493
+ row: [rowseleted[0], rowseleted[1]],
2494
+ column: [columnseleted[0], columnseleted[1]],
2495
+ row_focus: row_index,
2496
+ column_focus: col_index,
2497
+ left: left,
2498
+ top: top,
2499
+ width: width,
2500
+ height: height,
2501
+ left_move: left,
2502
+ top_move: top,
2503
+ width_move: width,
2504
+ height_move: height
2505
+ }];
2125
2506
  rangeSetValue(ctx, cellInput, {
2126
2507
  row: rowseleted,
2127
2508
  column: columnseleted
@@ -2130,6 +2511,7 @@ export function rangeDrag(ctx, e, cellInput, scrollLeft, scrollTop, container, f
2130
2511
  e.preventDefault();
2131
2512
  }
2132
2513
  export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
2514
+ ctx.formulaCache.rangeSelectionActive = true;
2133
2515
  var func_selectedrange = ctx.formulaCache.func_selectedrange;
2134
2516
  if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
2135
2517
  var mouse = mousePosition(e.pageX, e.pageY, ctx);
@@ -2165,6 +2547,20 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
2165
2547
  func_selectedrange.column = columnseleted;
2166
2548
  func_selectedrange.left_move = left;
2167
2549
  func_selectedrange.width_move = width;
2550
+ ctx.luckysheet_select_save = [{
2551
+ row: [0, row_index],
2552
+ column: [columnseleted[0], columnseleted[1]],
2553
+ row_focus: 0,
2554
+ column_focus: col_index,
2555
+ left: left,
2556
+ top: row_pre,
2557
+ width: width,
2558
+ height: row - row_pre - 1,
2559
+ left_move: left,
2560
+ top_move: row_pre,
2561
+ width_move: width,
2562
+ height_move: row - row_pre - 1
2563
+ }];
2168
2564
  rangeSetValue(ctx, cellInput, {
2169
2565
  row: [null, null],
2170
2566
  column: columnseleted
@@ -2172,6 +2568,7 @@ export function rangeDragColumn(ctx, e, cellInput, scrollLeft, scrollTop, contai
2172
2568
  setRangeSelect(container, left, row_pre, row - row_pre - 1, width);
2173
2569
  }
2174
2570
  export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container, fxInput) {
2571
+ ctx.formulaCache.rangeSelectionActive = true;
2175
2572
  var func_selectedrange = ctx.formulaCache.func_selectedrange;
2176
2573
  if (!func_selectedrange || func_selectedrange.left == null || func_selectedrange.height == null || func_selectedrange.top == null || func_selectedrange.width == null) return;
2177
2574
  var mouse = mousePosition(e.pageX, e.pageY, ctx);
@@ -2207,6 +2604,20 @@ export function rangeDragRow(ctx, e, cellInput, scrollLeft, scrollTop, container
2207
2604
  func_selectedrange.row = rowseleted;
2208
2605
  func_selectedrange.top_move = top;
2209
2606
  func_selectedrange.height_move = height;
2607
+ ctx.luckysheet_select_save = [{
2608
+ row: [rowseleted[0], rowseleted[1]],
2609
+ column: [0, col_index],
2610
+ row_focus: row_index,
2611
+ column_focus: 0,
2612
+ left: col_pre,
2613
+ top: top,
2614
+ width: col - col_pre - 1,
2615
+ height: height,
2616
+ left_move: col_pre,
2617
+ top_move: top,
2618
+ width_move: col - col_pre - 1,
2619
+ height_move: height
2620
+ }];
2210
2621
  rangeSetValue(ctx, cellInput, {
2211
2622
  row: rowseleted,
2212
2623
  column: [null, null]
@@ -2408,7 +2819,7 @@ export function functionCopy(ctx, txt, mode, step) {
2408
2819
  str += s;
2409
2820
  }
2410
2821
  if (i === funcstack.length - 1) {
2411
- if (iscelldata(_.trim(str)) && !_.trim(str).includes("$")) {
2822
+ if (iscelldata(_.trim(str))) {
2412
2823
  if (mode === "down") {
2413
2824
  function_str += downparam(_.trim(str), step);
2414
2825
  } else if (mode === "up") {
@@ -2426,4 +2837,152 @@ export function functionCopy(ctx, txt, mode, step) {
2426
2837
  }
2427
2838
  function_str = function_str.replace(/NaN/g, "");
2428
2839
  return function_str;
2840
+ }
2841
+ function normalizeSheetName(ref) {
2842
+ var unquoted = ref.startsWith("'") && ref.endsWith("'") ? ref.slice(1, -1).replace(/''/g, "'") : ref;
2843
+ return unquoted;
2844
+ }
2845
+ function parseRefToken(token) {
2846
+ var m = token.match(/^(\$?)([A-Za-z]+)(\$?)(\d+)$/);
2847
+ if (!m) return null;
2848
+ var colAbs = m[1] === "$";
2849
+ var col = columnCharToIndex(m[2]);
2850
+ var rowAbs = m[3] === "$";
2851
+ var row = parseInt(m[4], 10) - 1;
2852
+ if (Number.isNaN(row) || Number.isNaN(col)) return null;
2853
+ return {
2854
+ colAbs: colAbs,
2855
+ rowAbs: rowAbs,
2856
+ col: col,
2857
+ row: row
2858
+ };
2859
+ }
2860
+ function formatRefToken(parts) {
2861
+ return "".concat(parts.colAbs ? "$" : "").concat(indexToColumnChar(parts.col)).concat(parts.rowAbs ? "$" : "").concat(parts.row + 1);
2862
+ }
2863
+ function moveSingleRefToken(token, sourceRect, targetRowStart, targetColStart) {
2864
+ var parsed = parseRefToken(token);
2865
+ if (!parsed) return token;
2866
+ var inSourceRect = parsed.row >= sourceRect.rowStart && parsed.row <= sourceRect.rowEnd && parsed.col >= sourceRect.colStart && parsed.col <= sourceRect.colEnd;
2867
+ if (!inSourceRect) return token;
2868
+ return formatRefToken(__assign(__assign({}, parsed), {
2869
+ row: targetRowStart + (parsed.row - sourceRect.rowStart),
2870
+ col: targetColStart + (parsed.col - sourceRect.colStart)
2871
+ }));
2872
+ }
2873
+ function moveRangeRefToken(token, sourceRect, targetRowStart, targetColStart) {
2874
+ var parts = token.split(":");
2875
+ if (parts.length === 1) {
2876
+ return moveSingleRefToken(token, sourceRect, targetRowStart, targetColStart);
2877
+ }
2878
+ if (parts.length !== 2) return token;
2879
+ var left = moveSingleRefToken(parts[0], sourceRect, targetRowStart, targetColStart);
2880
+ var right = moveSingleRefToken(parts[1], sourceRect, targetRowStart, targetColStart);
2881
+ return "".concat(left, ":").concat(right);
2882
+ }
2883
+ function moveFormulaReferenceToken(token, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) {
2884
+ var exclamation = token.lastIndexOf("!");
2885
+ var sheetPrefix = "";
2886
+ var rangeToken = token;
2887
+ var refSheetName = formulaSheetName;
2888
+ if (exclamation > -1) {
2889
+ sheetPrefix = token.slice(0, exclamation + 1);
2890
+ rangeToken = token.slice(exclamation + 1);
2891
+ refSheetName = normalizeSheetName(sheetPrefix.slice(0, -1));
2892
+ }
2893
+ if (refSheetName !== movedSheetName) return token;
2894
+ var moved = moveRangeRefToken(rangeToken, sourceRect, targetRowStart, targetColStart);
2895
+ return "".concat(sheetPrefix).concat(moved);
2896
+ }
2897
+ export function functionMoveReference(txt, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) {
2898
+ if (!txt) {
2899
+ return "";
2900
+ }
2901
+ if (txt.substring(0, 1) === "=") {
2902
+ txt = txt.substring(1);
2903
+ }
2904
+ var funcstack = txt.split("");
2905
+ var i = 0;
2906
+ var str = "";
2907
+ var function_str = "";
2908
+ var matchConfig = {
2909
+ bracket: 0,
2910
+ comma: 0,
2911
+ squote: 0,
2912
+ dquote: 0
2913
+ };
2914
+ while (i < funcstack.length) {
2915
+ var s = funcstack[i];
2916
+ if (s === "(" && matchConfig.dquote === 0) {
2917
+ matchConfig.bracket += 1;
2918
+ function_str += str.length > 0 ? "".concat(str, "(") : "(";
2919
+ str = "";
2920
+ } else if (s === ")" && matchConfig.dquote === 0) {
2921
+ matchConfig.bracket -= 1;
2922
+ function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), ")");
2923
+ str = "";
2924
+ } else if (s === '"' && matchConfig.squote === 0) {
2925
+ if (matchConfig.dquote > 0) {
2926
+ function_str += "".concat(str, "\"");
2927
+ matchConfig.dquote -= 1;
2928
+ str = "";
2929
+ } else {
2930
+ matchConfig.dquote += 1;
2931
+ str += '"';
2932
+ }
2933
+ } else if (s === "," && matchConfig.dquote === 0) {
2934
+ function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), ",");
2935
+ str = "";
2936
+ } else if (s === "&" && matchConfig.dquote === 0) {
2937
+ if (str.length > 0) {
2938
+ function_str += "".concat(functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart), "&");
2939
+ str = "";
2940
+ } else {
2941
+ function_str += "&";
2942
+ }
2943
+ } else if (s in operatorjson && matchConfig.dquote === 0) {
2944
+ var s_next = "";
2945
+ if (i + 1 < funcstack.length) {
2946
+ s_next = funcstack[i + 1];
2947
+ }
2948
+ var p = i - 1;
2949
+ var s_pre = null;
2950
+ if (p >= 0) {
2951
+ do {
2952
+ s_pre = funcstack[p];
2953
+ p -= 1;
2954
+ } while (p >= 0 && s_pre === " ");
2955
+ }
2956
+ if (s + s_next in operatorjson) {
2957
+ if (str.length > 0) {
2958
+ function_str += functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) + s + s_next;
2959
+ str = "";
2960
+ } else {
2961
+ function_str += s + s_next;
2962
+ }
2963
+ i += 1;
2964
+ } else if (!/[^0-9]/.test(s_next) && s === "-" && (s_pre === "(" || s_pre == null || s_pre === "," || s_pre === " " || s_pre in operatorjson)) {
2965
+ str += s;
2966
+ } else {
2967
+ if (str.length > 0) {
2968
+ function_str += functionMoveReference(str, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart) + s;
2969
+ str = "";
2970
+ } else {
2971
+ function_str += s;
2972
+ }
2973
+ }
2974
+ } else {
2975
+ str += s;
2976
+ }
2977
+ if (i === funcstack.length - 1) {
2978
+ var t = _.trim(str);
2979
+ if (iscelldata(t)) {
2980
+ function_str += moveFormulaReferenceToken(t, formulaSheetName, movedSheetName, sourceRect, targetRowStart, targetColStart);
2981
+ } else {
2982
+ function_str += t;
2983
+ }
2984
+ }
2985
+ i += 1;
2986
+ }
2987
+ return function_str;
2429
2988
  }