@gjsify/gtksource-core 0.57.0 → 0.58.0
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.
- package/lib/esm/conformance.js +1 -1
- package/lib/esm/editor-session.js +1 -1
- package/lib/esm/gutter-paint-vectors.js +8 -0
- package/lib/esm/gutter-renderer.js +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/view-vectors.js +1 -1
- package/lib/types/conformance.d.ts +1 -0
- package/lib/types/editor-driver.d.ts +30 -0
- package/lib/types/editor-session.d.ts +9 -1
- package/lib/types/gutter-paint-vectors.d.ts +37 -0
- package/lib/types/gutter-renderer.d.ts +115 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/types/view-vectors.d.ts +30 -1
- package/package.json +6 -3
package/lib/esm/conformance.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{GTKSOURCE_BUFFER_VECTORS as e}from"./buffer-vectors.js";import{GTKSOURCE_INIT_VECTORS as t}from"./init-vectors.js";import{GTKSOURCE_MANAGER_VECTORS as n}from"./managers-vectors.js";import{GTKSOURCE_VIEW_DEFAULT_VECTORS as r,GTKSOURCE_VIEW_SURFACE_VECTORS as i}from"./view-vectors.js";export{e as GTKSOURCE_BUFFER_VECTORS,t as GTKSOURCE_INIT_VECTORS,n as GTKSOURCE_MANAGER_VECTORS,r as GTKSOURCE_VIEW_DEFAULT_VECTORS,i as GTKSOURCE_VIEW_SURFACE_VECTORS};
|
|
1
|
+
import{GTKSOURCE_BUFFER_VECTORS as e}from"./buffer-vectors.js";import{GTKSOURCE_INIT_VECTORS as t}from"./init-vectors.js";import{GTKSOURCE_MANAGER_VECTORS as n}from"./managers-vectors.js";import{GTKSOURCE_VIEW_DEFAULT_VECTORS as r,GTKSOURCE_VIEW_SURFACE_VECTORS as i}from"./view-vectors.js";import{GUTTER_PAINT_VECTORS as a}from"./gutter-paint-vectors.js";export{e as GTKSOURCE_BUFFER_VECTORS,t as GTKSOURCE_INIT_VECTORS,n as GTKSOURCE_MANAGER_VECTORS,r as GTKSOURCE_VIEW_DEFAULT_VECTORS,i as GTKSOURCE_VIEW_SURFACE_VECTORS,a as GUTTER_PAINT_VECTORS};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";import{SignalEmitter as e}from"./signals.js";import{Buffer as t}from"./buffer.js";import{
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{SignalEmitter as e}from"./signals.js";import{Buffer as t}from"./buffer.js";import{GutterLines as n,GutterRendererText as r,parseMarkup as i}from"./gutter-renderer.js";import{StyleSchemeManager as a}from"./style-scheme.js";import{HighlightController as o}from"./highlight-controller.js";function leadingWhitespace(e){return/^[ \t]*/.exec(e)[0]}function cellOf(e){if(!(e instanceof r))return{text:``,runs:null};if(e.markup!==null){let t=i(e.markup);return{text:t.map(e=>e.text).join(``),runs:t}}return{text:e.text??``,runs:null}}var EditorSession=class extends e{constructor(e,n=a.getDefault(),r=`light`){super(),this.driver=e,this.schemes=n,this.bufferHandlers=[],this.mirroring=!1,this.fromNative=!1,this.gutters=null,this.props={autoIndent:!1,indentWidth:-1,showLineNumbers:!1,monospace:!1,editable:!0,highlightCurrentLine:!1,cursorVisible:!0,leftMargin:0,rightMargin:0,topMargin:0,bottomMargin:0},this.variant=r,e.bind(this),this.attach(new t)}get buffer(){return this.current}set buffer(e){e!==this.current&&(this.attach(e),this.emit(`notify::buffer`))}attach(e){if(this.current){for(let e of this.bufferHandlers.splice(0))this.current.disconnect(e);this.controller.dispose()}this.current=e,this.bufferHandlers.push(e.connect(`changed`,(e,t)=>this.onBufferChanged(t)),e.connect(`mark-set`,()=>this.onBufferCursor())),this.mirroring=!0;try{this.driver.setText(e.text)}finally{this.mirroring=!1}this.controller=new o(e,this.driver,this.schemes,this.variant),this.driver.setLineCount(e.lineCount),this.driver.setSelection(e.cursorPosition,e.cursorPosition),this.pushLayout()}onBufferChanged(e){if(!this.fromNative){this.mirroring=!0;try{this.driver.replaceRange(e.start,e.start+e.removedText.length,e.insertedText)}finally{this.mirroring=!1}}e.insertedLines!==e.removedLines&&this.driver.setLineCount(this.current.lineCount)}onBufferCursor(){this.fromNative||this.mirroring||this.driver.setSelection(this.current.selectionBoundPosition,this.current.cursorPosition)}bindGutters(e){this.gutters=e,e.watch(e=>{e.window_type===3&&this.driver.invalidateGutter()})}leftRenderers(){let e=this.gutters?.get(3);return{renderers:e?.renderers??[],positions:e?.positions??[]}}metricsOf(e,t){return{position:t,widthRequest:e.width_request,marginStart:e.margin_start,marginEnd:e.margin_end}}gutterColumns(){let{renderers:e,positions:t}=this.leftRenderers();return e.map((e,n)=>this.metricsOf(e,t[n]))}queryGutter(e,t){let{renderers:r,positions:i}=this.leftRenderers();if(r.length===0||this.gutters===null)return[];let a=new n(this.gutters.view,this.current,e,t);return r.map((n,r)=>{let o=n.vfunc_query_data,s=[];for(let r=e;r<=t;r++)o?.call(n,a,r),s.push(cellOf(n));return{...this.metricsOf(n,i[r]),cells:s}})}onNativeEdit(e,t,n){if(!this.mirroring){this.fromNative=!0,this.current.begin_user_action();try{this.current.replace(e,e+t,n)}finally{this.fromNative=!1,this.current.end_user_action()}if(this.props.autoIndent&&n===`
|
|
2
2
|
`){let t=leadingWhitespace(this.current.getLine(this.current.lineOfOffset(e)));t!==``&&(this.current.insert(e+1,t),this.driver.setSelection(this.current.cursorPosition,this.current.cursorPosition))}}}onNativeSelection(e,t){if(this.mirroring)return;let clamp=e=>Math.min(Math.max(0,e),this.current.length);this.fromNative=!0;try{this.current.selectRange(clamp(t),clamp(e))}finally{this.fromNative=!1}}setProp(e,t,n){this.props[e]!==t&&(this.props[e]=t,this.emit(`notify::${n}`),this.pushLayout())}pushLayout(){let{props:e}=this;this.driver.setLayout({showLineNumbers:e.showLineNumbers,monospace:e.monospace,editable:e.editable,highlightCurrentLine:e.highlightCurrentLine,cursorVisible:e.cursorVisible,leftMargin:e.leftMargin,rightMargin:e.rightMargin,topMargin:e.topMargin,bottomMargin:e.bottomMargin})}get autoIndent(){return this.props.autoIndent}set autoIndent(e){this.setProp(`autoIndent`,e,`auto-indent`)}get indentWidth(){return this.props.indentWidth}set indentWidth(e){this.setProp(`indentWidth`,e,`indent-width`)}get showLineNumbers(){return this.props.showLineNumbers}set showLineNumbers(e){this.setProp(`showLineNumbers`,e,`show-line-numbers`)}get monospace(){return this.props.monospace}set monospace(e){this.setProp(`monospace`,e,`monospace`)}get editable(){return this.props.editable}set editable(e){this.setProp(`editable`,e,`editable`)}get highlightCurrentLine(){return this.props.highlightCurrentLine}set highlightCurrentLine(e){this.setProp(`highlightCurrentLine`,e,`highlight-current-line`)}get cursorVisible(){return this.props.cursorVisible}set cursorVisible(e){this.setProp(`cursorVisible`,e,`cursor-visible`)}get leftMargin(){return this.props.leftMargin}set leftMargin(e){this.setProp(`leftMargin`,e,`left-margin`)}get rightMargin(){return this.props.rightMargin}set rightMargin(e){this.setProp(`rightMargin`,e,`right-margin`)}get topMargin(){return this.props.topMargin}set topMargin(e){this.setProp(`topMargin`,e,`top-margin`)}get bottomMargin(){return this.props.bottomMargin}set bottomMargin(e){this.setProp(`bottomMargin`,e,`bottom-margin`)}setColorScheme(e){this.variant=e,this.controller.setColorScheme(e)}dispose(){for(let e of this.bufferHandlers.splice(0))this.current.disconnect(e);this.controller.dispose()}};export{EditorSession,leadingWhitespace};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";let e=0;function recording(t){let n=[];class Recorder extends t.GtkSource.GutterRendererText{vfunc_query_data(e,t){n.push({line:t,first:e.get_first(),last:e.get_last(),cursor:e.is_cursor(t)}),this.text=`#${t}`}}return{renderer:new(t.GObject.registerClass({GTypeName:`GoVecRecorder${++e}`},Recorder))({width_request:40}),queries:n}}function firstPass(e){let t=[];for(let n of e){if(t.includes(n.line))break;t.push(n.line)}return t}async function shown(e,t,n,r=0){let i=new e.GtkSource.View;i.buffer.text=n;let a=i.get_gutter(3),{renderer:o,queries:s}=recording(e);return a.insert(o,r),await t.present(i),{view:i,gutter:a,renderer:o,queries:s}}function numbered(t){class Numbered extends t.GtkSource.GutterRendererText{constructor(...e){super(...e),this.seen=[]}get start_value(){return this.stored??0}set start_value(e){this.stored=e,this.queue_draw()}vfunc_query_data(e,t){this.text=String(this.start_value+t),this.seen.push([t,this.text])}}let{ParamSpec:n,ParamFlags:r}=t.GObject;return t.GObject.registerClass({GTypeName:`GoVecNumbered${++e}`,Properties:{"start-value":n.uint(`start-value`,``,``,r.READWRITE,0,1e3,0)}},Numbered)}const t=[{rule:`vfunc_query_data runs once per visible line, in order, with the visible range and the cursor line`,paints:!0,unlocks:[`GtkSource.GutterRenderer.vfunc_query_data`],async observe(e,t){let{queries:n}=await shown(e,t,`a
|
|
2
|
+
b
|
|
3
|
+
c`),r=n.slice(0,firstPass(n).length);return{lines:r.map(e=>e.line),range:[r[0]?.first,r[0]?.last],cursor:r.map(e=>e.cursor)}},shows:{lines:[0,1,2],range:[0,2],cursor:[!1,!1,!0]}},{rule:`queue_draw on the renderer and on the gutter, however often, costs one more pass`,paints:!0,async observe(e,t){let{renderer:n,gutter:r,queries:i}=await shown(e,t,`a
|
|
4
|
+
b
|
|
5
|
+
c`);return await t.settle(),i.length=0,n.queue_draw(),n.queue_draw(),r.queue_draw(),await t.settle(),i.map(e=>e.line)},shows:[0,1,2]},{rule:`a removed renderer is asked nothing more`,paints:!0,async observe(e,t){let{renderer:n,gutter:r,queries:i}=await shown(e,t,`a
|
|
6
|
+
b
|
|
7
|
+
c`);return await t.settle(),r.remove(n),i.length=0,r.queue_draw(),await t.settle(),i.length},shows:0},{rule:`a registered GutterRendererText subclass keeps its declared property and sets its text in query_data`,paints:!0,async observe(e,t){let n=numbered(e),r=new e.GtkSource.View;r.buffer.text=`a
|
|
8
|
+
b`;let i=new n({start_value:16,width_request:30});r.get_gutter(3).insert(i,0),await t.present(r);let a=i.seen.slice(0,2);return i.start_value=100,i.seen=[],await t.settle(),{before:a,after:i.seen.slice(0,2),width:i.width_request}},shows:{before:[[0,`16`],[1,`17`]],after:[[0,`100`],[1,`101`]],width:30}},{rule:`a registered GutterRendererText subclass is a renderer with its property and widget properties set`,paints:!1,async observe(e){let t=new(numbered(e))({start_value:7,margin_start:3,width_request:20});return[t instanceof e.GtkSource.GutterRendererText,t.start_value,t.margin_start,t.text]},shows:[!0,7,3,null]}];export{t as GUTTER_PAINT_VECTORS};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";import{GIR_TYPE as e,GObjectObject as t}from"@gjsify/adwaita-core";const n=3,r=[[`margin_start`,`marginStart`,0],[`margin_end`,`marginEnd`,0],[`width_request`,`widthRequest`,-1],[`focusable`,`focusable`,!1],[`focus_on_click`,`focusOnClick`,!0]],i=new Set(r.map(([e])=>e));function snakeCase(e){return e.replace(/-/g,`_`).replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`)}function byteSlice(e,t){if(t<0)return e;let n=0,r=0;for(let i of e){let e=i.codePointAt(0),a=e<128?1:e<2048?2:e<65536?3:4;if(n+a>t)break;n+=a,r+=i.length}return e.slice(0,r)}const a=new WeakMap;function stateOf(e){let t=a.get(e);return t===void 0&&(t={owner:null,widget:new Map(r.map(([e,,t])=>[e,t]))},a.set(e,t)),t}var o=class GutterRenderer extends t{static{this[e]=`GtkSource.GutterRenderer`}constructor(e={}){let t={},n={};for(let[r,a]of Object.entries(e))(i.has(snakeCase(r))?t:n)[r]=a;if(super(n),new.target===GutterRenderer)throw TypeError(`Cannot instantiate abstract type GtkSourceGutterRenderer`);for(let[e,n]of Object.entries(t))this[e]=n}get_view(){return stateOf(this).owner?.get_view()??null}get view(){return this.get_view()}queue_draw(){stateOf(this).owner?.queue_draw()}attach(e){stateOf(this).owner=e}widgetProperty(e,t){let n=stateOf(this);return t!==void 0&&n.widget.get(e)!==t&&(n.widget.set(e,t),n.owner?.queue_draw()),n.widget.get(e)}};for(let[e,t]of r)for(let n of new Set([e,t]))Object.defineProperty(o.prototype,n,{get(){return this.widgetProperty(e)},set(t){this.widgetProperty(e,t)},enumerable:!0});var GutterRendererText=class extends o{constructor(e={}){let{text:t,markup:n,...r}=e;super(r),t!==void 0&&(this.text=t),n!==void 0&&(this.markup=n)}get text(){return this.plain??null}set text(e){this.plain=e,this.marked=null}get markup(){return this.marked??null}set markup(e){this.marked=e,this.plain=null}set_text(e,t){this.text=byteSlice(e,t)}set_markup(e,t){this.markup=byteSlice(e,t)}},GutterLines=class{constructor(e,t,n,r){this.owner=e,this.text=t,this.first=n,this.last=r}get_first(){return this.first}get_last(){return this.last}get_buffer(){return this.text}get_view(){return this.owner}is_cursor(e){return this.text.lineOfOffset(this.text.cursorPosition)===e}},Gutter=class{constructor(e,t,n=()=>{}){this.owner=e,this.window_type=t,this.listener=n,this.placed=[]}get_view(){return this.owner}get view(){return this.owner}insert(e,t){return e.get_view()===null?(e.attach(this),this.placed.push({renderer:e,position:t}),this.sort(),this.queue_draw(),!0):!1}remove(e){let t=this.placed.findIndex(t=>t.renderer===e);t<0||(this.placed.splice(t,1),e.attach(null),this.queue_draw())}reorder(e,t){let n=this.placed.find(t=>t.renderer===e);n!==void 0&&(n.position=t,this.sort(),this.queue_draw())}queue_draw(){this.listener(this)}get renderers(){return this.placed.map(e=>e.renderer)}get positions(){return this.placed.map(e=>e.position)}sort(){this.placed.sort((e,t)=>e.position-t.position)}},GutterSet=class{constructor(e){this.view=e,this.gutters=new Map,this.listener=()=>{}}watch(e){this.listener=e}get(e){if(e!==3&&e!==4)return null;let t=this.gutters.get(e);return t===void 0&&(t=new Gutter(this.view,e,e=>this.listener(e)),this.gutters.set(e,t)),t}};const s={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`},c={b:`bold`,i:`italic`,u:`underline`,s:`strikethrough`};function parseMarkup(e){let t=[],n=[],r=/<(\/?)([a-zA-Z]+)[^>]*>|([^<]+)/g;for(let i=r.exec(e);i!==null;i=r.exec(e)){if(i[3]===void 0){if(i[1]===`/`){let e=n.lastIndexOf(i[2]);e>=0&&n.splice(e,1)}else i[0].endsWith(`/>`)||n.push(i[2]);continue}let e=i[3].replace(/&(amp|lt|gt|quot|apos);/g,(e,t)=>s[t]),styled=e=>n.some(t=>c[t]===e);t.push({text:e,bold:styled(`bold`),italic:styled(`italic`),underline:styled(`underline`),strikethrough:styled(`strikethrough`)})}return t}export{Gutter,GutterLines,o as GutterRenderer,GutterRendererText,GutterSet,n as WINDOW_LEFT,parseMarkup};
|
package/lib/esm/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SignalEmitter as e}from"./signals.js";import{TextIter as t,TextMark as n}from"./text-iter.js";import{Buffer as r}from"./buffer.js";import{toBoolean as i,toNumber as a}from"./coerce.js";import{parseColor as o}from"./color.js";import"./editor-driver.js";import{
|
|
1
|
+
import{SignalEmitter as e}from"./signals.js";import{TextIter as t,TextMark as n}from"./text-iter.js";import{Buffer as r}from"./buffer.js";import{toBoolean as i,toNumber as a}from"./coerce.js";import{parseColor as o}from"./color.js";import"./editor-driver.js";import{Gutter as s,GutterLines as c,GutterRenderer as l,GutterRendererText as u,GutterSet as d,WINDOW_LEFT as f,parseMarkup as p}from"./gutter-renderer.js";import{UnsupportedRegexError as m,translateRegex as h}from"./regex.js";import{XmlParseError as g,childElements as _,decodeEntities as v,parseXml as y,textContent as b}from"./xml.js";import{keywordPattern as x,parseLanguage as S}from"./lang.js";import{INITIAL_STATE as C,Tokenizer as w,schemeStyleName as T}from"./tokenizer.js";import{IncrementalHighlighter as E,sameState as D}from"./highlighter.js";import{parseStyleScheme as O,resolveStyle as k}from"./style.js";import{FALLBACK_DARK_ID as A,FALLBACK_LIGHT_ID as j,fallbackDarkScheme as M,fallbackLightScheme as N}from"./fallback-schemes.js";import{StyleScheme as P,StyleSchemeManager as F,paletteOf as I}from"./style-scheme.js";import{TokenStyler as L}from"./token-styler.js";import{HighlightController as R}from"./highlight-controller.js";import{EditorSession as z,leadingWhitespace as B}from"./editor-session.js";import{digitCount as V,emphasisedLine as H,gutterWidth as U,visibleLines as W}from"./gutter.js";import"./types.js";import{Language as G,LanguageManager as K}from"./language-manager.js";import{LineStore as q}from"./line-store.js";import{init as J}from"./init.js";export{r as Buffer,r as GtkSourceBuffer,z as EditorSession,A as FALLBACK_DARK_ID,j as FALLBACK_LIGHT_ID,s as Gutter,c as GutterLines,l as GutterRenderer,u as GutterRendererText,d as GutterSet,R as HighlightController,C as INITIAL_STATE,E as IncrementalHighlighter,G as Language,K as LanguageManager,q as LineStore,e as SignalEmitter,P as StyleScheme,F as StyleSchemeManager,t as TextIter,n as TextMark,L as TokenStyler,w as Tokenizer,m as UnsupportedRegexError,f as WINDOW_LEFT,g as XmlParseError,_ as childElements,v as decodeEntities,V as digitCount,H as emphasisedLine,M as fallbackDarkScheme,N as fallbackLightScheme,U as gutterWidth,J as init,x as keywordPattern,B as leadingWhitespace,I as paletteOf,o as parseColor,S as parseLanguage,p as parseMarkup,O as parseStyleScheme,y as parseXml,k as resolveStyle,D as sameState,T as schemeStyleName,b as textContent,i as toBoolean,a as toNumber,h as translateRegex,W as visibleLines};
|
package/lib/esm/view-vectors.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./_virtual/_rolldown/runtime.js";const e=[{property:`auto-indent`,member:`autoIndent`,shows:!1},{property:`indent-width`,member:`indentWidth`,shows:-1},{property:`show-line-numbers`,member:`showLineNumbers`,shows:!1},{property:`highlight-current-line`,member:`highlightCurrentLine`,shows:!1},{property:`monospace`,member:`monospace`,shows:!1},{property:`editable`,member:`editable`,shows:!0},{property:`cursor-visible`,member:`cursorVisible`,shows:!0},{property:`left-margin`,member:`leftMargin`,shows:0},{property:`right-margin`,member:`rightMargin`,shows:0},{property:`top-margin`,member:`topMargin`,shows:0},{property:`bottom-margin`,member:`bottomMargin`,shows:0}],pick=(e,t)=>Object.fromEntries(t.map(t=>[t,e[t]])),t=[{rule:`Gtk.TextWindowType carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.TextWindowType,[`WIDGET`,`TEXT`,`LEFT`,`RIGHT`,`TOP`]),shows:{WIDGET:1,TEXT:2,LEFT:3,RIGHT:4,TOP:5}},{rule:`Gtk.PolicyType carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.PolicyType,[`ALWAYS`,`AUTOMATIC`,`NEVER`,`EXTERNAL`]),shows:{ALWAYS:0,AUTOMATIC:1,NEVER:2,EXTERNAL:3}},{rule:`Gtk.TextDirection carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.TextDirection,[`NONE`,`LTR`,`RTL`]),shows:{NONE:0,LTR:1,RTL:2}},{rule:`cursor_visible is true by default and the property and accessors agree`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View,n=[t.cursor_visible,t.get_cursor_visible()];t.cursor_visible=!1;let r=[t.cursor_visible,t.get_cursor_visible()];return t.set_cursor_visible(!0),[n,r,[t.cursor_visible,t.get_cursor_visible()]]},shows:[[!0,!0],[!1,!1],[!0,!0]]},{rule:`set_editable and the editable property agree`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;t.set_editable(!1);let n=[t.editable,t.get_editable()];return t.editable=!0,[n,[t.editable,t.get_editable()]]},shows:[[!1,!1],[!0,!0]]},{rule:`highlight_current_line and show_line_numbers are plain boolean properties`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View,n=[t.highlight_current_line,t.show_line_numbers];return t.highlight_current_line=!0,t.show_line_numbers=!0,[n,[t.highlight_current_line,t.show_line_numbers]]},shows:[[!1,!1],[!0,!0]]},{rule:`vadjustment and hadjustment are two stable, distinct adjustments`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;return[t.vadjustment===t.get_vadjustment(),t.vadjustment===t.hadjustment,t.vadjustment.get_value()]},shows:[!0,!1,0]},{rule:`direction is LTR by default and set_direction is read back`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=n.get_direction();return n.set_direction(e.TextDirection.RTL),[r,n.get_direction()]},shows:[1,2]},{rule:`a fresh view has no sibling and no parent`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;return[t.get_next_sibling(),t.get_parent()]},shows:[null,null]},{rule:`a scrolled window starts AUTOMATIC on both axes and set_policy is read back`,instance:!1,observe:({Gtk:e})=>{let t=new e.ScrolledWindow,n=t.get_policy();return t.set_policy(e.PolicyType.NEVER,e.PolicyType.ALWAYS),[n,t.get_policy()]},shows:[[1,1],[2,0]]},{rule:`set_policy refuses a value that is not a Gtk.PolicyType`,instance:!1,observe:({Gtk:e})=>{let t=new e.ScrolledWindow;try{return t.set_policy(7,1),`accepted`}catch{return`threw`}},shows:`threw`},{rule:`a scrolled window adopts the view adjustment it is given`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=new e.ScrolledWindow;return r.set_vadjustment(n.vadjustment),[r.get_vadjustment()===n.vadjustment,r.vadjustment===n.vadjustment]},shows:[!0,!0]}];export{e as GTKSOURCE_VIEW_DEFAULT_VECTORS,t as GTKSOURCE_VIEW_SURFACE_VECTORS};
|
|
1
|
+
import"./_virtual/_rolldown/runtime.js";const e=[{property:`auto-indent`,member:`autoIndent`,shows:!1},{property:`indent-width`,member:`indentWidth`,shows:-1},{property:`show-line-numbers`,member:`showLineNumbers`,shows:!1},{property:`highlight-current-line`,member:`highlightCurrentLine`,shows:!1},{property:`monospace`,member:`monospace`,shows:!1},{property:`editable`,member:`editable`,shows:!0},{property:`cursor-visible`,member:`cursorVisible`,shows:!0},{property:`left-margin`,member:`leftMargin`,shows:0},{property:`right-margin`,member:`rightMargin`,shows:0},{property:`top-margin`,member:`topMargin`,shows:0},{property:`bottom-margin`,member:`bottomMargin`,shows:0}],pick=(e,t)=>Object.fromEntries(t.map(t=>[t,e[t]])),t=[{rule:`Gtk.TextWindowType carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.TextWindowType,[`WIDGET`,`TEXT`,`LEFT`,`RIGHT`,`TOP`]),shows:{WIDGET:1,TEXT:2,LEFT:3,RIGHT:4,TOP:5}},{rule:`Gtk.PolicyType carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.PolicyType,[`ALWAYS`,`AUTOMATIC`,`NEVER`,`EXTERNAL`]),shows:{ALWAYS:0,AUTOMATIC:1,NEVER:2,EXTERNAL:3}},{rule:`Gtk.TextDirection carries the typelib numbers`,instance:!1,observe:({Gtk:e})=>pick(e.TextDirection,[`NONE`,`LTR`,`RTL`]),shows:{NONE:0,LTR:1,RTL:2}},{rule:`cursor_visible is true by default and the property and accessors agree`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View,n=[t.cursor_visible,t.get_cursor_visible()];t.cursor_visible=!1;let r=[t.cursor_visible,t.get_cursor_visible()];return t.set_cursor_visible(!0),[n,r,[t.cursor_visible,t.get_cursor_visible()]]},shows:[[!0,!0],[!1,!1],[!0,!0]]},{rule:`set_editable and the editable property agree`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;t.set_editable(!1);let n=[t.editable,t.get_editable()];return t.editable=!0,[n,[t.editable,t.get_editable()]]},shows:[[!1,!1],[!0,!0]]},{rule:`highlight_current_line and show_line_numbers are plain boolean properties`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View,n=[t.highlight_current_line,t.show_line_numbers];return t.highlight_current_line=!0,t.show_line_numbers=!0,[n,[t.highlight_current_line,t.show_line_numbers]]},shows:[[!1,!1],[!0,!0]]},{rule:`vadjustment and hadjustment are two stable, distinct adjustments`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;return[t.vadjustment===t.get_vadjustment(),t.vadjustment===t.hadjustment,t.vadjustment.get_value()]},shows:[!0,!1,0]},{rule:`direction is LTR by default and set_direction is read back`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=n.get_direction();return n.set_direction(e.TextDirection.RTL),[r,n.get_direction()]},shows:[1,2]},{rule:`a fresh view has no sibling and no parent`,instance:!0,observe:({GtkSource:e})=>{let t=new e.View;return[t.get_next_sibling(),t.get_parent()]},shows:[null,null]},{rule:`a scrolled window starts AUTOMATIC on both axes and set_policy is read back`,instance:!1,observe:({Gtk:e})=>{let t=new e.ScrolledWindow,n=t.get_policy();return t.set_policy(e.PolicyType.NEVER,e.PolicyType.ALWAYS),[n,t.get_policy()]},shows:[[1,1],[2,0]]},{rule:`set_policy refuses a value that is not a Gtk.PolicyType`,instance:!1,observe:({Gtk:e})=>{let t=new e.ScrolledWindow;try{return t.set_policy(7,1),`accepted`}catch{return`threw`}},shows:`threw`},{rule:`a scrolled window adopts the view adjustment it is given`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=new e.ScrolledWindow;return r.set_vadjustment(n.vadjustment),[r.get_vadjustment()===n.vadjustment,r.vadjustment===n.vadjustment]},shows:[!0,!0]},{rule:`get_gutter answers one gutter per side, LEFT and RIGHT apart`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,{LEFT:r,RIGHT:i}=e.TextWindowType;return[n.get_gutter(r)!==null,n.get_gutter(r)===n.get_gutter(r),n.get_gutter(i)===n.get_gutter(i),n.get_gutter(r)!==n.get_gutter(i)]},shows:[!0,!0,!0,!0]},{rule:`a gutter knows its view and its side`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=n.get_gutter(e.TextWindowType.LEFT),i=n.get_gutter(e.TextWindowType.RIGHT);return[r.get_view()===n,r.view===n,r.window_type,i.window_type]},shows:[!0,!0,3,4]},{rule:`get_gutter answers null for a side that has no gutter`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,{TEXT:r,WIDGET:i,TOP:a}=e.TextWindowType;return[n.get_gutter(r),n.get_gutter(i),n.get_gutter(a)]},shows:[null,null,null]},{rule:`a text renderer starts empty with the widget defaults`,instance:!0,observe:({GtkSource:e})=>{let t=new e.GutterRendererText;return[t.text,t.markup,t.margin_start,t.margin_end,t.width_request,t.focusable,t.focus_on_click,t.get_view()]},shows:[null,null,0,0,-1,!1,!0,null]},{rule:`a text renderer takes widget properties at construction, snake_case or camelCase`,instance:!0,observe:({GtkSource:e})=>{let t=new e.GutterRendererText({margin_start:12,margin_end:8,width_request:36,focusable:!0,focus_on_click:!1,text:`q`}),n=new e.GutterRendererText({marginStart:3});return n.marginStart=5,[t.margin_start,t.margin_end,t.width_request,t.focusable,t.focus_on_click,t.text,n.margin_start]},shows:[12,8,36,!0,!1,`q`,5]},{rule:`a renderer refuses a property it does not have`,instance:!0,observe:({GtkSource:e})=>{try{return new e.GutterRendererText({bogus:1}),`accepted`}catch{return`threw`}},shows:`threw`},{rule:`GutterRenderer is abstract`,instance:!0,observe:({GtkSource:e})=>{try{return new e.GutterRenderer,`accepted`}catch{return`threw`}},shows:`threw`},{rule:`text and markup replace each other, and a length cuts the string in bytes`,instance:!0,observe:({GtkSource:e})=>{let t=new e.GutterRendererText;t.set_text(`abcdef`,3);let n=[t.text,t.markup];t.set_markup(`<b>x</b>`,-1);let r=[t.text,t.markup];return t.text=`zz`,[n,r,[t.text,t.markup]]},shows:[[`abc`,null],[null,`<b>x</b>`],[`zz`,null]]},{rule:`insert claims a renderer for the view, a second insert is refused, remove gives it back`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View,r=n.get_gutter(e.TextWindowType.LEFT),i=n.get_gutter(e.TextWindowType.RIGHT),a=new t.GutterRendererText,o=r.insert(a,0),s=a.get_view()===n,c=[r.insert(a,1),i.insert(a,1)];return r.remove(a),[o,s,c,a.get_view(),i.insert(a,0)]},shows:[!0,!0,[!1,!1],null,!0]},{rule:`reorder and queue_draw answer nothing`,instance:!0,observe:({Gtk:e,GtkSource:t})=>{let n=new t.View().get_gutter(e.TextWindowType.LEFT),r=new t.GutterRendererText;return n.insert(r,0),[n.reorder(r,3),n.queue_draw(),r.queue_draw()]},shows:[void 0,void 0,void 0]}];export{e as GTKSOURCE_VIEW_DEFAULT_VECTORS,t as GTKSOURCE_VIEW_SURFACE_VECTORS};
|
|
@@ -1,10 +1,35 @@
|
|
|
1
|
+
import type { MarkupRun } from './gutter-renderer.js';
|
|
1
2
|
import type { EditorPalette } from './style-scheme.js';
|
|
2
3
|
import type { StyledRun } from './token-styler.js';
|
|
4
|
+
/** The size a left-gutter renderer asks for, in device-independent pixels. */
|
|
5
|
+
export interface GutterMetrics {
|
|
6
|
+
/** The insert position: below 0 the column sits left of the line numbers, otherwise right of them. */
|
|
7
|
+
readonly position: number;
|
|
8
|
+
readonly widthRequest: number;
|
|
9
|
+
readonly marginStart: number;
|
|
10
|
+
readonly marginEnd: number;
|
|
11
|
+
}
|
|
12
|
+
/** What a renderer showed for one line: plain `text`, and `runs` when it was set as `markup`. */
|
|
13
|
+
export interface GutterCell {
|
|
14
|
+
readonly text: string;
|
|
15
|
+
readonly runs: readonly MarkupRun[] | null;
|
|
16
|
+
}
|
|
17
|
+
/** One renderer's column for the lines `first..last`: `cells[i]` is line `first + i`. */
|
|
18
|
+
export interface GutterColumn extends GutterMetrics {
|
|
19
|
+
readonly cells: readonly GutterCell[];
|
|
20
|
+
}
|
|
3
21
|
/** What the driver reports back. Offsets are UTF-16 code units, valid AFTER the edit. */
|
|
4
22
|
export interface EditorHost {
|
|
5
23
|
/** The user replaced `removedLength` characters at `start` with `inserted`. */
|
|
6
24
|
onNativeEdit(start: number, removedLength: number, inserted: string): void;
|
|
7
25
|
onNativeSelection(start: number, end: number): void;
|
|
26
|
+
/** The left gutter's renderers, in paint order and without cells. */
|
|
27
|
+
gutterColumns(): readonly GutterMetrics[];
|
|
28
|
+
/**
|
|
29
|
+
* Asks every left-gutter renderer to fill its cell for each line of `first..last` (inclusive) with
|
|
30
|
+
* `vfunc_query_data`, the lines the driver is about to paint. Call it once per paint pass.
|
|
31
|
+
*/
|
|
32
|
+
queryGutter(first: number, last: number): readonly GutterColumn[];
|
|
8
33
|
}
|
|
9
34
|
export interface EditorLayout {
|
|
10
35
|
readonly showLineNumbers: boolean;
|
|
@@ -37,4 +62,9 @@ export interface EditorDriver extends HighlightSink {
|
|
|
37
62
|
setSelection(start: number, end: number): void;
|
|
38
63
|
setLineCount(count: number): void;
|
|
39
64
|
setLayout(layout: EditorLayout): void;
|
|
65
|
+
/**
|
|
66
|
+
* A left-gutter renderer was added, moved, resized or asked to repaint. Idempotent and cheap: a
|
|
67
|
+
* burst of calls costs one repaint per task, as `queue_draw` does in GTK.
|
|
68
|
+
*/
|
|
69
|
+
invalidateGutter(): void;
|
|
40
70
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Buffer } from './buffer.js';
|
|
2
|
-
import type { EditorDriver, EditorHost } from './editor-driver.js';
|
|
2
|
+
import type { EditorDriver, EditorHost, GutterColumn, GutterMetrics } from './editor-driver.js';
|
|
3
|
+
import type { GutterSet } from './gutter-renderer.js';
|
|
3
4
|
import { StyleSchemeManager } from './style-scheme.js';
|
|
4
5
|
import type { ColorSchemeVariant } from './style-scheme.js';
|
|
5
6
|
import { SignalEmitter } from './signals.js';
|
|
@@ -14,6 +15,7 @@ export declare class EditorSession extends SignalEmitter implements EditorHost {
|
|
|
14
15
|
private mirroring;
|
|
15
16
|
private fromNative;
|
|
16
17
|
private variant;
|
|
18
|
+
private gutters;
|
|
17
19
|
private props;
|
|
18
20
|
constructor(driver: EditorDriver, schemes?: StyleSchemeManager, variant?: ColorSchemeVariant);
|
|
19
21
|
get buffer(): Buffer;
|
|
@@ -21,6 +23,12 @@ export declare class EditorSession extends SignalEmitter implements EditorHost {
|
|
|
21
23
|
private attach;
|
|
22
24
|
private onBufferChanged;
|
|
23
25
|
private onBufferCursor;
|
|
26
|
+
/** Paints the left gutter of `gutters`: its changes reach the driver, and `queryGutter` answers from it. */
|
|
27
|
+
bindGutters(gutters: GutterSet): void;
|
|
28
|
+
private leftRenderers;
|
|
29
|
+
private metricsOf;
|
|
30
|
+
gutterColumns(): readonly GutterMetrics[];
|
|
31
|
+
queryGutter(first: number, last: number): readonly GutterColumn[];
|
|
24
32
|
onNativeEdit(start: number, removedLength: number, inserted: string): void;
|
|
25
33
|
onNativeSelection(start: number, end: number): void;
|
|
26
34
|
private setProp;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { GtkSourceViewSurfaceLike, ViewLike } from './view-vectors.js';
|
|
2
|
+
/** The `GtkSource.GutterLines` members a renderer reads in `vfunc_query_data`. */
|
|
3
|
+
export interface GutterLinesLike {
|
|
4
|
+
get_first(): number;
|
|
5
|
+
get_last(): number;
|
|
6
|
+
is_cursor(line: number): boolean;
|
|
7
|
+
}
|
|
8
|
+
/** The slice of `GObject` a registered renderer subclass uses. */
|
|
9
|
+
export interface GObjectLike {
|
|
10
|
+
registerClass<T>(meta: object, klass: T): T;
|
|
11
|
+
ParamSpec: {
|
|
12
|
+
uint(name: string, nick: string, blurb: string, flags: any, min: number, max: number, def: number): unknown;
|
|
13
|
+
};
|
|
14
|
+
ParamFlags: {
|
|
15
|
+
READWRITE: unknown;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Where a pass happens: a window with a main loop on GJS, the document on the web. */
|
|
19
|
+
export interface GutterPaintHarness {
|
|
20
|
+
/** Puts `view` where it is painted and resolves once its first pass has run. */
|
|
21
|
+
present(view: ViewLike): Promise<void>;
|
|
22
|
+
/** Resolves once the repaint a `queue_draw` asked for would have run. */
|
|
23
|
+
settle(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface GutterPaintSurface extends GtkSourceViewSurfaceLike {
|
|
26
|
+
GObject: GObjectLike;
|
|
27
|
+
}
|
|
28
|
+
export interface GutterPaintVector {
|
|
29
|
+
readonly rule: string;
|
|
30
|
+
/** Needs a painted pass, so a door without pixels skips it. */
|
|
31
|
+
readonly paints: boolean;
|
|
32
|
+
/** `Class.vfunc_name` entries of `UNLOCKED_VFUNCS` this vector proves against GJS. */
|
|
33
|
+
readonly unlocks?: readonly string[];
|
|
34
|
+
readonly observe: (ns: GutterPaintSurface, harness: GutterPaintHarness) => Promise<unknown>;
|
|
35
|
+
readonly shows: unknown;
|
|
36
|
+
}
|
|
37
|
+
export declare const GUTTER_PAINT_VECTORS: readonly GutterPaintVector[];
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { GIR_TYPE, GObjectObject } from '@gjsify/adwaita-core';
|
|
2
|
+
import type { Buffer } from './buffer.js';
|
|
3
|
+
/** `Gtk.TextWindowType`: the two sides that carry a gutter. */
|
|
4
|
+
export declare const WINDOW_LEFT = 3;
|
|
5
|
+
declare const WIDGET_PROPERTIES: readonly [readonly ["margin_start", "marginStart", 0], readonly ["margin_end", "marginEnd", 0], readonly ["width_request", "widthRequest", -1], readonly ["focusable", "focusable", false], readonly ["focus_on_click", "focusOnClick", true]];
|
|
6
|
+
type WidgetPropertyName = (typeof WIDGET_PROPERTIES)[number][0];
|
|
7
|
+
export interface GutterRendererProperties {
|
|
8
|
+
margin_start?: number;
|
|
9
|
+
margin_end?: number;
|
|
10
|
+
width_request?: number;
|
|
11
|
+
focusable?: boolean;
|
|
12
|
+
focus_on_click?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface GutterRendererTextProperties extends GutterRendererProperties {
|
|
15
|
+
text?: string | null;
|
|
16
|
+
markup?: string | null;
|
|
17
|
+
}
|
|
18
|
+
export declare abstract class GutterRenderer extends GObjectObject {
|
|
19
|
+
static [GIR_TYPE]: string;
|
|
20
|
+
margin_start: number;
|
|
21
|
+
marginStart: number;
|
|
22
|
+
margin_end: number;
|
|
23
|
+
marginEnd: number;
|
|
24
|
+
width_request: number;
|
|
25
|
+
widthRequest: number;
|
|
26
|
+
focusable: boolean;
|
|
27
|
+
focus_on_click: boolean;
|
|
28
|
+
focusOnClick: boolean;
|
|
29
|
+
/** Widget properties are held here; every other key is a property a registered subclass declares. */
|
|
30
|
+
constructor(properties?: GutterRendererProperties & Record<string, unknown>);
|
|
31
|
+
/** The view of the gutter this renderer sits in, `null` while it sits in none. */
|
|
32
|
+
get_view(): object | null;
|
|
33
|
+
get view(): object | null;
|
|
34
|
+
/** Asks the gutter to repaint this column; the driver paints once per task however often this is called. */
|
|
35
|
+
queue_draw(): void;
|
|
36
|
+
/** @internal Set by `Gutter.insert` and `remove`; not part of GtkSource. */
|
|
37
|
+
attach(gutter: Gutter | null): void;
|
|
38
|
+
/** @internal The held widget properties, for the driver that sizes the column. */
|
|
39
|
+
widgetProperty(name: WidgetPropertyName, value?: number | boolean): number | boolean;
|
|
40
|
+
}
|
|
41
|
+
/** A renderer that shows one string. `text` and `markup` replace each other, as in GtkSource. */
|
|
42
|
+
export declare class GutterRendererText extends GutterRenderer {
|
|
43
|
+
private plain;
|
|
44
|
+
private marked;
|
|
45
|
+
constructor(properties?: GutterRendererTextProperties & Record<string, unknown>);
|
|
46
|
+
get text(): string | null;
|
|
47
|
+
set text(value: string | null);
|
|
48
|
+
get markup(): string | null;
|
|
49
|
+
set markup(value: string | null);
|
|
50
|
+
/** `length` counts bytes, `-1` takes the whole string. */
|
|
51
|
+
set_text(text: string, length: number): void;
|
|
52
|
+
set_markup(markup: string, length: number): void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* `GtkSource.GutterLines`, the subset a renderer reads in `vfunc_query_data`: the visible range and
|
|
56
|
+
* where the cursor is. The rest (`add_class`, `get_line_yrange` …) is absent.
|
|
57
|
+
*/
|
|
58
|
+
export declare class GutterLines {
|
|
59
|
+
private readonly owner;
|
|
60
|
+
private readonly text;
|
|
61
|
+
private readonly first;
|
|
62
|
+
private readonly last;
|
|
63
|
+
constructor(owner: object, text: Buffer, first: number, last: number);
|
|
64
|
+
get_first(): number;
|
|
65
|
+
get_last(): number;
|
|
66
|
+
get_buffer(): Buffer;
|
|
67
|
+
get_view(): object;
|
|
68
|
+
is_cursor(line: number): boolean;
|
|
69
|
+
}
|
|
70
|
+
/** Heard by the editor session: a column was added, moved, resized or asked to repaint. */
|
|
71
|
+
export type GutterListener = (gutter: Gutter) => void;
|
|
72
|
+
export declare class Gutter {
|
|
73
|
+
private readonly owner;
|
|
74
|
+
readonly window_type: number;
|
|
75
|
+
private readonly listener;
|
|
76
|
+
private readonly placed;
|
|
77
|
+
constructor(owner: object, window_type: number, listener?: GutterListener);
|
|
78
|
+
get_view(): object;
|
|
79
|
+
get view(): object;
|
|
80
|
+
/** Claims `renderer` at `position` (lower is nearer the left); `false` when another gutter holds it. */
|
|
81
|
+
insert(renderer: GutterRenderer, position: number): boolean;
|
|
82
|
+
remove(renderer: GutterRenderer): void;
|
|
83
|
+
reorder(renderer: GutterRenderer, position: number): void;
|
|
84
|
+
queue_draw(): void;
|
|
85
|
+
/** @internal Left to right; renderers at one position keep the order they were inserted in. */
|
|
86
|
+
get renderers(): readonly GutterRenderer[];
|
|
87
|
+
/** @internal The position each renderer was inserted at, parallel to `renderers`. */
|
|
88
|
+
get positions(): readonly number[];
|
|
89
|
+
private sort;
|
|
90
|
+
}
|
|
91
|
+
/** The gutters of one view, made when first asked for. */
|
|
92
|
+
export declare class GutterSet {
|
|
93
|
+
readonly view: object;
|
|
94
|
+
private readonly gutters;
|
|
95
|
+
private listener;
|
|
96
|
+
constructor(view: object);
|
|
97
|
+
/** @internal The editor session hears of every change to a gutter of this view. */
|
|
98
|
+
watch(listener: GutterListener): void;
|
|
99
|
+
/** `gtk_source_view_get_gutter`: `null` for a side that has no gutter. */
|
|
100
|
+
get(windowType: number): Gutter | null;
|
|
101
|
+
}
|
|
102
|
+
/** One stretch of a renderer's `markup`, with the Pango styles the drivers can paint. */
|
|
103
|
+
export interface MarkupRun {
|
|
104
|
+
readonly text: string;
|
|
105
|
+
readonly bold: boolean;
|
|
106
|
+
readonly italic: boolean;
|
|
107
|
+
readonly underline: boolean;
|
|
108
|
+
readonly strikethrough: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Pango markup reduced to what a gutter paints: `<b>`, `<i>`, `<u>`, `<s>` and the five entities.
|
|
112
|
+
* Any other tag (`<span>`, `<big>` …) is dropped and its text kept.
|
|
113
|
+
*/
|
|
114
|
+
export declare function parseMarkup(markup: string): MarkupRun[];
|
|
115
|
+
export {};
|
package/lib/types/index.d.ts
CHANGED
|
@@ -25,6 +25,33 @@ export interface ViewLike {
|
|
|
25
25
|
get_first_child(): unknown;
|
|
26
26
|
get_next_sibling(): unknown;
|
|
27
27
|
get_parent(): unknown;
|
|
28
|
+
get_gutter(windowType: number): GutterLike | null;
|
|
29
|
+
buffer: {
|
|
30
|
+
text: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export interface GutterRendererLike {
|
|
34
|
+
text: string | null;
|
|
35
|
+
markup: string | null;
|
|
36
|
+
margin_start: number;
|
|
37
|
+
marginStart: number;
|
|
38
|
+
margin_end: number;
|
|
39
|
+
width_request: number;
|
|
40
|
+
focusable: boolean;
|
|
41
|
+
focus_on_click: boolean;
|
|
42
|
+
get_view(): unknown;
|
|
43
|
+
set_text(text: string, length: number): void;
|
|
44
|
+
set_markup(markup: string, length: number): void;
|
|
45
|
+
queue_draw(): void;
|
|
46
|
+
}
|
|
47
|
+
export interface GutterLike {
|
|
48
|
+
readonly view: unknown;
|
|
49
|
+
readonly window_type: number;
|
|
50
|
+
get_view(): unknown;
|
|
51
|
+
insert(renderer: GutterRendererLike, position: number): boolean;
|
|
52
|
+
remove(renderer: GutterRendererLike): void;
|
|
53
|
+
reorder(renderer: GutterRendererLike, position: number): void;
|
|
54
|
+
queue_draw(): void;
|
|
28
55
|
}
|
|
29
56
|
export interface ScrolledWindowLike {
|
|
30
57
|
readonly vadjustment: AdjustmentLike;
|
|
@@ -33,7 +60,7 @@ export interface ScrolledWindowLike {
|
|
|
33
60
|
set_vadjustment(adjustment: AdjustmentLike): void;
|
|
34
61
|
get_vadjustment(): AdjustmentLike;
|
|
35
62
|
}
|
|
36
|
-
/** The parts of `Gtk` and `GtkSource` the slice-4 vectors read. */
|
|
63
|
+
/** The parts of `Gtk` and `GtkSource` the slice-4 and slice-6 vectors read. */
|
|
37
64
|
export interface GtkSourceViewSurfaceLike {
|
|
38
65
|
Gtk: {
|
|
39
66
|
TextWindowType: Record<string, number>;
|
|
@@ -43,6 +70,8 @@ export interface GtkSourceViewSurfaceLike {
|
|
|
43
70
|
};
|
|
44
71
|
GtkSource: {
|
|
45
72
|
View: new (properties?: any) => ViewLike;
|
|
73
|
+
GutterRenderer: new (properties?: any) => GutterRendererLike;
|
|
74
|
+
GutterRendererText: new (properties?: any) => GutterRendererLike;
|
|
46
75
|
};
|
|
47
76
|
}
|
|
48
77
|
export interface GtkSourceViewSurfaceVector {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/gtksource-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"description": "Headless GtkSourceView language/style parsing (renderer-free) — parse .lang and style scheme XML into typed data with JS regex translation, strict unsupported reporting",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -45,9 +45,12 @@
|
|
|
45
45
|
"style-scheme",
|
|
46
46
|
"headless"
|
|
47
47
|
],
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@gjsify/adwaita-core": "^0.58.0"
|
|
50
|
+
},
|
|
48
51
|
"devDependencies": {
|
|
49
|
-
"@gjsify/cli": "^0.
|
|
50
|
-
"@gjsify/unit": "^0.
|
|
52
|
+
"@gjsify/cli": "^0.58.0",
|
|
53
|
+
"@gjsify/unit": "^0.58.0",
|
|
51
54
|
"@types/node": "^25.9.2",
|
|
52
55
|
"typescript": "^6.0.3"
|
|
53
56
|
},
|