Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New & improved Pike syntax colouring. #2558

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion runtime/filetype.vim
Expand Up @@ -239,6 +239,7 @@ endif

" C or lpc
au BufNewFile,BufRead *.c call dist#ft#FTlpc()
au BufNewFile,BufRead *.lpc,*.ulpc setf lpc

" Calendar
au BufNewFile,BufRead calendar setf calendar
Expand Down Expand Up @@ -1153,7 +1154,8 @@ au BufNewFile,BufRead *.pod6 setf pod6
au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php

" Pike
au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike
au BufNewFile,BufRead *.pike,*.pmod setf pike
au BufNewFile,BufRead *.cmod setf cmod

" Pinfo config
au BufNewFile,BufRead */etc/pinforc,*/.pinforc setf pinfo
Expand Down
4 changes: 4 additions & 0 deletions runtime/scripts.vim
Expand Up @@ -100,6 +100,10 @@ if s:line1 =~# "^#!"
elseif s:name =~# 'make\>'
set ft=make

" Pike
elseif s:name =~# '^pike\%(\>\|[0-9]\)'
set ft=pike

" Lua
elseif s:name =~# 'lua'
set ft=lua
Expand Down
101 changes: 101 additions & 0 deletions runtime/syntax/autodoc.vim
@@ -0,0 +1,101 @@
" Vim syntax file
" Language: Autodoc
" Maintainer: Stephen R. van den Berg <srb@cuci.nl>
" Last Change: 2018 Jan 23
" Version: 2.9
" Remark: Included by pike.vim, cmod.vim and optionally c.vim
" Remark: In order to make c.vim use it, set: c_autodoc

" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
finish
endif

let s:cpo_save = &cpo
set cpo&vim

syn case match

" A bunch of useful autodoc keywords
syn keyword autodocStatement contained appears belongs global
syn keyword autodocStatement contained decl directive inherit
syn keyword autodocStatement contained deprecated obsolete bugs
syn keyword autodocStatement contained copyright example fixme note param returns
syn keyword autodocStatement contained seealso thanks throws constant
syn keyword autodocStatement contained member index elem
syn keyword autodocStatement contained value type item

syn keyword autodocRegion contained enum mapping code multiset array
syn keyword autodocRegion contained int string section mixed ol ul dl
syn keyword autodocRegion contained class module namespace
syn keyword autodocRegion contained endenum endmapping endcode endmultiset
syn keyword autodocRegion contained endarray endint endstring endsection
syn keyword autodocRegion contained endmixed endol endul enddl
syn keyword autodocRegion contained endclass endmodule endnamespace

syn keyword autodocIgnore contained ignore endignore

syn keyword autodocStatAcc contained b i u tt url pre sub sup
syn keyword autodocStatAcc contained ref rfc xml dl expr image

syn keyword autodocTodo contained TODO FIXME XXX

syn match autodocLineStart display "\(//\|/\?\*\)\@2<=!"
syn match autodocWords "[^!@{}[\]]\+" display contains=@Spell

syn match autodocLink "@\[[^[\]]\+]"hs=s+2,he=e-1 display contains=autodocLead
syn match autodocAtStmt "@[a-z]\+\%(\s\|$\)\@="hs=s+1 display contains=autodocStatement,autodocIgnore,autodocLead,autodocRegion

" Due to limitations of the matching algorithm, we cannot highlight
" nested autodocNStmtAcc structures correctly
syn region autodocNStmtAcc start="@[a-z]\+{" end="@}" contains=autodocStatAcc,autodocLead keepend

syn match autodocUrl contained display ".\+"
syn region autodocAtUrlAcc start="{"ms=s+1 end="@}"he=e-1,me=e-2 contained display contains=autodocUrl,autodocLead keepend
syn region autodocNUrlAcc start="@url{" end="@}" contains=autodocStatAcc,autodocAtUrlAcc,autodocLead transparent

syn match autodocSpecial "@@" display
syn match autodocLead "@" display contained

"when wanted, highlight trailing white space
if exists("c_space_errors")
if !exists("c_no_trail_space_error")
syn match autodocSpaceError display excludenl "\s\+$"
endif
if !exists("c_no_tab_space_error")
syn match autodocSpaceError display " \+\t"me=e-1
endif
endif

if exists("c_minlines")
let b:c_minlines = c_minlines
else
if !exists("c_no_if0")
let b:c_minlines = 50 " #if 0 constructs can be long
else
let b:c_minlines = 15 " mostly for () constructs
endif
endif
exec "syn sync ccomment autodocComment minlines=" . b:c_minlines

