summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rwxr-xr-xbuild1
-rw-r--r--compiler/cryptol.vim24
-rw-r--r--ftdetect/polyglot.vim7
-rw-r--r--ftplugin/cryptol/folding.vim50
-rw-r--r--syntax/cryptol.vim114
6 files changed, 197 insertions, 0 deletions
diff --git a/README.md b/README.md
index fc164c23..57bca0c0 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo
- [cjsx](https://github.com/mtscout6/vim-cjsx) (ftdetect, syntax, ftplugin)
- [clojure](https://github.com/guns/vim-clojure-static) (syntax, indent, autoload, ftplugin, ftdetect)
- [coffee-script](https://github.com/kchmck/vim-coffee-script) (syntax, indent, compiler, autoload, ftplugin, ftdetect)
+- [cryptol](https://github.com/victoredwardocallaghan/cryptol.vim) (syntax, compiler, ftplugin, ftdetect)
- [cql](https://github.com/elubow/cql-vim) (syntax, ftdetect)
- [css](https://github.com/JulesWang/css.vim) (syntax)
- [cucumber](https://github.com/tpope/vim-cucumber) (syntax, indent, compiler, ftplugin, ftdetect)
diff --git a/build b/build
index d6a87035..445208ea 100755
--- a/build
+++ b/build
@@ -104,6 +104,7 @@ PACKS="
cjsx:mtscout6/vim-cjsx
clojure:guns/vim-clojure-static
coffee-script:kchmck/vim-coffee-script
+ cryptol:victoredwardocallaghan/cryptol.vim
cql:elubow/cql-vim
css:JulesWang/css.vim
cucumber:tpope/vim-cucumber
diff --git a/compiler/cryptol.vim b/compiler/cryptol.vim
new file mode 100644
index 00000000..1b512365
--- /dev/null
+++ b/compiler/cryptol.vim
@@ -0,0 +1,24 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
+
+" Vim compiler file
+" Compiler: Cryptol version 1.8.19-academic Compiler
+" Maintainer: Edward O'Callaghan <victoredwardocallaghan AT gmail DOT com>
+" Latest Revision: 25-Apr-2013
+
+if exists("current_compiler")
+ finish
+endif
+let current_compiler = "cryptol"
+
+if exists(":CompilerSet") != 2
+ command = -nargs =* CompilerSet setlocal <args>
+endif
+
+" TODO: Work out errorformat for the Cryptol compiler, see
+" :help errorformat
+CompilerSet errorformat& " use the default 'errorformat'
+
+" "%<" means the current file name without extension.
+CompilerSet makeprg=cryptol\ -o\ %<\ %
+
+endif
diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim
index caa90091..1b7746d4 100644
--- a/ftdetect/polyglot.vim
+++ b/ftdetect/polyglot.vim
@@ -53,6 +53,13 @@ if has("autocmd")
au BufNewFile,BufRead *.cql set filetype=cql
endif
endif
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
+
+au! BufRead,BufNewFile *.cry set filetype=cryptol
+au! BufRead,BufNewFile *.cyl set filetype=cryptol
+au! BufRead,BufNewFile *.lcry set filetype=cryptol
+au! BufRead,BufNewFile *.lcyl set filetype=cryptol
+endif
if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cucumber') == -1
autocmd BufNewFile,BufReadPost *.feature,*.story set filetype=cucumber
diff --git a/ftplugin/cryptol/folding.vim b/ftplugin/cryptol/folding.vim
new file mode 100644
index 00000000..2b8ee5a3
--- /dev/null
+++ b/ftplugin/cryptol/folding.vim
@@ -0,0 +1,50 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
+
+" Copyright © 2013 Edward O'Callaghan. All Rights Reserved.
+
+"setlocal foldmethod=indent
+"setlocal foldignore=
+
+setlocal foldmethod=expr
+setlocal foldexpr=GetPotionFold(v:lnum)
+
+" Helper function: To tackle non-blank lines,
+" wish to know their indentation level
+function! IndentLevel(lnum)
+ return indent(a:lnum) / &shiftwidth
+endfunction
+
+" Helper function: .
+function! NextNonBlankLine(lnum)
+ let numlines = line('$')
+ let current = a:lnum + 1
+
+ while current <= numlines
+ if getline(current) =~? '\v\S'
+ return current
+ endif
+
+ let current += 1
+ endwhile
+
+ return -2
+endfunction
+
+function! GetPotionFold(lnum)
+ if getline(a:lnum) =~? '\v^\s*$'
+ return '-1'
+ endif
+
+ let this_indent = IndentLevel(a:lnum)
+ let next_indent = IndentLevel(NextNonBlankLine(a:lnum))
+
+ if next_indent == this_indent
+ return this_indent
+ elseif next_indent < this_indent
+ return this_indent
+ elseif next_indent > this_indent
+ return '>' . next_indent
+ endif
+endfunction
+
+endif
diff --git a/syntax/cryptol.vim b/syntax/cryptol.vim
new file mode 100644
index 00000000..587b5bb8
--- /dev/null
+++ b/syntax/cryptol.vim
@@ -0,0 +1,114 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'cryptol') == -1
+
+" Vim syntax file
+" Language: Cryptol
+" Maintainer: Fergus Henderson
+" Last Change: Thu Feb 10 13:14:24 PST 2005
+"
+
+" Remove any old syntax stuff hanging around
+if version < 600
+ syn clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+set expandtab
+set list lcs=tab:>-,trail:.
+
+" (Qualified) identifiers (no default highlighting)
+" XXX copied from Haskell
+syn match ConId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[A-Z][a-zA-Z0-9_']*\>"
+syn match VarId "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=\<[a-z][a-zA-Z0-9_']*\>"
+
+" Infix operators--most punctuation characters and any (qualified) identifier
+" enclosed in `backquotes`. An operator starting with : is a constructor,
+" others are variables (e.g. functions).
+" XXX copied from Haskell
+syn match cryVarSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[-!#$%&\*\+/<=>\?@\\^|~.][-!#$%&\*\+/<=>\?@\\^|~:.]*"
+syn match cryConSym "\(\<[A-Z][a-zA-Z0-9_']*\.\)\=:[-!#$%&\*\+./<=>\?@\\^|~:]*"
+syn match cryVarSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[a-z][a-zA-Z0-9_']*`"
+syn match cryConSym "`\(\<[A-Z][a-zA-Z0-9_']*\.\)\=[A-Z][a-zA-Z0-9_']*`"
+
+" Reserved symbols
+syn match cryDelimiter "(\|)\|\[|\||]\|||\|\[\|\]\|,\|;\|{\|}"
+
+" Strings and constants
+" XXX Copied from Haskell
+syn match crySpecialChar contained "\\\([0-9]\+\|o[0-7]\+\|x[0-9a-fA-F]\+\|[\"\\'&\\abfnrtv]\|^[A-Z^_\[\\\]]\)"
+syn match crySpecialChar contained "\\\(NUL\|SOH\|STX\|ETX\|EOT\|ENQ\|ACK\|BEL\|BS\|HT\|LF\|VT\|FF\|CR\|SO\|SI\|DLE\|DC1\|DC2\|DC3\|DC4\|NAK\|SYN\|ETB\|CAN\|EM\|SUB\|ESC\|FS\|GS\|RS\|US\|SP\|DEL\)"
+syn match crySpecialCharError contained "\\&\|'''\+"
+syn region cryString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=crySpecialChar
+syn region cryString start=+``+ skip=+\\\\\|\\"+ end=+``+ contains=hsSpecialChar
+syn match cryCharacter "[^a-zA-Z0-9_']'\([^\\]\|\\[^']\+\|\\'\)'"lc=1 contains=crySpecialChar,crySpecialCharError
+syn match cryCharacter "^'\([^\\]\|\\[^']\+\|\\'\)'" contains=crySpecialChar,crySpecialCharError
+syn match cryNumber "\<[0-9]\+\>\|\<0[xX][0-9a-fA-F]\+\>\|\<0[oO][0-7]\+\>"
+
+" Keyword definitions.
+
+syn keyword cryInclude include
+syn keyword cryConditional if then else
+syn keyword cryWhere where
+syn keyword cryTypeSyn type
+syn keyword cryPragma pragma
+syn keyword cryProp extern theorem proof forall codeGen Cpp Haskell SMT Isabelle axioms
+syn keyword cryType Bit inf
+
+" Primitives
+syn keyword cryBoolean False True
+syn keyword cryPrimitive zero undefined
+syn keyword cryPrimitive error parity lg2 pmod pdiv pmult format
+syn keyword cryPrimitive join split groupBy take drop min max negate reverse
+syn keyword cryPrimitive project tail width
+syn keyword cryPrimitive ASSERT
+
+" Comments
+syn match cryLineComment "//.*"
+syn region cryBlockComment start="/\*" end="\*/" contains=cryBlockComment
+
+if !exists("cry_minlines")
+ let cry_minlines = 50
+endif
+exec "syn sync lines=" . cry_minlines
+
+if version >= 508 || !exists("did_cry_syntax_inits")
+ if version < 508
+ let did_cry_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+ hi link cryInclude Include
+ hi link cryTypeSyn Keyword
+ hi link cryImportMod cryImport
+ hi link cryConditional Conditional
+ hi link crySpecialChar SpecialChar
+ hi link cryTypedef Typedef
+ hi link cryPragma Keyword
+ hi link cryVarSym cryOperator
+ hi link cryConSym cryOperator
+ hi link cryOperator Operator
+ hi link cryDelimiter Delimiter
+ hi link crySpecialCharError Error
+ hi link cryString String
+ hi link cryCharacter Character
+ hi link cryNumber Number
+ hi link cryConditional Conditional
+ hi link cryWhere Keyword
+ hi link cryPrimitive Keyword
+ hi link cryBlockComment cryComment
+ hi link cryLineComment cryComment
+ hi link cryComment Comment
+ hi link cryBoolean Boolean
+ hi link cryType Type
+ hi link cryProp Keyword
+
+ delcommand HiLink
+endif
+
+let b:current_syntax = "cryptol"
+
+" Options for vi: ts=8 sw=2 sts=2 nowrap noexpandtab ft=vim
+
+endif