Skip to content

Commit 53a61b6

Browse files
committed
feat!: add (checkbox) in list
1 parent 4d2b327 commit 53a61b6

File tree

7 files changed

+25175
-23305
lines changed

7 files changed

+25175
-23305
lines changed

README.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ Some *marked up* words
3232
<2020-06-07 Sun>
3333
3434
- list a
35-
- [ ] list a
36-
- [ ] list b
35+
- [-] list a
3736
- [ ] list b
37+
- [x] list b
3838
- list a
3939
4040
** Subsection :tag:
@@ -75,24 +75,23 @@ Parses as:
7575
(expr [7, 9] - [7, 10])))
7676
(listitem [8, 2] - [11, 0]
7777
bullet: (bullet [8, 2] - [8, 3])
78-
contents: (paragraph [8, 4] - [9, 0]
79-
(expr [8, 4] - [8, 5])
80-
(expr [8, 6] - [8, 7])
78+
checkbox: (checkbox [8, 4] - [8, 7]
79+
status: (expr [8, 5] - [8, 6]))
80+
contents: (paragraph [8, 8] - [9, 0]
8181
(expr [8, 8] - [8, 12])
8282
(expr [8, 13] - [8, 14]))
8383
contents: (list [9, 0] - [11, 0]
8484
(listitem [9, 4] - [10, 0]
8585
bullet: (bullet [9, 4] - [9, 5])
86-
contents: (paragraph [9, 6] - [10, 0]
87-
(expr [9, 6] - [9, 7])
88-
(expr [9, 8] - [9, 9])
86+
checkbox: (checkbox [9, 6] - [9, 9])
87+
contents: (paragraph [9, 10] - [10, 0]
8988
(expr [9, 10] - [9, 14])
9089
(expr [9, 15] - [9, 16])))
9190
(listitem [10, 4] - [11, 0]
9291
bullet: (bullet [10, 4] - [10, 5])
93-
contents: (paragraph [10, 6] - [11, 0]
94-
(expr [10, 6] - [10, 7])
95-
(expr [10, 8] - [10, 9])
92+
checkbox: (checkbox [10, 6] - [10, 9]
93+
status: (expr [10, 7] - [10, 8]))
94+
contents: (paragraph [10, 10] - [11, 0]
9695
(expr [10, 10] - [10, 14])
9796
(expr [10, 15] - [10, 16])))))
9897
(listitem [11, 2] - [12, 0]

corpus/basic.tst

Lines changed: 170 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,7 @@ List.8b - Whitespace after text
815815
(expr))))))
816816

817817
================================================================================
818-
List.9 - newline before sub listitem
818+
List.9 - newline before sub listitem
819819
================================================================================
820820
- a
821821

@@ -835,6 +835,175 @@ List.9 - newline before sub listitem
835835
(paragraph
836836
(expr))))))))
837837