" Define the default highlighting.
" Only used when an item doesn't have highlighting yet
hi def link autodocStatement Statement
hi def link autodocStatAcc Statement
hi def link autodocRegion Structure
hi def link autodocAtStmt Error
hi def link autodocNStmtAcc Identifier
hi def link autodocLink Type
hi def link autodocTodo Todo
hi def link autodocSpaceError Error
hi def link autodocLineStart SpecialComment
hi def link autodocSpecial SpecialChar
hi def link autodocUrl Underlined
hi def link autodocLead Statement
hi def link autodocIgnore Delimiter

let b:current_syntax = "autodoc"

let &cpo = s:cpo_save
unlet s:cpo_save
" vim: ts=8
15 changes: 15 additions & 0 deletions runtime/syntax/c.vim
Expand Up @@ -13,6 +13,14 @@ set cpo&vim

let s:ft = matchstr(&ft, '^\([^.]\)\+')

" Optional embedded Autodoc parsing
" To enable it add: let g:c_autodoc=1
" to your .vimrc
if exists("c_autodoc")
syn include @cAutodoc <sfile>:p:h/autodoc.vim
unlet b:current_syntax
endif

" A bunch of useful C keywords
syn keyword cStatement goto break return continue asm
syn keyword cLabel case default
Expand Down Expand Up @@ -377,6 +385,13 @@ syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInP
syn region cDefine start="^\s*\zs\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
syn region cPreProc start="^\s*\zs\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell

" Optional embedded Autodoc parsing
if exists("c_autodoc")
syn match cAutodocReal display contained "\%(//\|[/ \t\v]\*\|^\*\)\@2<=!.*" contains=@cAutodoc containedin=cComment,cCommentL
syn cluster cCommentGroup add=cAutodocReal
syn cluster cPreProcGroup add=cAutodocReal
endif

" Highlight User Labels
syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
if s:ft ==# 'c' || exists("cpp_no_cpp11")
Expand Down
144 changes: 144 additions & 0 deletions runtime/syntax/cmod.vim
@@ -0,0 +1,144 @@
" Vim syntax file
" Language: Cmod
" Current Maintainer: Stephen R. van den Berg <srb@cuci.nl>
" Last Change: 2018 Jan 23
" Version: 2.9
" Remark: Is used to edit Cmod files for Pike development.
" Remark: Includes a highlighter for any embedded Autodoc format.

" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif

let s:cpo_save = &cpo
set cpo&vim

" Read the C syntax to start with
runtime! syntax/c.vim
unlet b:current_syntax

if !exists("c_autodoc")
" For embedded Autodoc documentation
syn include @cmodAutodoc <sfile>:p:h/autodoc.vim
unlet b:current_syntax
endif

" Supports rotating amongst several same-level preprocessor conditionals
packadd! matchit
let b:match_words = "({:}\\@1<=),^\s*#\s*\%(if\%(n\?def\)\|else\|el\%(se\)\?if\|endif\)\>"

" Cmod extensions
syn keyword cmodStatement __INIT INIT EXIT GC_RECURSE GC_CHECK
syn keyword cmodStatement EXTRA OPTIMIZE RETURN
syn keyword cmodStatement ADD_EFUN ADD_EFUN2 ADD_FUNCTION
syn keyword cmodStatement MK_STRING MK_STRING_SVALUE CONSTANT_STRLEN

syn keyword cmodStatement SET_SVAL pop_n_elems pop_stack
syn keyword cmodStatement SIMPLE_ARG_TYPE_ERROR Pike_sp Pike_fp MKPCHARP
syn keyword cmodStatement SET_SVAL_TYPE REF_MAKE_CONST_STRING INC_PCHARP
syn keyword cmodStatement PTR_FROM_INT INHERIT_FROM_PTR
syn keyword cmodStatement DECLARE_CYCLIC BEGIN_CYCLIC END_CYCLIC
syn keyword cmodStatement UPDATE_LOCATION UNSAFE_IS_ZERO SAFE_IS_ZERO
syn keyword cmodStatement MKPCHARP_STR APPLY_MASTER current_storage
syn keyword cmodStatement PIKE_MAP_VARIABLE size_shift
syn keyword cmodStatement THREADS_ALLOW THREADS_DISALLOW

