From d26fae56e4e04c7b0dd20598fbe715899f7df04b Mon Sep 17 00:00:00 2001 From: Andy Bunce Date: Fri, 26 Sep 2025 17:47:40 +0100 Subject: [PATCH] [mod] text --- test/position-tests.xqm | 4 ++-- webapp/lsp/text.xqm | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/test/position-tests.xqm b/test/position-tests.xqm index 63ea114..2ae8ec0 100644 --- a/test/position-tests.xqm +++ b/test/position-tests.xqm @@ -5,7 +5,7 @@ tests for position test @date: 2025/08/11 :) module namespace test = 'lsp/test/position'; - +import module namespace lspt = 'lsp-typedefs' at "../webapp/lsp/lsp-typedefs.xqm"; import module namespace pos="lsp/position" at "../webapp/lsp/position.xqm"; @@ -19,7 +19,7 @@ declare %unit:test function test:line-count() { (:~ convert position. :) declare %unit:test function test:resolvePosition() { let $text:=unparsed-text("sample.docs/pdfbox.xqm") - let $p:= pos:resolvePosition($text,pos:Position(518,33)) + let $p:= pos:resolvePosition($text,lspt:Position(518,33)) return unit:assert-equals($p,18751) }; diff --git a/webapp/lsp/text.xqm b/webapp/lsp/text.xqm index ecb496e..7b14fc0 100644 --- a/webapp/lsp/text.xqm +++ b/webapp/lsp/text.xqm @@ -10,6 +10,26 @@ declare record text:rec( line? := %method fn($line) {?lines[$line]} ); +(:~ json numbers :) +declare type text:num as (xs:integer|xs:double); + +(:~ +@param line Line position in a document (zero-based). +@param character Character offset on a line in a document (zero-based). +:) +declare record text:Position( + line as text:num, + character as text:num +); + +(:~ +@param line Line position in a document (zero-based). +@param character Character offset on a line in a document (zero-based). +:) +declare record text:Range( + start as text:Position, + end as text:Position +); declare function text:build($text as xs:string){ let $lines:=tokenize($text, '(\r\n?|\n\r?)') return text:rec($lines)