diff options
author | bptato <nincsnevem662@gmail.com> | 2023-10-14 17:13:29 +0200 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2023-10-14 17:16:14 +0200 |
commit | c225ff1619c9db8a48160c4e82c82da91f133f4d (patch) | |
tree | ea8a3d4bbad7ddb0b7bed0d21cc726434aefa971 /src/server | |
parent | eae438e48ad7c1558f07d539469ab55c9d67fac4 (diff) | |
download | chawan-c225ff1619c9db8a48160c4e82c82da91f133f4d.tar.gz |
container: add cursorNthLink, cursorRevNthLink
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/buffer.nim | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim index 49ee97aa..5ed97258 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -65,10 +65,10 @@ type BufferCommand* = enum LOAD, RENDER, WINDOW_CHANGE, FIND_ANCHOR, READ_SUCCESS, READ_CANCELED, - CLICK, FIND_NEXT_LINK, FIND_PREV_LINK, FIND_NEXT_MATCH, FIND_PREV_MATCH, - GET_SOURCE, GET_LINES, UPDATE_HOVER, PASS_FD, CONNECT, CONNECT2, - GOTO_ANCHOR, CANCEL, GET_TITLE, SELECT, REDIRECT_TO_FD, READ_FROM_FD, - SET_CONTENT_TYPE, CLONE + CLICK, FIND_NEXT_LINK, FIND_PREV_LINK, FIND_NTH_LINK, FIND_REV_NTH_LINK, + FIND_NEXT_MATCH, FIND_PREV_MATCH, GET_SOURCE, GET_LINES, UPDATE_HOVER, + PASS_FD, CONNECT, CONNECT2, GOTO_ANCHOR, CANCEL, GET_TITLE, SELECT, + REDIRECT_TO_FD, READ_FROM_FD, SET_CONTENT_TYPE, CLONE # LOADING_PAGE: istream open # LOADING_RESOURCES: istream closed, resources open @@ -470,6 +470,40 @@ proc findNextLink*(buffer: Buffer, cursorx, cursory: int): tuple[x, y: int] {.pr inc i return (-1, -1) +proc findNthLink*(buffer: Buffer, i: int): tuple[x, y: int] {.proxy.} = + if i == 0: + return (-1, -1) + var k = 0 + var link: Element + for y in 0 .. buffer.lines.high: + let line = buffer.lines[y] + for j in 0 ..< line.formats.len: + let format = line.formats[j] + let fl = format.node.getClickable() + if fl != nil and fl != link: + inc k + if k == i: + return (format.pos, y) + link = fl + return (-1, -1) + +proc findRevNthLink*(buffer: Buffer, i: int): tuple[x, y: int] {.proxy.} = + if i == 0: + return (-1, -1) + var k = 0 + var link: Element + for y in countdown(buffer.lines.high, 0): + let line = buffer.lines[y] + for j in countdown(line.formats.high, 0): + let format = line.formats[j] + let fl = format.node.getClickable() + if fl != nil and fl != link: + inc k + if k == i: + return (format.pos, y) + link = fl + return (-1, -1) + proc findPrevMatch*(buffer: Buffer, regex: Regex, cursorx, cursory: int, wrap: bool, n: int): BufferMatch {.proxy.} = if cursory >= buffer.lines.len: return |