syn keyword cmodStatement add_integer_constant ref_push_object
syn keyword cmodStatement push_string apply_svalue free_svalue
syn keyword cmodStatement get_inherit_storage get_storage
syn keyword cmodStatement make_shared_binary_string push_int64
syn keyword cmodStatement begin_shared_string end_shared_string
syn keyword cmodStatement add_ref fast_clone_object clone_object
syn keyword cmodStatement push_undefined push_int ref_push_string
syn keyword cmodStatement free_string push_ulongest free_object
syn keyword cmodStatement convert_stack_top_to_bignum push_array
syn keyword cmodStatement push_object reduce_stack_top_bignum
syn keyword cmodStatement push_static_text apply_current
syn keyword cmodStatement assign_svalue free_program destruct_object
syn keyword cmodStatement start_new_program low_inherit stack_swap
syn keyword cmodStatement generic_error_program end_program
syn keyword cmodStatement free_array apply_external copy_mapping
syn keyword cmodStatement push_constant_text ref_push_mapping
syn keyword cmodStatement mapping_insert mapping_string_insert_string
syn keyword cmodStatement f_aggregate_mapping f_aggregate apply
syn keyword cmodStatement push_mapping push_svalue low_mapping_lookup
syn keyword cmodStatement assign_svalues_no_free f_add
syn keyword cmodStatement push_empty_string stack_dup assign_lvalue
syn keyword cmodStatement low_mapping_string_lookup allocate_mapping
syn keyword cmodStatement copy_shared_string make_shared_binary_string0
syn keyword cmodStatement f_call_function f_index f_utf8_to_string
syn keyword cmodStatement finish_string_builder init_string_builder
syn keyword cmodStatement reset_string_builder free_string_builder
syn keyword cmodStatement string_builder_putchar get_all_args
syn keyword cmodStatement add_shared_strings check_all_args
syn keyword cmodStatement do_inherit add_string_constant
syn keyword cmodStatement add_program_constant set_init_callback
syn keyword cmodStatement simple_mapping_string_lookup
syn keyword cmodStatement f_sprintf push_text string_has_null
syn keyword cmodStatement end_and_resize_shared_string

syn keyword cmodStatement args sp

syn keyword cmodStatement free

syn keyword cmodConstant ID_PROTECTED ID_FINAL PIKE_DEBUG
syn keyword cmodConstant NUMBER_NUMBER
syn keyword cmodConstant PIKE_T_INT PIKE_T_STRING PIKE_T_ARRAY
syn keyword cmodConstant PIKE_T_MULTISET PIKE_T_OBJECT PIKE_T_MAPPING
syn keyword cmodConstant NUMBER_UNDEFINED PIKE_T_PROGRAM PIKE_T_FUNCTION
syn keyword cmodConstant T_OBJECT T_STRING T_ARRAY T_MAPPING

syn keyword cmodException SET_ONERROR UNSET_ONERROR ONERROR
syn keyword cmodException CALL_AND_UNSET_ONERROR

syn keyword cmodDebug Pike_fatal Pike_error check_stack

syn keyword cmodAccess public protected private INHERIT
syn keyword cmodAccess CTYPE CVAR PIKEVAR PIKEFUN

syn keyword cmodModifier efun export flags optflags optfunc
syn keyword cmodModifier type rawtype errname name c_name prototype
syn keyword cmodModifier program_flags gc_trivial PMOD_EXPORT
syn keyword cmodModifier ATTRIBUTE noclone noinline
syn keyword cmodModifier tOr tFuncV tInt tMix tVoid tStr tMap tPrg
syn keyword cmodModifier tSetvar tArr tMult tMultiset
syn keyword cmodModifier tArray tMapping tString tSetvar tVar

syn keyword cmodType bool mapping string multiset array mixed
syn keyword cmodType object function program auto svalue
syn keyword cmodType bignum longest zero pike_string
syn keyword cmodType this this_program THIS INT_TYPE INT64 INT32
syn keyword cmodType p_wchar2 PCHARP p_wchar1 p_wchar0 MP_INT

syn keyword cmodOperator _destruct create __hash _sizeof _indices _values
syn keyword cmodOperator _is_type _sprintf _equal _m_delete _get_iterator
syn keyword cmodOperator _search _types _serialize _deserialize
syn keyword cmodOperator _size_object _random _sqrt TYPEOF SUBTYPEOF
syn keyword cmodOperator LIKELY UNLIKELY

syn keyword cmodStructure DECLARATIONS PIKECLASS DECLARE_STORAGE

if !exists("c_autodoc")
syn match cmodAutodocReal display contained "\%(//\|[/ \t\v]\*\|^\*\)\@2<=!.*" contains=@cmodAutodoc containedin=cComment,cCommentL
syn cluster cCommentGroup add=cmodAutodocReal
syn cluster cPreProcGroup add=cmodAutodocReal
endif

" Default highlighting
hi def link cmodAccess Statement
hi def link cmodOperator Operator
hi def link cmodStatement Statement
hi def link cmodConstant Constant
hi def link cmodModifier Type
hi def link cmodType Type
hi def link cmodStorageClass StorageClass
hi def link cmodStructure Structure
hi def link cmodException Exception
hi def link cmodDebug Debug

let b:current_syntax = "cmod"

let &cpo = s:cpo_save
unlet s:cpo_save
" vim: ts=8