[add] initial handler stuff

This commit is contained in:
Andy Bunce 2025-09-07 22:04:53 +01:00
parent 7deb653208
commit 9533519b8a
10 changed files with 284 additions and 187 deletions

View file

@ -76,27 +76,7 @@ const baseExts = [
StreamLanguage.define(xQuery) StreamLanguage.define(xQuery)
]; ];
function debouncedChangeListener({ delay = 750, onChange }) {
let timeoutId = null;
let lastContent = '';
return EditorView.updateListener.of(update => {
if (update.docChanged) {
const currentContent = update.state.doc.toString();
if (timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(() => {
if (currentContent !== lastContent) {
lastContent = currentContent;
onChange(currentContent, update.state);
}
}, delay);
}
});
};
// map cmd->{keybings,fn} // map cmd->{keybings,fn}
function listCommands(view) { function listCommands(view) {
@ -114,4 +94,4 @@ function listCommands(view) {
export { baseExts, EditorView, EditorState, StateEffect, LSPPlugin, LSPClient, export { baseExts, EditorView, EditorState, StateEffect, LSPPlugin, LSPClient,
openSearchPanel, openLintPanel, languageServerSupport, languageServerExtensions, openSearchPanel, openLintPanel, languageServerSupport, languageServerExtensions,
simpleWebSocketTransport, linter, formatDocument,keymap,formatKeymap, debouncedChangeListener, listCommands }; simpleWebSocketTransport, linter, formatDocument,keymap,formatKeymap, listCommands };

6
docs/notes.md Normal file
View file

@ -0,0 +1,6 @@
<any/><token>:=</token><any/>
$p update 
replace node //token[.=':='][preceding-siblings::*[1]/element()][following-siblings::*[1]/element()]with (' ',.,' ')...........................
---------------Nico Verwer: SMAX (Separated Markup API for XML). SMAX (Separated Markup API for XML) https://github.com/nverwer/SMAX

228
package-lock.json generated
View file

@ -12,7 +12,7 @@
"@codemirror/language-data": "^6.5.1", "@codemirror/language-data": "^6.5.1",
"@codemirror/legacy-modes": "^6.5.1", "@codemirror/legacy-modes": "^6.5.1",
"@codemirror/lint": "^6.8.5", "@codemirror/lint": "^6.8.5",
"@codemirror/lsp-client": "^6.1.0", "@codemirror/lsp-client": "^6.1.1",
"@codemirror/search": "^6.5.11", "@codemirror/search": "^6.5.11",
"@codemirror/theme-one-dark": "^6.1.0", "@codemirror/theme-one-dark": "^6.1.0",
"@codemirror/view": "^6.38.1", "@codemirror/view": "^6.38.1",
@ -28,9 +28,9 @@
} }
}, },
"node_modules/@codemirror/autocomplete": { "node_modules/@codemirror/autocomplete": {
"version": "6.18.6", "version": "6.18.7",
"resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.6.tgz", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.7.tgz",
"integrity": "sha512-PHHBXFomUs5DF+9tCOM/UoW6XQ4R44lLNNhRaW9PKPTU0D7lIjRg3ElxaJnTwsl/oHiR93WSXDBrekhoUGCPtg==", "integrity": "sha512-8EzdeIoWPJDsMBwz3zdzwXnUpCzMiCyz5/A3FIPpriaclFCGDkAzK13sMcnsu5rowqiyeQN2Vs2TsOcoDPZirQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/language": "^6.0.0", "@codemirror/language": "^6.0.0",
@ -380,13 +380,14 @@
} }
}, },
"node_modules/@codemirror/lsp-client": { "node_modules/@codemirror/lsp-client": {
"version": "6.1.0", "version": "6.1.1",
"resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.1.0.tgz", "resolved": "https://registry.npmjs.org/@codemirror/lsp-client/-/lsp-client-6.1.1.tgz",
"integrity": "sha512-DRZ97ZvTywU6IvGvmImNFIOWo2IkI1V6EccXrgId7/nJ7IhUQNFkGRMafDGX8plr65ngCBH+u9Sy0fTuGu39BA==", "integrity": "sha512-ydz4LbaERepN2YPn/SEZLOs7A+3I5cxMrXay69XjrXyETX3+6Bw2+UjAbpnY6ihsvPj3OFV+knJBLhNjoPtBEw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/autocomplete": "^6.18.6", "@codemirror/autocomplete": "^6.18.6",
"@codemirror/language": "^6.11.0", "@codemirror/language": "^6.11.0",
"@codemirror/lint": "^6.8.5",
"@codemirror/state": "^6.5.2", "@codemirror/state": "^6.5.2",
"@codemirror/view": "^6.37.0", "@codemirror/view": "^6.37.0",
"@lezer/highlight": "^1.2.1", "@lezer/highlight": "^1.2.1",
@ -427,9 +428,9 @@
} }
}, },
"node_modules/@codemirror/view": { "node_modules/@codemirror/view": {
"version": "6.38.1", "version": "6.38.2",
"resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.1.tgz", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.2.tgz",
"integrity": "sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==", "integrity": "sha512-bTWAJxL6EOFLPzTx+O5P5xAO3gTqpatQ2b/ARQ8itfU/v2LlpS3pH2fkL0A3E/Fx8Y2St2KES7ZEV0sHTsSW/A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@codemirror/state": "^6.5.0", "@codemirror/state": "^6.5.0",
@ -559,9 +560,9 @@
} }
}, },
"node_modules/@lezer/javascript": { "node_modules/@lezer/javascript": {
"version": "1.5.1", "version": "1.5.2",
"resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.1.tgz", "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.2.tgz",
"integrity": "sha512-ATOImjeVJuvgm3JQ/bpo2Tmv55HSScE2MTPnKRMRIPx2cLhHGyX2VnqpHhtIV1tVzIjZDbcWQm+NCTF40ggZVw==", "integrity": "sha512-oJDMyptbtS/zhSi/uOszsqCm7/0l6QpbnvjoXBgNiFlk4NHrqoP/+psiVxYKYe9GHRr6K7jBSxwmIW61TrtZOQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@lezer/common": "^1.2.0", "@lezer/common": "^1.2.0",
@ -724,9 +725,9 @@
} }
}, },
"node_modules/@rollup/pluginutils": { "node_modules/@rollup/pluginutils": {
"version": "5.2.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
"integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -747,9 +748,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz",
"integrity": "sha512-rGmb8qoG/zdmKoYELCBwu7vt+9HxZ7Koos3pD0+sH5fR3u3Wb/jGcpnqxcnWsPEKDUyzeLSqksN8LJtgXjqBYw==", "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -761,9 +762,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz",
"integrity": "sha512-4e9WtTxrk3gu1DFE+imNJr4WsL13nWbD/Y6wQcyku5qadlKHY3OQ3LJ/INrrjngv2BJIHnIzbqMk1GTAC2P8yQ==", "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -775,9 +776,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz",
"integrity": "sha512-+XjmyChHfc4TSs6WUQGmVf7Hkg8ferMAE2aNYYWjiLzAS/T62uOsdfnqv+GHRjq7rKRnYh4mwWb4Hz7h/alp8A==", "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -789,9 +790,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz",
"integrity": "sha512-upGEY7Ftw8M6BAJyGwnwMw91rSqXTcOKZnnveKrVWsMTF8/k5mleKSuh7D4v4IV1pLxKAk3Tbs0Lo9qYmii5mQ==", "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -803,9 +804,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-arm64": { "node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz",
"integrity": "sha512-P9ViWakdoynYFUOZhqq97vBrhuvRLAbN/p2tAVJvhLb8SvN7rbBnJQcBu8e/rQts42pXGLVhfsAP0k9KXWa3nQ==", "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -817,9 +818,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-x64": { "node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz",
"integrity": "sha512-VLKIwIpnBya5/saccM8JshpbxfyJt0Dsli0PjXozHwbSVaHTvWXJH1bbCwPXxnMzU4zVEfgD1HpW3VQHomi2AQ==", "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -831,9 +832,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz",
"integrity": "sha512-3zEuZsXfKaw8n/yF7t8N6NNdhyFw3s8xJTqjbTDXlipwrEHo4GtIKcMJr5Ed29leLpB9AugtAQpAHW0jvtKKaQ==", "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -845,9 +846,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz",
"integrity": "sha512-leo9tOIlKrcBmmEypzunV/2w946JeLbTdDlwEZ7OnnsUyelZ72NMnT4B2vsikSgwQifjnJUbdXzuW4ToN1wV+Q==", "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -859,9 +860,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz",
"integrity": "sha512-Vy/WS4z4jEyvnJm+CnPfExIv5sSKqZrUr98h03hpAMbE2aI0aD2wvK6GiSe8Gx2wGp3eD81cYDpLLBqNb2ydwQ==", "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -873,9 +874,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz",
"integrity": "sha512-x5Kzn7XTwIssU9UYqWDB9VpLpfHYuXw5c6bJr4Mzv9kIv242vmJHbI5PJJEnmBYitUIfoMCODDhR7KoZLot2VQ==", "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -887,9 +888,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-loongarch64-gnu": { "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz",
"integrity": "sha512-yzCaBbwkkWt/EcgJOKDUdUpMHjhiZT/eDktOPWvSRpqrVE04p0Nd6EGV4/g7MARXXeOqstflqsKuXVM3H9wOIQ==", "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@ -901,9 +902,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-ppc64-gnu": { "node_modules/@rollup/rollup-linux-ppc64-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz",
"integrity": "sha512-UK0WzWUjMAJccHIeOpPhPcKBqax7QFg47hwZTp6kiMhQHeOYJeaMwzeRZe1q5IiTKsaLnHu9s6toSYVUlZ2QtQ==", "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -915,9 +916,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz",
"integrity": "sha512-3NADEIlt+aCdCbWVZ7D3tBjBX1lHpXxcvrLt/kdXTiBrOds8APTdtk2yRL2GgmnSVeX4YS1JIf0imFujg78vpw==", "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -929,9 +930,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-musl": { "node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz",
"integrity": "sha512-euuwm/QTXAMOcyiFCcrx0/S2jGvFlKJ2Iro8rsmYL53dlblp3LkUQVFzEidHhvIPPvcIsxDhl2wkBE+I6YVGzA==", "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -943,9 +944,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz",
"integrity": "sha512-w8mULUjmPdWLJgmTYJx/W6Qhln1a+yqvgwmGXcQl2vFBkWsKGUBRbtLRuKJUln8Uaimf07zgJNxOhHOvjSQmBQ==", "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@ -957,9 +958,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz",
"integrity": "sha512-90taWXCWxTbClWuMZD0DKYohY1EovA+W5iytpE89oUPmT5O1HFdf8cuuVIylE6vCbrGdIGv85lVRzTcpTRZ+kA==", "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -971,9 +972,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz",
"integrity": "sha512-2Gu29SkFh1FfTRuN1GR1afMuND2GKzlORQUP3mNMJbqdndOg7gNsa81JnORctazHRokiDzQ5+MLE5XYmZW5VWg==", "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -984,10 +985,24 @@
"linux" "linux"
] ]
}, },
"node_modules/@rollup/rollup-openharmony-arm64": {
"version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz",
"integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==",
"cpu": [
"arm64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"openharmony"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz",
"integrity": "sha512-6kQFR1WuAO50bxkIlAVeIYsz3RUx+xymwhTo9j94dJ+kmHe9ly7muH23sdfWduD0BA8pD9/yhonUvAjxGh34jQ==", "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -999,9 +1014,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz",
"integrity": "sha512-RUyZZ/mga88lMI3RlXFs4WQ7n3VyU07sPXmMG7/C1NOi8qisUg57Y7LRarqoGoAiopmGmChUhSwfpvQ3H5iGSQ==", "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -1013,9 +1028,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.48.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz",
"integrity": "sha512-8a/caCUN4vkTChxkaIJcMtwIVcBhi4X2PQRoT+yCK3qRYaZ7cURrmJFL5Ux9H9RaMIXj9RuihckdmkBX3zZsgg==", "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1041,9 +1056,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/ace-builds": { "node_modules/ace-builds": {
"version": "1.43.2", "version": "1.43.3",
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.2.tgz", "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.43.3.tgz",
"integrity": "sha512-3wzJUJX0RpMc03jo0V8Q3bSb/cKPnS7Nqqw8fVHsCCHweKMiTIxT3fP46EhjmVy6MCuxwP801ere+RW245phGw==", "integrity": "sha512-MCl9rALmXwIty/4Qboijo/yNysx1r6hBTzG+6n/TiOm5LFhZpEvEIcIITPFiEOEFDfgBOEmxu+a4f54LEFM6Sg==",
"license": "BSD-3-Clause" "license": "BSD-3-Clause"
}, },
"node_modules/ace-linters": { "node_modules/ace-linters": {
@ -1529,9 +1544,9 @@
} }
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.48.1", "version": "4.50.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.48.1.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz",
"integrity": "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==", "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -1545,26 +1560,27 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.48.1", "@rollup/rollup-android-arm-eabi": "4.50.1",
"@rollup/rollup-android-arm64": "4.48.1", "@rollup/rollup-android-arm64": "4.50.1",
"@rollup/rollup-darwin-arm64": "4.48.1", "@rollup/rollup-darwin-arm64": "4.50.1",
"@rollup/rollup-darwin-x64": "4.48.1", "@rollup/rollup-darwin-x64": "4.50.1",
"@rollup/rollup-freebsd-arm64": "4.48.1", "@rollup/rollup-freebsd-arm64": "4.50.1",
"@rollup/rollup-freebsd-x64": "4.48.1", "@rollup/rollup-freebsd-x64": "4.50.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.48.1", "@rollup/rollup-linux-arm-gnueabihf": "4.50.1",
"@rollup/rollup-linux-arm-musleabihf": "4.48.1", "@rollup/rollup-linux-arm-musleabihf": "4.50.1",
"@rollup/rollup-linux-arm64-gnu": "4.48.1", "@rollup/rollup-linux-arm64-gnu": "4.50.1",
"@rollup/rollup-linux-arm64-musl": "4.48.1", "@rollup/rollup-linux-arm64-musl": "4.50.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.48.1", "@rollup/rollup-linux-loongarch64-gnu": "4.50.1",
"@rollup/rollup-linux-ppc64-gnu": "4.48.1", "@rollup/rollup-linux-ppc64-gnu": "4.50.1",
"@rollup/rollup-linux-riscv64-gnu": "4.48.1", "@rollup/rollup-linux-riscv64-gnu": "4.50.1",
"@rollup/rollup-linux-riscv64-musl": "4.48.1", "@rollup/rollup-linux-riscv64-musl": "4.50.1",
"@rollup/rollup-linux-s390x-gnu": "4.48.1", "@rollup/rollup-linux-s390x-gnu": "4.50.1",
"@rollup/rollup-linux-x64-gnu": "4.48.1", "@rollup/rollup-linux-x64-gnu": "4.50.1",
"@rollup/rollup-linux-x64-musl": "4.48.1", "@rollup/rollup-linux-x64-musl": "4.50.1",
"@rollup/rollup-win32-arm64-msvc": "4.48.1", "@rollup/rollup-openharmony-arm64": "4.50.1",
"@rollup/rollup-win32-ia32-msvc": "4.48.1", "@rollup/rollup-win32-arm64-msvc": "4.50.1",
"@rollup/rollup-win32-x64-msvc": "4.48.1", "@rollup/rollup-win32-ia32-msvc": "4.50.1",
"@rollup/rollup-win32-x64-msvc": "4.50.1",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@ -1638,14 +1654,14 @@
} }
}, },
"node_modules/terser": { "node_modules/terser": {
"version": "5.43.1", "version": "5.44.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz",
"integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==",
"dev": true, "dev": true,
"license": "BSD-2-Clause", "license": "BSD-2-Clause",
"dependencies": { "dependencies": {
"@jridgewell/source-map": "^0.3.3", "@jridgewell/source-map": "^0.3.3",
"acorn": "^8.14.0", "acorn": "^8.15.0",
"commander": "^2.20.0", "commander": "^2.20.0",
"source-map-support": "~0.5.20" "source-map-support": "~0.5.20"
}, },

View file

@ -7,7 +7,7 @@
"@codemirror/language-data": "^6.5.1", "@codemirror/language-data": "^6.5.1",
"@codemirror/legacy-modes": "^6.5.1", "@codemirror/legacy-modes": "^6.5.1",
"@codemirror/lint": "^6.8.5", "@codemirror/lint": "^6.8.5",
"@codemirror/lsp-client": "^6.1.0", "@codemirror/lsp-client": "^6.1.1",
"@codemirror/search": "^6.5.11", "@codemirror/search": "^6.5.11",
"@codemirror/theme-one-dark": "^6.1.0", "@codemirror/theme-one-dark": "^6.1.0",
"@codemirror/view": "^6.38.1", "@codemirror/view": "^6.38.1",
@ -22,8 +22,8 @@
"rollup-plugin-tla": "^0.0.2" "rollup-plugin-tla": "^0.0.2"
}, },
"scripts": { "scripts": {
"build": "rollup src/index.js -m true -f iife -o dist/cm6.bundle.js -p node-resolve,tla --output.name cm6", "build": "rollup cm6/index.js -m true -f iife -o dist/cm6.bundle.js -p node-resolve,tla --output.name cm6",
"lsp-build": "rollup bundles/src/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp", "lsp-build": "rollup bundles/cm6/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp",
"lsp-min": "cd webapp/static/clients/codemirror && npx minify lsp.bundle.js > lsp.bundle.min.js ", "lsp-min": "cd webapp/static/clients/codemirror && npx minify lsp.bundle.js > lsp.bundle.min.js ",
"min": "cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js && npx minify lsp.bundle.js > lsp.bundle.min.js", "min": "cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js && npx minify lsp.bundle.js > lsp.bundle.min.js",
"javac": "cd bundles/grammar && javac -cp %BASEX12%\\BaseX.jar -d build xq4.java && cd build && jar cf ../../../webapp/custom/xq4.jar . " "javac": "cd bundles/grammar && javac -cp %BASEX12%\\BaseX.jar -d build xq4.java && cd build && jar cf ../../../webapp/custom/xq4.jar . "

View file

@ -287,6 +287,7 @@ as map(*)*{
return if(exists($outline)) return if(exists($outline))
then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline)) then pdfbox:outline($pdf,PDOutlineItem:getFirstChild($outline))
else ()
} }
}; };
@ -363,6 +364,7 @@ as item()?
then PDDocument:getDocumentCatalog($pdf) then PDDocument:getDocumentCatalog($pdf)
=>PDDocumentCatalog:getPages() =>PDDocumentCatalog:getPages()
=>PDPageTree:indexOf($page) =>PDPageTree:indexOf($page)
else ()
}; };
(:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based) (:~ Return new PDF doc with pages from $start to $end as xs:base64Binary, (1 based)
@ -434,7 +436,7 @@ as xs:string?{
return string-join(($page, return string-join(($page,
if(empty($style)) then "-" else $style, if(empty($style)) then "-" else $style,
if(($start eq 1)) then "" else $start, if(($start eq 1)) then "" else $start,
if(exists($prefix)) then '*' || $prefix (:TODO double " :) if(exists($prefix)) then '*' || $prefix else () (:TODO double " :)
)) ))
}; };

