xref: /vim-8.2.3635/runtime/syntax/prolog.vim (revision 82be4849)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:    PROLOG
306fe74aeSBram Moolenaar" Maintainer:  Anton Kochkov <[email protected]>
4*82be4849SBram Moolenaar" Last Change: 2021 Jan 05
5071d4279SBram Moolenaar
6071d4279SBram Moolenaar" There are two sets of highlighting in here:
7071d4279SBram Moolenaar" If the "prolog_highlighting_clean" variable exists, it is rather sparse.
8071d4279SBram Moolenaar" Otherwise you get more highlighting.
906fe74aeSBram Moolenaar"
1006fe74aeSBram Moolenaar" You can also set the "prolog_highlighting_no_keyword" variable. If set,
1106fe74aeSBram Moolenaar" keywords will not be highlighted.
12071d4279SBram Moolenaar
1389bcfda6SBram Moolenaar" quit when a syntax file was already loaded
1489bcfda6SBram Moolenaarif exists("b:current_syntax")
15071d4279SBram Moolenaar  finish
16071d4279SBram Moolenaarendif
17071d4279SBram Moolenaar
18071d4279SBram Moolenaar" Prolog is case sensitive.
19071d4279SBram Moolenaarsyn case match
20071d4279SBram Moolenaar
21071d4279SBram Moolenaar" Very simple highlighting for comments, clause heads and
22071d4279SBram Moolenaar" character codes.  It respects prolog strings and atoms.
23071d4279SBram Moolenaar
24*82be4849SBram Moolenaarsyn region   prologCComment start=+/\*+ end=+\*/+ contains=@Spell
25*82be4849SBram Moolenaarsyn match    prologComment  +%.*+ contains=@Spell
26071d4279SBram Moolenaar
2706fe74aeSBram Moolenaarif !exists("prolog_highlighting_no_keyword")
28071d4279SBram Moolenaar  syn keyword  prologKeyword  module meta_predicate multifile dynamic
2906fe74aeSBram Moolenaarendif
30071d4279SBram Moolenaarsyn match    prologCharCode +0'\\\=.+
31*82be4849SBram Moolenaarsyn region   prologString   start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell
323577c6faSBram Moolenaarsyn region   prologAtom     start=+'+ skip=+\\\\\|\\'+ end=+'+
33*82be4849SBram Moolenaarsyn region   prologClause   matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause contains=@NoSpell
34071d4279SBram Moolenaar
35071d4279SBram Moolenaarif !exists("prolog_highlighting_clean")
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar  " some keywords
38071d4279SBram Moolenaar  " some common predicates are also highlighted as keywords
39071d4279SBram Moolenaar  " is there a better solution?
4006fe74aeSBram Moolenaar  if !exists("prolog_highlighting_no_keyword")
41071d4279SBram Moolenaar    syn keyword prologKeyword   abolish current_output  peek_code
42071d4279SBram Moolenaar    syn keyword prologKeyword   append  current_predicate       put_byte
43071d4279SBram Moolenaar    syn keyword prologKeyword   arg     current_prolog_flag     put_char
44071d4279SBram Moolenaar    syn keyword prologKeyword   asserta fail    put_code
45071d4279SBram Moolenaar    syn keyword prologKeyword   assertz findall read
46071d4279SBram Moolenaar    syn keyword prologKeyword   at_end_of_stream        float   read_term
47071d4279SBram Moolenaar    syn keyword prologKeyword   atom    flush_output    repeat
48071d4279SBram Moolenaar    syn keyword prologKeyword   atom_chars      functor retract
49071d4279SBram Moolenaar    syn keyword prologKeyword   atom_codes      get_byte        set_input
50071d4279SBram Moolenaar    syn keyword prologKeyword   atom_concat     get_char        set_output
51071d4279SBram Moolenaar    syn keyword prologKeyword   atom_length     get_code        set_prolog_flag
52071d4279SBram Moolenaar    syn keyword prologKeyword   atomic  halt    set_stream_position
53071d4279SBram Moolenaar    syn keyword prologKeyword   bagof   integer setof
54071d4279SBram Moolenaar    syn keyword prologKeyword   call    is      stream_property
55071d4279SBram Moolenaar    syn keyword prologKeyword   catch   nl      sub_atom
56071d4279SBram Moolenaar    syn keyword prologKeyword   char_code       nonvar  throw
57071d4279SBram Moolenaar    syn keyword prologKeyword   char_conversion number  true
58071d4279SBram Moolenaar    syn keyword prologKeyword   clause  number_chars    unify_with_occurs_check
59071d4279SBram Moolenaar    syn keyword prologKeyword   close   number_codes    var
60071d4279SBram Moolenaar    syn keyword prologKeyword   compound        once    write
61071d4279SBram Moolenaar    syn keyword prologKeyword   copy_term       op      write_canonical
62071d4279SBram Moolenaar    syn keyword prologKeyword   current_char_conversion open    write_term
63071d4279SBram Moolenaar    syn keyword prologKeyword   current_input   peek_byte       writeq
64071d4279SBram Moolenaar    syn keyword prologKeyword   current_op      peek_char
6506fe74aeSBram Moolenaar  endif
66071d4279SBram Moolenaar
6706fe74aeSBram Moolenaar  syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|=\.\.\|<\|>\|="
68071d4279SBram Moolenaar  syn match   prologAsIs     "===\|\\===\|<=\|=>"
69071d4279SBram Moolenaar
7006fe74aeSBram Moolenaar  syn match   prologNumber            "\<\d*\>'\@!"
7106fe74aeSBram Moolenaar  syn match   prologNumber            "\<0[xX]\x*\>'\@!"
72071d4279SBram Moolenaar  syn match   prologCommentError      "\*/"
73071d4279SBram Moolenaar  syn match   prologSpecialCharacter  ";"
74071d4279SBram Moolenaar  syn match   prologSpecialCharacter  "!"
75543b7ef7SBram Moolenaar  syn match   prologSpecialCharacter  ":-"
76543b7ef7SBram Moolenaar  syn match   prologSpecialCharacter  "-->"
77071d4279SBram Moolenaar  syn match   prologQuestion          "?-.*\."  contains=prologNumber
78071d4279SBram Moolenaar
79071d4279SBram Moolenaar
80071d4279SBram Moolenaarendif
81071d4279SBram Moolenaar
823918c950SBram Moolenaarsyn sync maxlines=50
83071d4279SBram Moolenaar
84071d4279SBram Moolenaar
85071d4279SBram Moolenaar" Define the default highlighting.
8689bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
87071d4279SBram Moolenaar
88071d4279SBram Moolenaar" The default highlighting.
89f37506f6SBram Moolenaarhi def link prologComment          Comment
90f37506f6SBram Moolenaarhi def link prologCComment         Comment
91f37506f6SBram Moolenaarhi def link prologCharCode         Special
92071d4279SBram Moolenaar
93071d4279SBram Moolenaarif exists ("prolog_highlighting_clean")
94071d4279SBram Moolenaar
95f37506f6SBram Moolenaarhi def link prologKeyword        Statement
96f37506f6SBram Moolenaarhi def link prologClauseHead     Statement
97f37506f6SBram Moolenaarhi def link prologClause Normal
98071d4279SBram Moolenaar
99071d4279SBram Moolenaarelse
100071d4279SBram Moolenaar
101f37506f6SBram Moolenaarhi def link prologKeyword        Keyword
102f37506f6SBram Moolenaarhi def link prologClauseHead     Constant
103f37506f6SBram Moolenaarhi def link prologClause Normal
104f37506f6SBram Moolenaarhi def link prologQuestion       PreProc
105f37506f6SBram Moolenaarhi def link prologSpecialCharacter Special
106f37506f6SBram Moolenaarhi def link prologNumber         Number
107f37506f6SBram Moolenaarhi def link prologAsIs           Normal
108f37506f6SBram Moolenaarhi def link prologCommentError   Error
109f37506f6SBram Moolenaarhi def link prologAtom           String
110f37506f6SBram Moolenaarhi def link prologString         String
111f37506f6SBram Moolenaarhi def link prologOperator       Operator
112071d4279SBram Moolenaar
113071d4279SBram Moolenaarendif
114071d4279SBram Moolenaar
115071d4279SBram Moolenaar
116071d4279SBram Moolenaarlet b:current_syntax = "prolog"
117071d4279SBram Moolenaar
118071d4279SBram Moolenaar" vim: ts=8
119