blob: 58b279b029d62864ae7bf7296a519a2257c9d33b [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: PROLOG
Bram Moolenaar06fe74a2019-08-31 16:20:32 +02003" Maintainer: Anton Kochkov <anton.kochkov@gmail.com>
4" Last Change: 2019 Aug 29
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
6" There are two sets of highlighting in here:
7" If the "prolog_highlighting_clean" variable exists, it is rather sparse.
8" Otherwise you get more highlighting.
Bram Moolenaar06fe74a2019-08-31 16:20:32 +02009"
10" You can also set the "prolog_highlighting_no_keyword" variable. If set,
11" keywords will not be highlighted.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020013" quit when a syntax file was already loaded
14if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000015 finish
16endif
17
18" Prolog is case sensitive.
19syn case match
20
21" Very simple highlighting for comments, clause heads and
22" character codes. It respects prolog strings and atoms.
23
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020024syn region prologCComment start=+/\*+ end=+\*/+
25syn match prologComment +%.*+
Bram Moolenaar071d4272004-06-13 20:20:40 +000026
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020027if !exists("prolog_highlighting_no_keyword")
28 syn keyword prologKeyword module meta_predicate multifile dynamic
29endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020030syn match prologCharCode +0'\\\=.+
31syn region prologString start=+"+ skip=+\\\\\|\\"+ end=+"+
32syn region prologAtom start=+'+ skip=+\\\\\|\\'+ end=+'+
33syn region prologClause matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause
Bram Moolenaar071d4272004-06-13 20:20:40 +000034
35if !exists("prolog_highlighting_clean")
36
37 " some keywords
38 " some common predicates are also highlighted as keywords
39 " is there a better solution?
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020040 if !exists("prolog_highlighting_no_keyword")
41 syn keyword prologKeyword abolish current_output peek_code
42 syn keyword prologKeyword append current_predicate put_byte
43 syn keyword prologKeyword arg current_prolog_flag put_char
44 syn keyword prologKeyword asserta fail put_code
45 syn keyword prologKeyword assertz findall read
46 syn keyword prologKeyword at_end_of_stream float read_term
47 syn keyword prologKeyword atom flush_output repeat
48 syn keyword prologKeyword atom_chars functor retract
49 syn keyword prologKeyword atom_codes get_byte set_input
50 syn keyword prologKeyword atom_concat get_char set_output
51 syn keyword prologKeyword atom_length get_code set_prolog_flag
52 syn keyword prologKeyword atomic halt set_stream_position
53 syn keyword prologKeyword bagof integer setof
54 syn keyword prologKeyword call is stream_property
55 syn keyword prologKeyword catch nl sub_atom
56 syn keyword prologKeyword char_code nonvar throw
57 syn keyword prologKeyword char_conversion number true
58 syn keyword prologKeyword clause number_chars unify_with_occurs_check
59 syn keyword prologKeyword close number_codes var
60 syn keyword prologKeyword compound once write
61 syn keyword prologKeyword copy_term op write_canonical
62 syn keyword prologKeyword current_char_conversion open write_term
63 syn keyword prologKeyword current_input peek_byte writeq
64 syn keyword prologKeyword current_op peek_char
65 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000066
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020067 syn match prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|=\.\.\|<\|>\|="
Bram Moolenaar071d4272004-06-13 20:20:40 +000068 syn match prologAsIs "===\|\\===\|<=\|=>"
69
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020070 syn match prologNumber "\<\d*\>'\@!"
71 syn match prologNumber "\<0[xX]\x*\>'\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +000072 syn match prologCommentError "\*/"
73 syn match prologSpecialCharacter ";"
74 syn match prologSpecialCharacter "!"
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020075 syn match prologSpecialCharacter ":-"
76 syn match prologSpecialCharacter "-->"
77 syn match prologQuestion "?-.*\." contains=prologNumber
Bram Moolenaar071d4272004-06-13 20:20:40 +000078
79
80endif
81
Bram Moolenaar3918c952005-03-15 22:34:55 +000082syn sync maxlines=50
Bram Moolenaar071d4272004-06-13 20:20:40 +000083
84
85" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020086" Only when an item doesn't have highlighting yet
Bram Moolenaar071d4272004-06-13 20:20:40 +000087
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020088" The default highlighting.
Bram Moolenaarf37506f2016-08-31 22:22:10 +020089hi def link prologComment Comment
90hi def link prologCComment Comment
91hi def link prologCharCode Special
Bram Moolenaar071d4272004-06-13 20:20:40 +000092
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020093if exists ("prolog_highlighting_clean")
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
Bram Moolenaarf37506f2016-08-31 22:22:10 +020095hi def link prologKeyword Statement
96hi def link prologClauseHead Statement
97hi def link prologClause Normal
Bram Moolenaar071d4272004-06-13 20:20:40 +000098
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020099else
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200101hi def link prologKeyword Keyword
102hi def link prologClauseHead Constant
103hi def link prologClause Normal
104hi def link prologQuestion PreProc
105hi def link prologSpecialCharacter Special
106hi def link prologNumber Number
107hi def link prologAsIs Normal
108hi def link prologCommentError Error
109hi def link prologAtom String
110hi def link prologString String
111hi def link prologOperator Operator
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112
Bram Moolenaar071d4272004-06-13 20:20:40 +0000113endif
114
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200115
Bram Moolenaar071d4272004-06-13 20:20:40 +0000116let b:current_syntax = "prolog"
117
118" vim: ts=8