56
webapp/lsp/handlers.xqm Normal file
View file

@ -0,0 +1,56 @@
(: tools to analyse xml parse tree
@author Andy Bunce
:)
module namespace hnd="lsp/handlers";
import module namespace pos="lsp/position" at "position.xqm";
declare record hnd:hand(
result as item()*,
skipchildren as xs:boolean
);
declare function hnd:default-handler($el as element(*),$state)
as function(*){
fn(){hnd:hand($state,false())}
};
declare function hnd:get-handler($el as element(*),$state)
as function(*)
{ function-lookup(xs:QName(name($el)),2)
otherwise hnd:default-handler($el,$state)
};
declare function hnd:diags($parse as element(),$diags:=())
{
let $h:= hnd:get-handler($parse,$diags)($parse,$diags)
return if($h?skipchildren)
then $h?result
else fold-left($parse/*,$diags,
fn($r,$this){
hnd:diags($this,$r)
})
};
declare record hnd:symbol (
name as xs:string,
type as xs:string,
range-name? as pos:Range,
range-full? as pos:Range,
children? as array(hnd:symbol)
);
declare function hnd:symbols($parse as element(),$syms as hnd:symbol* :=() )
{
'todo'
};
declare function hnd:anotated-declaration($parse as element(),$syms)
as hnd:hand
{
let $sym:=hnd:symbol(
$parse/token,
"AA"
)
return hnd:hand(($syms,$sym),true())
};

View file

@ -8075,6 +8075,29 @@ var lsp = (function (exports) {
return pos; return pos;
} }
} }
function skipAtomsForSelection(atoms, sel) {
let ranges = null;
for (let i = 0; i < sel.ranges.length; i++) {
let range = sel.ranges[i], updated = null;
if (range.empty) {
let pos = skipAtomicRanges(atoms, range.from, 0);
if (pos != range.from)
updated = EditorSelection.cursor(pos, -1);
}
else {
let from = skipAtomicRanges(atoms, range.from, -1);
let to = skipAtomicRanges(atoms, range.to, 1);
if (from != range.from || to != range.to)
updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);
}
if (updated) {
if (!ranges)
ranges = sel.ranges.slice();
ranges[i] = updated;
}
}
return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;
}
function skipAtoms(view, oldPos, pos) { function skipAtoms(view, oldPos, pos) {
let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1); let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);
return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1); return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);
@ -8310,6 +8333,8 @@ var lsp = (function (exports) {
if (view.inputState.lastSelectionOrigin == "select") if (view.inputState.lastSelectionOrigin == "select")
scrollIntoView = true; scrollIntoView = true;
userEvent = view.inputState.lastSelectionOrigin; userEvent = view.inputState.lastSelectionOrigin;
if (userEvent == "select.pointer")
newSel = skipAtomsForSelection(view.state.facet(atomicRanges).map(f => f(view)), newSel);
} }
view.dispatch({ selection: newSel, scrollIntoView, userEvent }); view.dispatch({ selection: newSel, scrollIntoView, userEvent });
return true; return true;
@ -8787,31 +8812,8 @@ var lsp = (function (exports) {
if (this.dragging === false) if (this.dragging === false)
this.select(this.lastEvent); this.select(this.lastEvent);
} }
skipAtoms(sel) {
let ranges = null;
for (let i = 0; i < sel.ranges.length; i++) {
let range = sel.ranges[i], updated = null;
if (range.empty) {
let pos = skipAtomicRanges(this.atoms, range.from, 0);
if (pos != range.from)
updated = EditorSelection.cursor(pos, -1);
}
else {
let from = skipAtomicRanges(this.atoms, range.from, -1);
let to = skipAtomicRanges(this.atoms, range.to, 1);
if (from != range.from || to != range.to)
updated = EditorSelection.range(range.from == range.anchor ? from : to, range.from == range.head ? from : to);
}
if (updated) {
if (!ranges)
ranges = sel.ranges.slice();
ranges[i] = updated;
}
}
return ranges ? EditorSelection.create(ranges, sel.mainIndex) : sel;
}
select(event) { select(event) {
let { view } = this, selection = this.skipAtoms(this.style.get(event, this.extend, this.multiple)); let { view } = this, selection = skipAtomsForSelection(this.atoms, this.style.get(event, this.extend, this.multiple));
if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false)) if (this.mustSelect || !selection.eq(view.state.selection, this.dragging === false))
this.view.dispatch({ this.view.dispatch({
selection, selection,
@ -8964,6 +8966,9 @@ var lsp = (function (exports) {
return mouseSel.dragging === false; return mouseSel.dragging === false;
} }
} }
else {
view.inputState.setSelectionOrigin("select.pointer");
}
return false; return false;
}; };
function rangeForClick(view, pos, bias, type) { function rangeForClick(view, pos, bias, type) {
@ -12288,7 +12293,7 @@ var lsp = (function (exports) {
} }
/** /**
Find the line block (see Find the line block (see
[`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt) at the given [`lineBlockAt`](https://codemirror.net/6/docs/ref/#view.EditorView.lineBlockAt)) at the given
height, again interpreted relative to the [top of the height, again interpreted relative to the [top of the
document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop). document](https://codemirror.net/6/docs/ref/#view.EditorView.documentTop).
*/ */
@ -13075,7 +13080,7 @@ var lsp = (function (exports) {
// Ctrl-Alt may be used for AltGr on Windows // Ctrl-Alt may be used for AltGr on Windows
!(browser.windows && event.ctrlKey && event.altKey) && !(browser.windows && event.ctrlKey && event.altKey) &&
// Alt-combinations on macOS tend to be typed characters // Alt-combinations on macOS tend to be typed characters
!(browser.mac && event.altKey && !event.ctrlKey) && !(browser.mac && event.altKey && !(event.ctrlKey || event.metaKey)) &&
(baseName = base[event.keyCode]) && baseName != name) { (baseName = base[event.keyCode]) && baseName != name) {
if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) { if (runFor(scopeObj[prefix + modifiers(baseName, event, true)])) {
handled = true; handled = true;
@ -23971,7 +23976,8 @@ var lsp = (function (exports) {
*/ */
function insertCompletionText(state, text, from, to) { function insertCompletionText(state, text, from, to) {
let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from; let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;
return Object.assign(Object.assign({}, state.changeByRange(range => { return {
...state.changeByRange(range => {
if (range != main && from != to && if (range != main && from != to &&
state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to)) state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))
return { range }; return { range };
@ -23980,7 +23986,10 @@ var lsp = (function (exports) {
changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines }, changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },
range: EditorSelection.cursor(range.from + fromOff + lines.length) range: EditorSelection.cursor(range.from + fromOff + lines.length)
}; };
})), { scrollIntoView: true, userEvent: "input.complete" }); }),
scrollIntoView: true,
userEvent: "input.complete"
};
} }
const SourceCache = /*@__PURE__*/new WeakMap(); const SourceCache = /*@__PURE__*/new WeakMap();
function asSource(source) { function asSource(source) {
@ -24625,7 +24634,7 @@ var lsp = (function (exports) {
}, prev ? prev.timestamp : Date.now(), selected, false); }, prev ? prev.timestamp : Date.now(), selected, false);
} }
map(changes) { map(changes) {
return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled); return new CompletionDialog(this.options, this.attrs, { ...this.tooltip, pos: changes.mapPos(this.tooltip.pos) }, this.timestamp, this.selected, this.disabled);
} }
setDisabled() { setDisabled() {
return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true); return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);
@ -24810,7 +24819,10 @@ var lsp = (function (exports) {
if (!(result instanceof ActiveResult)) if (!(result instanceof ActiveResult))
return false; return false;
if (typeof apply == "string") if (typeof apply == "string")
view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) })); view.dispatch({
...insertCompletionText(view.state, apply, result.from, result.to),
annotations: pickedCompletion.of(option.completion)
});
else else
apply(view, option.completion, result.from, result.to); apply(view, option.completion, result.from, result.to);
return true; return true;
@ -25227,7 +25239,7 @@ var lsp = (function (exports) {
let fields = []; let fields = [];
let lines = [], positions = [], m; let lines = [], positions = [], m;
for (let line of template.split(/\r\n?|\n/)) { for (let line of template.split(/\r\n?|\n/)) {
while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|((?:\\[{}]|[^}])*))\}/.exec(line)) { while (m = /[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(line)) {
let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || "", found = -1; let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || "", found = -1;
let name = rawName.replace(/\\[{}]/g, m => m[1]); let name = rawName.replace(/\\[{}]/g, m => m[1]);
for (let i = 0; i < fields.length; i++) { for (let i = 0; i < fields.length; i++) {
@ -25244,6 +25256,12 @@ var lsp = (function (exports) {
if (pos.field >= found) if (pos.field >= found)
pos.field++; pos.field++;
} }
for (let pos of positions)
if (pos.line == lines.length && pos.from > m.index) {
let snip = m[2] ? 3 + (m[1] || "").length : 2;
pos.from -= snip;
pos.to -= snip;
}
positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length)); positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length); line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);
} }
@ -25273,7 +25291,7 @@ var lsp = (function (exports) {
constructor(ranges, active) { constructor(ranges, active) {
this.ranges = ranges; this.ranges = ranges;
this.active = active; this.active = active;
this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to))); this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)), true);
} }
map(changes) { map(changes) {
let ranges = []; let ranges = [];
@ -25690,17 +25708,18 @@ var lsp = (function (exports) {
/** /**
Basic keybindings for autocompletion. Basic keybindings for autocompletion.
- Ctrl-Space (and Alt-\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion) - Ctrl-Space (and Alt-\` or Alt-i on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
- Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion) - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
- ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)` - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
- ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)` - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")` - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")` - PageUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false, "page")`
- Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion) - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
*/ */
const completionKeymap = [ const completionKeymap = [
{ key: "Ctrl-Space", run: startCompletion }, { key: "Ctrl-Space", run: startCompletion },
{ mac: "Alt-`", run: startCompletion }, { mac: "Alt-`", run: startCompletion },
{ mac: "Alt-i", run: startCompletion },
{ key: "Escape", run: closeCompletion }, { key: "Escape", run: closeCompletion },
{ key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) }, { key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) },
{ key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) }, { key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) },
@ -29545,6 +29564,27 @@ ${text}</tr>
function toSeverity(sev) { function toSeverity(sev) {
return sev == 1 ? "error" : sev == 2 ? "warning" : sev == 3 ? "info" : "hint"; return sev == 1 ? "error" : sev == 2 ? "warning" : sev == 3 ? "info" : "hint";
} }
const autoSync = /*@__PURE__*/ViewPlugin.fromClass(class {
constructor() {
this.pending = -1;
}
update(update) {
if (update.docChanged) {
if (this.pending > -1)
clearTimeout(this.pending);
this.pending = setTimeout(() => {
this.pending = -1;
let plugin = LSPPlugin.get(update.view);
if (plugin)
plugin.client.sync();
}, 500);
}
}
destroy() {
if (this.pending > -1)
clearTimeout(this.pending);
}
});
function serverDiagnostics() { function serverDiagnostics() {
return { return {
clientCapabilities: { textDocument: { publishDiagnostics: { versionSupport: true } } }, clientCapabilities: { textDocument: { publishDiagnostics: { versionSupport: true } } },
@ -29567,7 +29607,8 @@ ${text}</tr>
}))); })));
return true; return true;
} }
} },
editorExtension: autoSync
}; };
} }

