neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

gift.vim (10239B)


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