838+
================================================================================
839+
List.10a - Checkbox [ ]
840+
================================================================================
841+
- [ ] a
842+
--------------------------------------------------------------------------------
843+
844+
(document
845+
(body
846+
(list
847+
(listitem
848+
(bullet)
849+
(checkbox)
850+
(paragraph
851+
(expr))))))
852+
853+
================================================================================
854+
List.10b - Checkbox [x]
855+
================================================================================
856+
- [x] a
857+
--------------------------------------------------------------------------------
858+
859+
(document
860+
(body
861+
(list
862+
(listitem
863+
(bullet)
864+
(checkbox
865+
(expr))
866+
(paragraph
867+
(expr))))))
868+
869+
================================================================================
870+
List.10c - Checkbox [X]
871+
================================================================================
872+
- [X] a
873+
--------------------------------------------------------------------------------
874+
875+
(document
876+
(body
877+
(list
878+
(listitem
879+
(bullet)
880+
(checkbox
881+
(expr))
882+
(paragraph
883+
(expr))))))
884+
885+
================================================================================
886+
List.10d - Checkbox [-]
887+
================================================================================
888+
- [-] a
889+
--------------------------------------------------------------------------------
890+
891+
(document
892+
(body
893+
(list
894+
(listitem
895+
(bullet)
896+
(checkbox
897+
(expr))
898+
(paragraph
899+
(expr))))))
900+
901+
================================================================================
902+
List.10e - Checkbox [done]
903+
================================================================================
904+
- [done] a
905+
--------------------------------------------------------------------------------
906+
907+
(document
908+
(body
909+
(list
910+
(listitem
911+
(bullet)
912+
(checkbox
913+
(expr))
914+
(paragraph
915+
(expr))))))
916+
917+
================================================================================
918+
List.11a - No Checkbox markup
919+
================================================================================
920+
- +[ ] a+
921+
--------------------------------------------------------------------------------
922+
923+
(document
924+
(body
925+
(list
926+
(listitem
927+
(bullet)
928+
(paragraph
929+
(expr)
930+
(expr)
931+
(expr))))))
932+
933+
================================================================================
934+
List.11b - No Checkbox [ a
935+
================================================================================
936+
- [ a
937+
--------------------------------------------------------------------------------
938+
939+
(document
940+
(body
941+
(list
942+
(listitem
943+
(bullet)
944+
(paragraph
945+
(expr)
946+
(expr))))))
947+
948+
================================================================================
949+
List.11c - No Checkbox [ ]
950+
================================================================================
951+
- [ ]
952+
--------------------------------------------------------------------------------
953+
954+
(document
955+
(body
956+
(list
957+
(listitem
958+
(bullet)
959+
(paragraph
960+
(expr)
961+
(expr))))))
962+
963+
================================================================================
964+
List.11d - No Checkbox [-
965+
================================================================================
966+
- [- a]
967+
--------------------------------------------------------------------------------
968+
969+
(document
970+
(body
971+
(list
972+
(listitem
973+
(bullet)
974+
(paragraph
975+
(expr)
976+
(expr))))))
977+
978+
================================================================================
979+
List.11e - No Checkbox [x
980+
================================================================================
981+
- [x b]
982+
--------------------------------------------------------------------------------
983+
984+
(document
985+
(body
986+
(list
987+
(listitem
988+
(bullet)
989+
(paragraph
990+
(expr)
991+
(expr))))))
992+
993+
================================================================================
994+
List.11f - No Checkbox [x1]
995+
================================================================================
996+
- [x1]
997+
--------------------------------------------------------------------------------
998+
999+
(document
1000+
(body
1001+
(list
1002+
(listitem
1003+
(bullet)
1004+
(paragraph
1005+
(expr))))))
1006+
8381007
================================================================================
8391008
Directive.1 - Document
8401009
================================================================================

grammar.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,12 +246,22 @@ org_grammar = {
246246

247247
listitem: $ => seq(
248248
field('bullet', $.bullet),
249+
optional(field('checkbox', $.checkbox)),
249250
choice(
250251
$._eof,
251252
field('contents', $._body_contents),
252253
),
253254
),
254255

256+
checkbox: $ => choice(
257+
'[ ]',
258+
seq(
259+
token(prec('non-immediate', '[')),
260+
field('status', alias($._checkbox_status_expr, $.expr)),
261+
token.immediate(prec('special', ']')),
262+
),
263+
),
264+
255265
table: $ => prec.right(seq(
256266
optional($._directive_list),
257267
repeat1(choice($.row, $.hr)),
@@ -324,6 +334,8 @@ org_grammar = {
324334
_immediate_expr: $ => repeat1(expr('immediate', token.immediate)),
325335
_noc_expr: $ => repeat1(expr('immediate', token.immediate, ':')),
326336

337+
_checkbox_status_expr: $ => expr('immediate', token.immediate, ']'),
338+
327339
_ts_expr: $ => seq(
328340
expr('non-immediate', token, '>]'),
329341
repeat(expr('immediate', token.immediate, '>]'))
@@ -344,6 +356,9 @@ function expr(pr, tfunc, skip = '') {
344356
alias(tfunc(prec(pr, /\p{L}+/)), 'str'),
345357
alias(tfunc(prec(pr, /\p{N}+/)), 'num'),
346358
alias(tfunc(prec(pr, /[^\p{Z}\p{L}\p{N}\n\r]/)), 'sym'),
359+
// for checkboxes: ugly, but makes them work..
360+
// alias(tfunc(prec(pr, 'x')), 'str'),
361+
// alias(tfunc(prec(pr, 'X')), 'str'),
347362
)
348363
}
349364

queries/highlights.scm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,10 @@
6161
(bullet) @OrgListBullet
6262

6363
; Get different colors for different statuses as follows
64-
(listitem . (bullet) . (paragraph . (expr "[" "str" @OrgCheckDone "]") @OrgCheckbox (#match? @OrgCheckbox "^\[[xX]\]$")))
65-
(listitem . (bullet) . (paragraph . (expr "[" "-" @OrgCheckInProgress "]") @OrgCheckbox (#eq? @OrgCheckbox "[-]")))
66-
(listitem . (bullet) . (paragraph . (expr "[") @OrgCheckbox.left (#eq? @OrgCheckbox.left "[") . (expr "]") @OrgCheckbox.right (#eq? @OrgCheckbox.right "]")))
67-
; (listitem . (bullet) . (paragraph (expr ":" ":") @OrgListDescriptionSeparator (#eq? @OrgListDescriptionSeparator "::"))) -- matches multiple, requires a special search.
64+
(checkbox) @OrgCheckbox
65+
(checkbox status: (expr "-") @OrgCheckInProgress)
66+
(checkbox status: (expr "str") @OrgCheckDone (#any-of? @OrgCheckDone "x" "X"))
67+
(checkbox status: (expr) @Error (#not-any-of? @Error "x" "X" "-"))
6868

6969
; If you want the ruler one color and the separators a different color,
7070
; something like this would do it:

0 commit comments

Comments
 (0)