BREAKING CHANGE: (itemtext) removed, typically in favor of (paragraph) as the listitem should now be parsed via (body) logic.
78 lines
4.2 KiB
Scheme
78 lines
4.2 KiB
Scheme
; A Note on anonymous nodes (represented in a query file as strings). As of
|
|
; right now, anonymous nodes can not be anchored.
|
|
; See https://github.com/tree-sitter/tree-sitter/issues/1461
|
|
|
|
; Example highlighting for headlines. The headlines here will be matched
|
|
; cyclically, easily extended to match however your heart desires.
|
|
(headline (stars) @OrgStars1 (#match? @OrgStars1 "^(\\*{3})*\\*$") (item) @OrgHeadlineLevel1)
|
|
(headline (stars) @OrgStars2 (#match? @OrgStars2 "^(\\*{3})*\\*\\*$") (item) @OrgHeadlineLevel2)
|
|
(headline (stars) @OrgStars3 (#match? @OrgStars3 "^(\\*{3})*\\*\\*\\*$") (item) @OrgHeadlineLevel3)
|
|
|
|
; This one should be generated after scanning for configuration, using
|
|
; something like #any-of? for keywords, but could use a match if allowing
|
|
; markup on todo keywords is desirable.
|
|
(item . (expr) @OrgKeywordTodo (#eq? @OrgKeywordTodo "TODO"))
|
|
(item . (expr) @OrgKeywordDone (#eq? @OrgKeywordDone "DONE"))
|
|
|
|
; Not sure about this one with the anchors.
|
|
(item . (expr)? . (expr "[" "#" @OrgPriority [ "num" "str" ] @OrgPriority "]") @OrgPriorityCookie (#match? @OrgPriorityCookie "\[#.\]"))
|
|
|
|
; Match cookies in a headline or listitem. If you want the numbers
|
|
; differently highlighted from the borders, add a capture name to "num".
|
|
; ([ (item) (itemtext) ] (expr "[" "num"? @OrgCookieNum "/" "num"? @OrgCookieNum "]" ) @OrgProgressCookie (#match? @OrgProgressCookie "^\[\d*/\d*\]$"))
|
|
; ([ (item) (itemtext) ] (expr "[" "num"? @OrgCookieNum "%" "]" ) @OrgPercentCookie (#match? @OrgPercentCookie "^\[\d*%\]$"))
|
|
|
|
(tag_list (tag) @OrgTag) @OrgTagList
|
|
|
|
(property_drawer) @OrgPropertyDrawer
|
|
|
|
; Properties are :name: vale, so to color the ':' we can either add them
|
|
; directly, or highlight the property separately from the name and value. If
|
|
; priorities are set properly, it should be simple to achieve.
|
|
(property name: (expr) @OrgPropertyName (value)? @OrgPropertyValue) @OrgProperty
|
|
|
|
; Simple examples, but can also match (day), (date), (time), etc.
|
|
(timestamp "[") @OrgTimestampInactive
|
|
(timestamp "<"
|
|
(day)? @OrgTimestampDay
|
|
(date)? @OrgTimestampDate
|
|
(time)? @OrgTimestampTime
|
|
(repeat)? @OrgTimestampRepeat
|
|
(delay)? @OrgTimestampDelay
|
|
) @OrgTimestampActive
|
|
|
|
; Like OrgProperty, easy to choose how the '[fn:LABEL] DESCRIPTION' are highlighted
|
|
(fndef label: (expr) @OrgFootnoteLabel (description) @OrgFootnoteDescription) @OrgFootnoteDefinition
|
|
|
|
; Again like OrgProperty to change the styling of '#+' and ':'. Note that they
|
|
; can also be added in the query directly as anonymous nodes to style differently.
|
|
(directive name: (expr) @OrgDirectiveName (value)? @OrgDirectiveValue) @OrgDirective
|
|
|
|
(comment) @OrgComment
|
|
|
|
; At the moment, these three elements use one regex for the whole name.
|
|
; So (name) -> :name:, ideally this will not be the case, so it follows the
|
|
; patterns listed above, but that's the current status. Conflict issues.
|
|
(drawer name: (expr) @OrgDrawerName (contents)? @OrgDrawerContents) @OrgDrawer
|
|
(block name: (expr) @OrgBlockName (contents)? @OrgBlockContents) @OrgBlock
|
|
(dynamic_block name: (expr) @OrgDynamicBlockName (contents)? @OrgDynamicBlockContents) @OrgDynamicBlock
|
|
|
|
; Can match different styles with a (#match?) or (#eq?) predicate if desired
|
|
(bullet) @OrgListBullet
|
|
|
|
; Get different colors for different statuses as follows
|
|
(listitem . (bullet) . (paragraph . (expr "[" "str" @OrgCheckDone "]") @OrgCheckbox (#match? @OrgCheckbox "^\[[xX]\]$")))
|
|
(listitem . (bullet) . (paragraph . (expr "[" "-" @OrgCheckInProgress "]") @OrgCheckbox (#eq? @OrgCheckbox "[-]")))
|
|
(listitem . (bullet) . (paragraph . (expr "[") @OrgCheckbox.left (#eq? @OrgCheckbox.left "[") . (expr "]") @OrgCheckbox.right (#eq? @OrgCheckbox.right "]")))
|
|
; (listitem . (bullet) . (paragraph (expr ":" ":") @OrgListDescriptionSeparator (#eq? @OrgListDescriptionSeparator "::"))) -- matches multiple, requires a special search.
|
|
|
|
; If you want the ruler one color and the separators a different color,
|
|
; something like this would do it:
|
|
; (hr "|" @OrgTableHRBar) @OrgTableHorizontalRuler
|
|
(hr) @OrgTableHorizontalRuler
|
|
|
|
; Can do all sorts of fun highlighting here..
|
|
(cell (contents . (expr "=")) @OrgCellFormula (#match? @OrgCellFormula "^\d+([.,]\d+)*$"))
|
|
|
|
; Dollars, floats, etc. Strings.. all options to play with
|
|
(cell (contents . (expr "num") @OrgCellNumber (#match? @OrgCellNumber "^\d+([.,]\d+)*$") .))
|