xref: /vim-8.2.3635/runtime/syntax/gift.vim (revision 7e6a515e)
1*7e6a515eSBram Moolenaar" Vim syntax file
2*7e6a515eSBram Moolenaar"
3*7e6a515eSBram Moolenaar" Language:        Moodle GIFT (General Import Format Template)
4*7e6a515eSBram Moolenaar" Maintainer:      Selim Temizer (http://selimtemizer.com)
5*7e6a515eSBram Moolenaar" Creation:        November 28, 2020
6*7e6a515eSBram Moolenaar" Latest Revision: December 21, 2020
7*7e6a515eSBram Moolenaar" Note:            The order of entities in this file is important!
8*7e6a515eSBram Moolenaar
9*7e6a515eSBram Moolenaarif version < 600
10*7e6a515eSBram Moolenaar  syntax clear
11*7e6a515eSBram Moolenaarelseif exists("b:current_syntax")
12*7e6a515eSBram Moolenaar  finish
13*7e6a515eSBram Moolenaarendif
14*7e6a515eSBram Moolenaar
15*7e6a515eSBram Moolenaar
16*7e6a515eSBram Moolenaarsetlocal conceallevel=1
17*7e6a515eSBram Moolenaar
18*7e6a515eSBram Moolenaar"-----------------------------------------------
19*7e6a515eSBram Moolenaar" GIFT entities
20*7e6a515eSBram Moolenaar
21*7e6a515eSBram Moolenaarsyn match giftS        "\~"          contained                    "GIFT special characters
22*7e6a515eSBram Moolenaarsyn match giftS         "="          contained
23*7e6a515eSBram Moolenaarsyn match giftS         "#"          contained
24*7e6a515eSBram Moolenaarsyn match giftS         "{"          contained
25*7e6a515eSBram Moolenaarsyn match giftS         "}"          contained
26*7e6a515eSBram Moolenaarsyn match giftS         ":"          contained
27*7e6a515eSBram Moolenaar
28*7e6a515eSBram Moolenaarsyn match giftES     "\\\~"          contained  conceal  cchar=~  "GIFT escaped special characters
29*7e6a515eSBram Moolenaarsyn match giftES      "\\="          contained  conceal  cchar==
30*7e6a515eSBram Moolenaarsyn match giftES      "\\#"          contained  conceal  cchar=#
31*7e6a515eSBram Moolenaarsyn match giftES      "\\{"          contained  conceal  cchar={
32*7e6a515eSBram Moolenaarsyn match giftES      "\\}"          contained  conceal  cchar=}
33*7e6a515eSBram Moolenaarsyn match giftES      "\\:"          contained  conceal  cchar=:
34*7e6a515eSBram Moolenaar
35*7e6a515eSBram Moolenaarsyn match giftEN      "\\n"          contained  conceal  cchar=n  "GIFT escaped newline
36*7e6a515eSBram Moolenaar
37*7e6a515eSBram Moolenaarsyn match giftFormat  "\[html]"      contained                    "GIFT formats
38*7e6a515eSBram Moolenaarsyn match giftFormat  "\[plain]"     contained
39*7e6a515eSBram Moolenaarsyn match giftFormat  "\[moodle]"    contained
40*7e6a515eSBram Moolenaarsyn match giftFormat  "\[markdown]"  contained
41*7e6a515eSBram Moolenaar
42*7e6a515eSBram Moolenaar"--------------------------------------------------------
43*7e6a515eSBram Moolenaar" HTML entities
44*7e6a515eSBram Moolenaar
45*7e6a515eSBram Moolenaarsyn match giftH            "<"       contained                    "HTML characters that might need to be handled/escaped
46*7e6a515eSBram Moolenaarsyn match giftH            ">"       contained
47*7e6a515eSBram Moolenaarsyn match giftH            "&"       contained
48*7e6a515eSBram Moolenaar
49*7e6a515eSBram Moolenaarsyn match giftEH        "&lt;"       contained  conceal  cchar=<  "HTML escaped characters
50*7e6a515eSBram Moolenaarsyn match giftEH        "&gt;"       contained  conceal  cchar=>
51*7e6a515eSBram Moolenaarsyn match giftEH       "&amp;"       contained  conceal  cchar=&
52*7e6a515eSBram Moolenaarsyn match giftEH      "&nbsp;"       contained  conceal  cchar=_
53*7e6a515eSBram Moolenaar
54*7e6a515eSBram Moolenaar"-------------------------------------------------------
55*7e6a515eSBram Moolenaar" Answer components: Feedback and general feedback
56*7e6a515eSBram Moolenaar
57*7e6a515eSBram Moolenaarsyn match giftFB           "#\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)"           contained  contains=giftF       "Feedback block
58*7e6a515eSBram Moolenaarsyn match giftF         "#\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)"           contained  contains=@giftCEF    "Feedback
59*7e6a515eSBram Moolenaar
60*7e6a515eSBram Moolenaarsyn match giftGFB          "####\_.\{-}\(\_^\|[^\\]\)\ze}"                            contained  contains=giftGF      "General feedback block
61*7e6a515eSBram Moolenaarsyn match giftGF        "####\zs\_.\{-}\(\_^\|[^\\]\)\ze}"                            contained  contains=@giftCEF    "General feedback
62*7e6a515eSBram Moolenaar
63*7e6a515eSBram Moolenaar"------------------------------------------------------
64*7e6a515eSBram Moolenaar" Answer components: Other components
65*7e6a515eSBram Moolenaar
66*7e6a515eSBram Moolenaarsyn keyword giftTF      T TRUE F FALSE                                                contained
67*7e6a515eSBram Moolenaar
68*7e6a515eSBram Moolenaarsyn match   giftNum1    "[-+]\=[.0-9]\+"                                              contained                       "Something matching a number
69*7e6a515eSBram Moolenaar
70*7e6a515eSBram Moolenaarsyn match   giftNum2    "[-+]\=[.0-9]\+\s*:\s*[-+]\=[.0-9]\+"                         contained  contains=giftNum2D   "Number with error margin
71*7e6a515eSBram Moolenaarsyn match   giftNum2D                    ":"                                          contained                       "Associated delimiter
72*7e6a515eSBram Moolenaar
73*7e6a515eSBram Moolenaarsyn match   giftNum3    "[-+]\=[.0-9]\+\s*\.\.\s*[-+]\=[.0-9]\+"                      contained  contains=giftNum3D   "Number as min/max range
74*7e6a515eSBram Moolenaarsyn match   giftNum3D                    "\.\."                                       contained                       "Associated delimiter
75*7e6a515eSBram Moolenaar
76*7e6a515eSBram Moolenaarsyn match   giftWeightB    "%-*[0-9]\{1,2}\.\?[0-9]*%"                                contained  contains=giftWeight  "Weight block
77*7e6a515eSBram Moolenaarsyn match   giftWeight  "%\zs-*[0-9]\{1,2}\.\?[0-9]*\ze%"                             contained                       "Weight
78*7e6a515eSBram Moolenaar
79*7e6a515eSBram Moolenaar"-----------------------------------------------------
80*7e6a515eSBram Moolenaar" Answer choices
81*7e6a515eSBram Moolenaar
82*7e6a515eSBram Moolenaarsyn match giftWrongNum  "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(####\|}\)"                    contained  contains=@giftCEFF             "Wrong numeric choice
83*7e6a515eSBram Moolenaarsyn match giftRightNum   "=\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"             contained  contains=@giftCEFFW,@giftNums  "Right numeric choice
84*7e6a515eSBram Moolenaar
85*7e6a515eSBram Moolenaarsyn match giftWrong     "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"             contained  contains=@giftCEFFW            "Wrong choice
86*7e6a515eSBram Moolenaarsyn match giftRight      "=\zs\_.\{-}\(\ze->\|\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)\)"  contained  contains=@giftCEFFW            "Right choice
87*7e6a515eSBram Moolenaarsyn match giftMatchB                "->\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"    contained  contains=giftMatch             "Match choice block
88*7e6a515eSBram Moolenaarsyn match giftMatch              "->\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)"    contained  contains=@giftCE               "Match choice
89*7e6a515eSBram Moolenaar
90*7e6a515eSBram Moolenaar"----------------------------------------------------
91*7e6a515eSBram Moolenaar" Answer
92*7e6a515eSBram Moolenaar
93*7e6a515eSBram Moolenaarsyn match giftAnswer      "{\_.\{-}\(\_^\|[^\\]\)}"                                   contained  keepend  contains=@giftA     "General answer
94*7e6a515eSBram Moolenaarsyn match giftAnswer      "{}"                                                        contained                               "Minimal answer
95*7e6a515eSBram Moolenaar
96*7e6a515eSBram Moolenaarsyn match giftAnswerNum      "{\_[[:space:]]*#\_[^#]\_.\{-}\(\_^\|[^\\]\)}"           contained  keepend  contains=@giftANum  "Numeric answer
97*7e6a515eSBram Moolenaarsyn match giftAnswerNumD  "{\zs\_[[:space:]]*#"                                       contained                               "Associated delimiter
98*7e6a515eSBram Moolenaar
99*7e6a515eSBram Moolenaar"---------------------------------------------------
100*7e6a515eSBram Moolenaar" Question
101*7e6a515eSBram Moolenaar
102*7e6a515eSBram Moolenaar" The first pattern matches the last question at the end of the file (in case there is no empty line coming after).
103*7e6a515eSBram Moolenaar" However, it slows down parsing (and especially scrolling up), therefore it is commented out.
104*7e6a515eSBram Moolenaar
105*7e6a515eSBram Moolenaar"syn match giftQuestion  "[^{[:space:]]\_.\{-}\%$"                                               keepend  contains=@giftCEF,giftAnswer,giftAnswerNum
106*7e6a515eSBram Moolenaar syn match giftQuestion  "[^{[:space:]]\_.\{-}\n\(\s*\n\)\+"                                     keepend  contains=@giftCEF,giftAnswer,giftAnswerNum
107*7e6a515eSBram Moolenaar
108*7e6a515eSBram Moolenaar"--------------------------------------------------
109*7e6a515eSBram Moolenaar" Question name
110*7e6a515eSBram Moolenaar
111*7e6a515eSBram Moolenaarsyn match giftName       "::\_.\{-}::"                                                           contains=@giftCE,giftNameD  "Question name
112*7e6a515eSBram Moolenaarsyn match giftNameD      "::"                                                         contained                              "Associated delimiter
113*7e6a515eSBram Moolenaar
114*7e6a515eSBram Moolenaar"-------------------------------------------------
115*7e6a515eSBram Moolenaar" Category
116*7e6a515eSBram Moolenaar
117*7e6a515eSBram Moolenaarsyn match giftCategoryB  "^\s*\$CATEGORY:.*\n\+"                                                 contains=giftCategory       "Category block
118*7e6a515eSBram Moolenaarsyn match giftCategory   "^\s*\$CATEGORY:\zs.*\ze\n"                                  contained                              "Category
119*7e6a515eSBram Moolenaar
120*7e6a515eSBram Moolenaar"------------------------------------------------
121*7e6a515eSBram Moolenaar" Comments (may need to be the last entity)
122*7e6a515eSBram Moolenaar
123*7e6a515eSBram Moolenaarsyn keyword giftTodo     FIXME TODO NOTE FIX XXX                                      contained
124*7e6a515eSBram Moolenaar
125*7e6a515eSBram Moolenaarsyn match   giftIdB         "\[id:\(\\]\|[^][:cntrl:]]\)\+]"                          contained  contains=giftId             "Id block
126*7e6a515eSBram Moolenaarsyn match   giftId       "\[id:\zs\(\\]\|[^][:cntrl:]]\)\+\ze]"                       contained                              "Id
127*7e6a515eSBram Moolenaar
128*7e6a515eSBram Moolenaarsyn match   giftTagB        "\[tag:\(\\]\|[^]<>`[:cntrl:]]\)\+]"                      contained  contains=giftTag            "Tag block
129*7e6a515eSBram Moolenaarsyn match   giftTag      "\[tag:\zs\(\\]\|[^]<>`[:cntrl:]]\)\+\ze]"                   contained                              "Tag
130*7e6a515eSBram Moolenaar
131*7e6a515eSBram Moolenaarsyn match   giftComment  "^\s*//.*"                                                              contains=giftTodo,giftIdB,giftTagB
132*7e6a515eSBram Moolenaar
133*7e6a515eSBram Moolenaar"-----------------------------------------------
134*7e6a515eSBram Moolenaar" Clusters
135*7e6a515eSBram Moolenaar
136*7e6a515eSBram Moolenaar"Comments and entities (to be escaped)
137*7e6a515eSBram Moolenaarsyn cluster giftCE    contains=giftComment,giftS,giftES,giftEN,giftH,giftEH
138*7e6a515eSBram Moolenaar
139*7e6a515eSBram Moolenaar"The above plus format
140*7e6a515eSBram Moolenaarsyn cluster giftCEF   contains=@giftCE,giftFormat
141*7e6a515eSBram Moolenaar
142*7e6a515eSBram Moolenaar"The above plus feedback block
143*7e6a515eSBram Moolenaarsyn cluster giftCEFF  contains=@giftCEF,giftFB
144*7e6a515eSBram Moolenaar
145*7e6a515eSBram Moolenaar"The above plus weight block
146*7e6a515eSBram Moolenaarsyn cluster giftCEFFW contains=@giftCEFF,giftWeightB
147*7e6a515eSBram Moolenaar
148*7e6a515eSBram Moolenaar"Possible numerical representations
149*7e6a515eSBram Moolenaarsyn cluster giftNums  contains=giftNum1,giftNum2,giftNum3
150*7e6a515eSBram Moolenaar
151*7e6a515eSBram Moolenaar"Possible contents of answers
152*7e6a515eSBram Moolenaarsyn cluster giftA     contains=giftComment,giftTF,giftWrong,giftRight,giftMatchB,giftFB,giftGFB
153*7e6a515eSBram Moolenaar
154*7e6a515eSBram Moolenaar"Possible contents of numerical answers
155*7e6a515eSBram Moolenaarsyn cluster giftANum  contains=giftAnswerNumD,giftComment,@giftNums,giftWrongNum,giftRightNum,giftFB,giftGFB
156*7e6a515eSBram Moolenaar
157*7e6a515eSBram Moolenaar"-----------------------------------------------
158*7e6a515eSBram Moolenaar
159*7e6a515eSBram Moolenaarlet b:current_syntax = "gift"
160*7e6a515eSBram Moolenaar
161*7e6a515eSBram Moolenaar"-----------------------------------------------
162*7e6a515eSBram Moolenaar
163*7e6a515eSBram Moolenaarhi Conceal   ctermbg=NONE ctermfg=Blue       guibg=NONE guifg=Blue
164*7e6a515eSBram Moolenaarhi Feedback  ctermbg=NONE ctermfg=DarkCyan   guibg=NONE guifg=DarkCyan
165*7e6a515eSBram Moolenaarhi GFeedback ctermbg=NONE ctermfg=DarkGreen  guibg=NONE guifg=DarkGreen
166*7e6a515eSBram Moolenaarhi WeightB   ctermbg=NONE ctermfg=DarkYellow guibg=NONE guifg=DarkYellow
167*7e6a515eSBram Moolenaar
168*7e6a515eSBram Moolenaar"-----------------------------------------------
169*7e6a515eSBram Moolenaar
170*7e6a515eSBram Moolenaarhi def link giftS          Error
171*7e6a515eSBram Moolenaarhi def link giftES         Conceal
172*7e6a515eSBram Moolenaarhi def link giftEN         Conceal
173*7e6a515eSBram Moolenaarhi def link giftFormat     LineNr
174*7e6a515eSBram Moolenaar
175*7e6a515eSBram Moolenaarhi def link giftH          Error
176*7e6a515eSBram Moolenaarhi def link giftEH         Conceal
177*7e6a515eSBram Moolenaar
178*7e6a515eSBram Moolenaarhi def link giftFB         PreProc
179*7e6a515eSBram Moolenaarhi def link giftF          Feedback
180*7e6a515eSBram Moolenaarhi def link giftGFB        Title
181*7e6a515eSBram Moolenaarhi def link giftGF         GFeedback
182*7e6a515eSBram Moolenaar
183*7e6a515eSBram Moolenaarhi def link giftTF         Question
184*7e6a515eSBram Moolenaarhi def link giftNum1       Question
185*7e6a515eSBram Moolenaarhi def link giftNum2       Question
186*7e6a515eSBram Moolenaarhi def link giftNum2D      Special
187*7e6a515eSBram Moolenaarhi def link giftNum3       Question
188*7e6a515eSBram Moolenaarhi def link giftNum3D      Special
189*7e6a515eSBram Moolenaarhi def link giftWeightB    WeightB
190*7e6a515eSBram Moolenaarhi def link giftWeight     Identifier
191*7e6a515eSBram Moolenaar
192*7e6a515eSBram Moolenaarhi def link giftWrongNum   Constant
193*7e6a515eSBram Moolenaarhi def link giftRightNum   Question
194*7e6a515eSBram Moolenaarhi def link giftWrong      Constant
195*7e6a515eSBram Moolenaarhi def link giftRight      Question
196*7e6a515eSBram Moolenaarhi def link giftMatchB     ModeMsg
197*7e6a515eSBram Moolenaarhi def link giftMatch      Constant
198*7e6a515eSBram Moolenaar
199*7e6a515eSBram Moolenaarhi def link giftAnswer     MoreMsg
200*7e6a515eSBram Moolenaarhi def link giftAnswerNum  MoreMsg
201*7e6a515eSBram Moolenaarhi def link giftAnswerNumD Identifier
202*7e6a515eSBram Moolenaar
203*7e6a515eSBram Moolenaarhi def link giftQuestion   Identifier
204*7e6a515eSBram Moolenaar
205*7e6a515eSBram Moolenaarhi def link giftName       PreProc
206*7e6a515eSBram Moolenaarhi def link giftNameD      Directory
207*7e6a515eSBram Moolenaar
208*7e6a515eSBram Moolenaarhi def link giftCategoryB  LineNr
209*7e6a515eSBram Moolenaarhi def link giftCategory   Directory
210*7e6a515eSBram Moolenaar
211*7e6a515eSBram Moolenaarhi def link giftTodo       Todo
212*7e6a515eSBram Moolenaarhi def link giftIdB        LineNr
213*7e6a515eSBram Moolenaarhi def link giftId         Title
214*7e6a515eSBram Moolenaarhi def link giftTagB       LineNr
215*7e6a515eSBram Moolenaarhi def link giftTag        Constant
216*7e6a515eSBram Moolenaarhi def link giftComment    Comment
217