File diff suppressed because one or more lines are too long

View file

@ -83,21 +83,18 @@ function connect() {
$("popConnect").hidePopover(); $("popConnect").hidePopover();
connectStatus(true); connectStatus(true);
let extLsp = client.plugin(file, "xquery"); let extLsp = client.plugin(file, "xquery");
let up = lsp.debouncedChangeListener({
delay: 750,
onChange: (content, state) => {
console.log('Debounced change detected:');
client.sync();
}
})
view.dispatch({ view.dispatch({
effects: lsp.StateEffect.appendConfig.of( effects: lsp.StateEffect.appendConfig.of(
[lsp.linter(null, { autoPanel: true }), ...extLsp, up, [lsp.linter(null, { autoPanel: true }), ...extLsp,
lsp.keymap.of([...lsp.formatKeymap])]) lsp.keymap.of([...lsp.formatKeymap])])
}) })
}) })
.catch(r => { connectStatus(false); alert("connection failed: " + server) }); .catch(e => {
console.log(e);
connectStatus(false);
alert("connection failed: " + server)
});
}; };
@ -114,7 +111,6 @@ function connectStatus(bool) {
function incoming(msg) { function incoming(msg) {
const rpc = JSON.parse(msg); const rpc = JSON.parse(msg);
log(rpc); log(rpc);
}; };