mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-04-13 12:39:09 +08:00
chore(fsharp): use bundle fsharp plugin
- https://github.com/callmekohei/deoplete-fsharp - https://github.com/wsdjeg/vim-fsharp
This commit is contained in:
parent
a559f215eb
commit
b781e56647
@ -29,8 +29,8 @@
|
||||
|
||||
function! SpaceVim#layers#lang#fsharp#plugins() abort
|
||||
let plugins = []
|
||||
call add(plugins, ['wsdjeg/vim-fsharp', {'on_ft' : 'fsharp'}])
|
||||
call add(plugins, ['wsdjeg/deoplete-fsharp', {'on_ft' : 'fsharp', 'make' : 'bash install.bash'}])
|
||||
call add(plugins, [g:_spacevim_root_dir . 'bundle/vim-fsharp', {'merged' : 0}])
|
||||
call add(plugins, [g:_spacevim_root_dir . 'bundle/deoplete-fsharp', {'merged' : 0}])
|
||||
return plugins
|
||||
endfunction
|
||||
|
||||
|
53
bundle/deoplete-fsharp/.gitignore
vendored
Normal file
53
bundle/deoplete-fsharp/.gitignore
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
bin/
|
||||
rplugin/python3/deoplete/sources/__pycache__/
|
||||
rplugin/python3/quickrunfs/__pycache__/
|
||||
syntax/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### https://raw.github.com/github/gitignore/0f88fa75def7ed7d96935b8630793e51953df9b0/Global/macos.gitignore
|
||||
|
||||
*.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
|
||||
### https://raw.github.com/github/gitignore/0f88fa75def7ed7d96935b8630793e51953df9b0/Global/vim.gitignore
|
||||
|
||||
# swap
|
||||
[._]*.s[a-w][a-z]
|
||||
[._]s[a-w][a-z]
|
||||
# session
|
||||
Session.vim
|
||||
# temporary
|
||||
.netrwhist
|
||||
*~
|
||||
# auto-generated tag files
|
||||
tags
|
||||
|
||||
|
21
bundle/deoplete-fsharp/LICENSE
vendored
Normal file
21
bundle/deoplete-fsharp/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 callmekohei
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
297
bundle/deoplete-fsharp/README.md
vendored
Normal file
297
bundle/deoplete-fsharp/README.md
vendored
Normal file
@ -0,0 +1,297 @@
|
||||
[](https://github.com/callmekohei/deoplete-fsharp/blob/master/LICENSE)
|
||||
[](https://gitter.im/fsugjp/public)
|
||||
|
||||
|
||||

|
||||
|
||||
# deoplete-fsharp
|
||||
|
||||
[deoplete.nvim](https://github.com/Shougo/deoplete.nvim) source for F#
|
||||
Using [deopletefs](https://github.com/callmekohei/deopletefs) that is command-line interface to the [FSharp.Compiler.Service](https://github.com/fsharp/FSharp.Compiler.Service).
|
||||
It's useful to write a small code in F# script file ( .fsx ) .
|
||||
|
||||
## Requires
|
||||
[mono](https://github.com/mono/mono) ( >= Mono 5.4.0 )
|
||||
[fsharp](https://github.com/fsharp/fsharp)
|
||||
|
||||
## Install
|
||||
|
||||
Vim
|
||||
```
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/Shougo/deoplete.nvim
|
||||
$ git clone --depth 1 https://github.com/callmekohei/deoplete-fsharp
|
||||
$ git clone --depth 1 https://github.com/roxma/nvim-yarp
|
||||
$ git clone --depth 1 https://github.com/roxma/vim-hug-neovim-rpc
|
||||
|
||||
// install
|
||||
$ cd ./deoplete-fsharp/
|
||||
$ bash install.bash ( or install.cmd )
|
||||
|
||||
// set runtimepath
|
||||
$ vim .vimrc
|
||||
set runtimepath+=/path/to/deoplete
|
||||
set runtimepath+=/path/to/deoplete-fsharp
|
||||
set runtimepath+=/path/to/nvim-yarp
|
||||
set runtimepath+=/path/to/vim-hug-neovim-rpc
|
||||
```
|
||||
|
||||
NeoVim
|
||||
```
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/Shougo/deoplete.nvim
|
||||
$ git clone --depth 1 https://github.com/callmekohei/deoplete-fsharp
|
||||
|
||||
// install
|
||||
$ cd ./deoplete-fsharp/
|
||||
$ bash install.bash ( or install.cmd )
|
||||
|
||||
// set runtimepath
|
||||
$ vim .vimrc
|
||||
set runtimepath+=/path/to/deoplete
|
||||
set runtimepath+=/path/to/deoplete-fsharp
|
||||
```
|
||||
|
||||
Example of deoplete setting
|
||||
|
||||
```vim
|
||||
" .vimrc ( or init.vim )
|
||||
|
||||
autocmd MyAutoCmd VimEnter *.fsx,*.fs call s:foo()
|
||||
function s:foo() abort
|
||||
call deoplete#custom#option({
|
||||
\ 'auto_refresh_delay' : 20
|
||||
\ , 'min_pattern_length' : 999
|
||||
\ , 'ignore_case' : v:true
|
||||
\ , 'refresh_always' : v:false
|
||||
\ , 'ignore_sources' : {'fsharp':['member']}
|
||||
\ })
|
||||
call deoplete#enable()
|
||||
endfunction
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
# More info. for F# script file
|
||||
|
||||
## 01. Run
|
||||
|
||||

|
||||
|
||||
### Requires
|
||||
[vim-quickrun](https://github.com/thinca/vim-quickrun)
|
||||
[vimproc.vim](https://github.com/Shougo/vimproc.vim)
|
||||
|
||||
### Install and build
|
||||
```
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/thinca/vim-quickrun
|
||||
$ git clone --depth 1 https://github.com/Shougo/vimproc.vim
|
||||
|
||||
// build
|
||||
$ cd ./vimproc/
|
||||
$ make
|
||||
|
||||
// set runtimepath
|
||||
$ vim .vimrc
|
||||
set runtimepath+=/path/to/vim-quickrun
|
||||
set runtimepath+=/path/to/vimproc.vim
|
||||
```
|
||||
|
||||
### Example of vim-quickrun setting
|
||||
```vim
|
||||
" .vimrc ( or init.vim )
|
||||
let g:quickrun_config = {}
|
||||
|
||||
let g:quickrun_config._ = {
|
||||
\ 'runner' : 'vimproc'
|
||||
\ ,'runner/vimproc/updatetime' : 60
|
||||
\ ,'hook/time/enable' : 1
|
||||
\ ,'hook/time/format' : "\n*** time : %g s ***"
|
||||
\ ,'hook/time/dest' : ''
|
||||
\ ,"outputter/buffer/split" : 'vertical'
|
||||
\ ,'outputter/buffer/close_on_empty' : 1
|
||||
\}
|
||||
|
||||
let g:quickrun_config.fsharp = {
|
||||
\ 'command' : 'fsharpi --readline-'
|
||||
\ ,'runner' : 'concurrent_process'
|
||||
\ ,'runner/concurrent_process/load' : '#load "%S";;'
|
||||
\ ,'runner/concurrent_process/prompt': '> '
|
||||
\}
|
||||
```
|
||||
If you use window's Vim / Neovim
|
||||
```
|
||||
'command': 'mono "path\to\fsi.exe" --readline-'
|
||||
```
|
||||
|
||||
### Run F# script file
|
||||
```
|
||||
: w
|
||||
: QuickRun
|
||||
```
|
||||
|
||||
## 02. Test
|
||||
|
||||

|
||||
|
||||
### Requires
|
||||
[Persimmon.Script](https://github.com/persimmon-projects/Persimmon.Script)
|
||||
|
||||
### Install ( requires [Paket](https://github.com/fsprojects/Paket) )
|
||||
```
|
||||
// make foo folder and move to foo folder
|
||||
$ mkdir foo/
|
||||
$ cd foo/
|
||||
|
||||
// install
|
||||
$ paket init
|
||||
$ vim paket.dependencies
|
||||
generate_load_scripts: true
|
||||
source https://www.nuget.org/api/v2
|
||||
nuget persimmon.script
|
||||
$ paket install
|
||||
```
|
||||
|
||||
### Test F# script file
|
||||
```
|
||||
: w
|
||||
: QuickRun
|
||||
```
|
||||
|
||||
### Sample code
|
||||
```fsharp
|
||||
#load "./.paket/load/net471/main.group.fsx"
|
||||
|
||||
open Persimmon
|
||||
open UseTestNameByReflection
|
||||
open System.Reflection
|
||||
|
||||
/// write your test code here.
|
||||
let ``a unit test`` = test {
|
||||
do! assertEquals 1 2
|
||||
}
|
||||
|
||||
/// print out test report.
|
||||
new Persimmon.ScriptContext()
|
||||
|> FSI.collectAndRun( fun _ -> Assembly.GetExecutingAssembly() )
|
||||
```
|
||||
|
||||
|
||||
## 03. Debug
|
||||
|
||||

|
||||
|
||||
|
||||
### Requires
|
||||
[sdb](https://github.com/mono/sdb)
|
||||
[sdbplg](https://github.com/callmekohei/sdbplg)
|
||||
[tigaDebugger](https://github.com/callmekohei/tigaDebugger)
|
||||
|
||||
`tigaDebugger` is available with only Vim8 ( +python3, +terminal ).
|
||||
|
||||
### Install
|
||||
|
||||
sdb
|
||||
```shell
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/mono/sdb
|
||||
|
||||
// clone the submodules
|
||||
$ cd ./sdb/
|
||||
$ git submodule update --init --recursive
|
||||
|
||||
// build
|
||||
$ make
|
||||
$ make install
|
||||
```
|
||||
|
||||
sdbplg
|
||||
```shell
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/callmekohei/sdbplg
|
||||
|
||||
// build
|
||||
$ cd ./sdbplg/
|
||||
$ bash build.bash
|
||||
|
||||
// put `.sdb.rc` file on `$HOME`
|
||||
$ cp .sdb.rc $HOME/
|
||||
|
||||
// set path
|
||||
$ vim $HOME/.bash_profile
|
||||
export SDB_PATH=/PATH/TO/sdbplg/bin/
|
||||
```
|
||||
|
||||
tigaDebugger
|
||||
```shell
|
||||
// download
|
||||
$ git clone --depth 1 https://github.com/callmekohei/tigaDebugger
|
||||
$ git clone --depth 1 https://github.com/roxma/nvim-yarp
|
||||
$ git clone --depth 1 https://github.com/roxma/vim-hug-neovim-rpc
|
||||
|
||||
// install neovim plugins
|
||||
$ pip3 install neovim
|
||||
|
||||
// set runtimepath
|
||||
$ vim .vimrc
|
||||
set runtimepath+=/path/to/tigaDebugger
|
||||
set runtimepath+=/path/to/nvim-yarp
|
||||
set runtimepath+=/path/to/vim-hug-neovim-rpc
|
||||
```
|
||||
|
||||
### Usage
|
||||
```shell
|
||||
// write fsharp code
|
||||
$ vim foo.fsx
|
||||
|
||||
let foo() =
|
||||
let mutable x = 1
|
||||
x <- 2
|
||||
x <- 3
|
||||
x
|
||||
|
||||
foo ()
|
||||
|> stdout.WriteLine
|
||||
|
||||
|
||||
// compile file
|
||||
$ fsharpc -g --optimize- foo.fsx
|
||||
|
||||
// open file
|
||||
$ vim foo.fsx
|
||||
|
||||
// start debug mode
|
||||
: TigaSetDebugger sdb
|
||||
: Tiga foo.exe
|
||||
|
||||
// set break point
|
||||
: TigaCommand bp add at foo.fsx 3
|
||||
|
||||
// run
|
||||
: TigaCommand r
|
||||
|
||||
// next
|
||||
: TigaCommand n
|
||||
|
||||
// quit debug mode
|
||||
: TigaQuit
|
||||
```
|
||||
|
||||
### tigaDebugger Shortcut Keys
|
||||
|
||||
| Press | To |
|
||||
| :------------ | :-------------|
|
||||
| ctrl b | Add or delete <b>B</span></b>reakpoint |
|
||||
| ctrl d | <b>D</b>elete all breakpoints |
|
||||
| ctrl r | <b>R</b>un |
|
||||
| ctrl k | <b>K</b>ill (Break) |
|
||||
| ctrl p | Re<b>p</b>lace watch variable |
|
||||
| ctrl y | Add watch variable |
|
||||
| ctrl t | Delete watch variable |
|
||||
| ctrl n | Step over ( <b>N</b>ext ) |
|
||||
| ctrl i | Step <b>I</b>n |
|
||||
| ctrl u | Step out ( <b>U</b>p ) |
|
||||
| ctrl c | <b>C</b>ontinue |
|
||||
|
12
bundle/deoplete-fsharp/ftdetect/deoplete-fsharp-setting.vim
vendored
Normal file
12
bundle/deoplete-fsharp/ftdetect/deoplete-fsharp-setting.vim
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
scriptencoding utf-8
|
||||
|
||||
augroup aufsharp
|
||||
autocmd!
|
||||
augroup END
|
||||
|
||||
" https://github.com/fsharp/vim-fsharp/pull/103
|
||||
if !has('nvim') && !has('gui_running')
|
||||
autocmd aufsharp BufNewFile,BufRead *.fs,*.fsi,*.fsx set regexpengine=1
|
||||
endif
|
||||
|
||||
autocmd aufsharp BufNewFile,BufRead *.fs,*.fsi,*.fsx setlocal filetype=fsharp
|
9
bundle/deoplete-fsharp/install.bash
vendored
Normal file
9
bundle/deoplete-fsharp/install.bash
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
git clone --depth 1 'https://github.com/callmekohei/deoplete-fsharp-bin.git'
|
||||
mv deoplete-fsharp-bin/bin ./
|
||||
rm -rf deoplete-fsharp-bin
|
||||
|
||||
mkdir syntax
|
||||
wget 'https://raw.githubusercontent.com/fsharp/vim-fsharp/master/syntax/fsharp.vim' -P './syntax/'
|
||||
|
12
bundle/deoplete-fsharp/install.cmd
vendored
Normal file
12
bundle/deoplete-fsharp/install.cmd
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
git clone --depth 1 'https://github.com/callmekohei/deoplete-fsharp-bin.git'
|
||||
move deoplete-fsharp-bin/bin ./
|
||||
rmdir /s /q deoplete-fsharp-bin
|
||||
|
||||
powershell -Command "(new-object System.Net.WebClient).Downloadfile('https://raw.githubusercontent.com/fsharp/vim-fsharp/master/syntax/fsharp.vim', 'fsharp.vim')"
|
||||
mkdir syntax
|
||||
move fsharp.vim syntax
|
||||
|
||||
|
||||
|
159
bundle/deoplete-fsharp/rplugin/python3/deoplete/sources/deoplete-fsharp.py
vendored
Normal file
159
bundle/deoplete-fsharp/rplugin/python3/deoplete/sources/deoplete-fsharp.py
vendored
Normal file
@ -0,0 +1,159 @@
|
||||
# ===========================================================================
|
||||
# FILE : deoplete-fsharp.py
|
||||
# AUTHOR : callmekohei <callmekohei at gmail.com>
|
||||
# License : MIT license
|
||||
# ===========================================================================
|
||||
|
||||
import atexit
|
||||
import base64
|
||||
import functools
|
||||
import os
|
||||
import queue
|
||||
import re
|
||||
import subprocess
|
||||
import threading
|
||||
import time
|
||||
|
||||
try:
|
||||
import ujson as json
|
||||
except ImportError:
|
||||
import json
|
||||
|
||||
from deoplete.source.base import Base
|
||||
from deoplete.util import getlines, expand
|
||||
from deoplete.util import debug
|
||||
|
||||
|
||||
class Source(Base):
|
||||
|
||||
def __init__(self, vim):
|
||||
super().__init__(vim)
|
||||
self.name = 'fs'
|
||||
self.mark = '[fs]'
|
||||
self.filetypes = ['fsharp']
|
||||
self.rank = 900
|
||||
|
||||
|
||||
def on_init(self, context):
|
||||
|
||||
### input pattern
|
||||
dotHints = [ r"(\(|<|[a-zA-Z]|\"|\[)*(?<=(\)|>|[a-zA-Z0-9]|\"|\]))\." ]
|
||||
oneWordHints = [ r"^[a-zA-Z]$", "\s*[a-zA-Z]$", "typeof\<[a-zA-Z]$", "(\(\))[a-zA-Z]$", "(\<|\>)[a-zA-Z]$", "(\[|\])[a-zA-Z]$" ]
|
||||
attributeHints = [ r"\[<[a-zA-Z]*" ]
|
||||
self.input_pattern = '|'.join( dotHints + oneWordHints + attributeHints )
|
||||
|
||||
### initialize of deopletefs
|
||||
self.standby = False
|
||||
self.filePath = expand( self.vim.eval( "substitute( expand('%:p') , '\#', '\\#' , 'g' )" ) )
|
||||
fsc_path = expand( re.split('rplugin', __file__)[0] + expand('bin/deopletefs.exe') )
|
||||
|
||||
post_data = {
|
||||
"Row" : -9999 # dummy row
|
||||
, "Col" : 1
|
||||
, "Line" : ''
|
||||
, "FilePath" : self.filePath
|
||||
, "Source" : '\n'.join( getlines( self.vim ) )
|
||||
, "Init" : 'true'
|
||||
}
|
||||
|
||||
self.util = Util(fsc_path, 20)
|
||||
self.util.send(json.dumps(post_data))
|
||||
|
||||
start = time.time()
|
||||
self.vim.command("echo '*** deopletefs initializing... ***'")
|
||||
|
||||
if str(self.util.read()) != '':
|
||||
self.standby = True
|
||||
elapsed_time = time.time() - start
|
||||
self.vim.command("echo '*** finish initialize! *** ( time : " + str(round(elapsed_time,6)) + " s )'")
|
||||
else:
|
||||
elapsed_time = time.time() - start
|
||||
self.vim.command("echo '*** Sorry! Please Re-open file! *** ( time : " + str(round(elapsed_time,6)) + " s )'")
|
||||
|
||||
|
||||
def get_complete_position(self, context):
|
||||
m = re.search( r'\w*$', context['input'] )
|
||||
return m.start() if m else -1
|
||||
|
||||
|
||||
def gather_candidates(self, context):
|
||||
|
||||
try:
|
||||
|
||||
if self.standby == False:
|
||||
return [ '=== can not initialize deopletefs ===' ]
|
||||
else:
|
||||
post_data = {
|
||||
"Row" : context['position'][1]
|
||||
, "Col" : context['complete_position'] - 1
|
||||
, "Line" : context['input']
|
||||
, "FilePath" : self.filePath
|
||||
, "Source" : '\n'.join( getlines( self.vim ) )
|
||||
, "Init" : 'false'
|
||||
}
|
||||
|
||||
self.util.send(json.dumps(post_data))
|
||||
s = (self.util.read())[0]
|
||||
s = base64.b64decode(s)
|
||||
s = s.decode(encoding='utf-8')
|
||||
lst = s.split("\n")
|
||||
|
||||
return [
|
||||
{
|
||||
"word": json_data['word']
|
||||
, "info": '\n'.join( functools.reduce ( lambda a , b : a + b , json_data['info'] ) )
|
||||
}
|
||||
for json_data in [ json.loads(s) for s in lst ]
|
||||
]
|
||||
|
||||
except Exception as e:
|
||||
return [ str(e) ]
|
||||
|
||||
|
||||
class Util():
|
||||
|
||||
def __init__(self, exe_path, timeOut_s):
|
||||
self.exe_path = exe_path
|
||||
self.timeOut_s = timeOut_s
|
||||
self.event = threading.Event()
|
||||
self.lines = queue.Queue()
|
||||
|
||||
### launch deopletefs
|
||||
if os.name == 'nt':
|
||||
command = [ self.exe_path ]
|
||||
elif os.name == 'posix':
|
||||
command = [ 'mono', self.exe_path ]
|
||||
opts = { 'stdin': subprocess.PIPE, 'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE, 'universal_newlines': True }
|
||||
self.process = subprocess.Popen( command , **opts )
|
||||
atexit.register(lambda: self.process.kill())
|
||||
|
||||
### create worker thread
|
||||
self.worker = threading.Thread(target=self.work, args=(self,))
|
||||
self.worker.daemon = True
|
||||
self.worker.start()
|
||||
|
||||
|
||||
def work(self,_):
|
||||
while True:
|
||||
data = self.process.stdout.readline()
|
||||
self.lines.put(data, True)
|
||||
self.event.set()
|
||||
|
||||
|
||||
def send(self,txt):
|
||||
self.event.clear()
|
||||
self.process.stdin.write(txt + '\n')
|
||||
self.process.stdin.flush()
|
||||
|
||||
|
||||
def read(self):
|
||||
self.event.wait(self.timeOut_s)
|
||||
|
||||
list = []
|
||||
while True:
|
||||
if self.lines.empty():
|
||||
break
|
||||
else:
|
||||
list.append( self.lines.get_nowait() )
|
||||
|
||||
return list
|
674
bundle/vim-fsharp/LICENSE
vendored
Normal file
674
bundle/vim-fsharp/LICENSE
vendored
Normal file
@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
5
bundle/vim-fsharp/README.md
vendored
Normal file
5
bundle/vim-fsharp/README.md
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
# vim-fsharp
|
||||
|
||||
> This is a fork of fsharp/vim-fsharp.
|
||||
|
||||
|
2
bundle/vim-fsharp/ftdetect/fsharp.vim
vendored
Normal file
2
bundle/vim-fsharp/ftdetect/fsharp.vim
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
" F#, fsharp
|
||||
autocmd BufNewFile,BufRead *.fs,*.fsi,*.fsx set filetype=fsharp
|
249
bundle/vim-fsharp/indent/fsharp.vim
vendored
Normal file
249
bundle/vim-fsharp/indent/fsharp.vim
vendored
Normal file
@ -0,0 +1,249 @@
|
||||
" Vim indent file
|
||||
" Language: FSharp
|
||||
" Maintainers: Jean-Francois Yuen <jfyuen@happycoders.org>
|
||||
" Mike Leary <leary@nwlink.com>
|
||||
" Markus Mottl <markus.mottl@gmail.com>
|
||||
" Rudi Grinberg <rudi.grinberg@gmail.com>
|
||||
" Gregor Uhlenheuer <kongo2002@gmail.com>
|
||||
" Last Change: 2013 Jun 29
|
||||
" 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
|
||||
" 2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
|
||||
" 2013 June - commented textwidth (Marc Weber)
|
||||
" 2014 August - Ported to F#
|
||||
" 2014 August - F# specific cleanup
|
||||
"
|
||||
" Marc Weber's comment: This file may contain a lot of (very custom) stuff
|
||||
" which eventually should be moved somewhere else ..
|
||||
|
||||
" Only load this indent file when no other was loaded.
|
||||
|
||||
if exists("b:did_indent")
|
||||
finish
|
||||
endif
|
||||
let b:did_indent = 1
|
||||
|
||||
setlocal indentexpr=GetFsharpIndent()
|
||||
setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
|
||||
|
||||
" Only define the function once.
|
||||
if exists("*GetFsharpIndent")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Skipping pattern, for comments
|
||||
function! s:GetLineWithoutFullComment(lnum)
|
||||
let lnum = prevnonblank(a:lnum - 1)
|
||||
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||
while lline =~ '^\s*$' && lnum > 0
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||
endwhile
|
||||
return lnum
|
||||
endfunction
|
||||
|
||||
" Indent for ';;' to match multiple 'let'
|
||||
function! s:GetInd(lnum, pat, lim)
|
||||
let llet = search(a:pat, 'bW')
|
||||
let old = indent(a:lnum)
|
||||
while llet > 0
|
||||
let old = indent(llet)
|
||||
let nb = s:GetLineWithoutFullComment(llet)
|
||||
if getline(nb) =~ a:lim
|
||||
return old
|
||||
endif
|
||||
let llet = search(a:pat, 'bW')
|
||||
endwhile
|
||||
return old
|
||||
endfunction
|
||||
|
||||
" Indent pairs
|
||||
function! s:FindPair(pstart, pmid, pend)
|
||||
call search(a:pend, 'bW')
|
||||
return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
|
||||
endfunction
|
||||
|
||||
" Indent 'let'
|
||||
function! s:FindLet(pstart, pmid, pend)
|
||||
call search(a:pend, 'bW')
|
||||
return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
|
||||
endfunction
|
||||
|
||||
function! GetFsharpIndent()
|
||||
" Find a non-commented line above the current line.
|
||||
let lnum = s:GetLineWithoutFullComment(v:lnum)
|
||||
|
||||
" At the start of the file use zero indent.
|
||||
if lnum == 0
|
||||
return 0
|
||||
endif
|
||||
|
||||
let ind = indent(lnum)
|
||||
let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
|
||||
|
||||
" " Return single 'shiftwidth' after lines matching:
|
||||
" if lline =~ '^\s*|.*->\s*$'
|
||||
" return ind + &sw
|
||||
" endif
|
||||
|
||||
let line = getline(v:lnum)
|
||||
|
||||
" Indent if current line begins with 'end':
|
||||
if line =~ '^\s*end\>'
|
||||
return s:FindPair(s:module, '','\<end\>')
|
||||
|
||||
" Indent if current line begins with 'done' for 'do':
|
||||
elseif line =~ '^\s*done\>'
|
||||
return s:FindPair('\<do\>', '','\<done\>')
|
||||
|
||||
" Indent if current line begins with '}' or '>}':
|
||||
elseif line =~ '^\s*\(\|>\)}'
|
||||
return s:FindPair('{', '','}')
|
||||
|
||||
" Indent if current line begins with ']', '|]' or '>]':
|
||||
elseif line =~ '^\s*\(\||\|>\)\]'
|
||||
return s:FindPair('\[', '','\]')
|
||||
|
||||
" Indent if current line begins with ')':
|
||||
elseif line =~ '^\s*)'
|
||||
return s:FindPair('(', '',')')
|
||||
|
||||
" Indent if current line begins with 'let':
|
||||
elseif line =~ '^\s*let\>'
|
||||
if lline !~ s:lim . '\|' . s:letlim . '\|' . s:beflet
|
||||
return s:FindLet(s:type, '','\<let\s*$')
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'class' or 'type':
|
||||
elseif line =~ '^\s*\(class\|type\)\>'
|
||||
if lline !~ s:lim . '\|\<and\s*$\|' . s:letlim
|
||||
return s:FindLet(s:type, '','\<\(class\|type\)\s*$')
|
||||
endif
|
||||
|
||||
" Indent for pattern matching:
|
||||
elseif line =~ '^\s*|'
|
||||
if lline !~ '^\s*\(|[^\]]\|\(match\|type\|with\)\>\)\|\<\(function\|private\|with\)\s*$'
|
||||
call search('|', 'bW')
|
||||
return indent(searchpair('^\s*\(match\|type\)\>\|\<\(function\|private\|with\)\s*$', '', '^\s*|', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") !~ "^\\s*|.*->"'))
|
||||
endif
|
||||
|
||||
" Indent if current line begins with ';;':
|
||||
elseif line =~ '^\s*;;'
|
||||
if lline !~ ';;\s*$'
|
||||
return s:GetInd(v:lnum, s:letpat, s:letlim)
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'in':
|
||||
elseif line =~ '^\s*in\>'
|
||||
if lline !~ '^\s*\(let\|and\)\>'
|
||||
return s:FindPair('\<let\>', '', '\<in\>')
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'else':
|
||||
elseif line =~ '^\s*else\>'
|
||||
if lline !~ '^\s*\(if\|then\)\>'
|
||||
return s:FindPair('\<if\>', '', '\<else\>')
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'then':
|
||||
elseif line =~ '^\s*then\>'
|
||||
if lline !~ '^\s*\(if\|else\)\>'
|
||||
return s:FindPair('\<if\>', '', '\<then\>')
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'and':
|
||||
elseif line =~ '^\s*and\>'
|
||||
if lline !~ '^\s*\(and\|let\|type\)\>\|\<end\s*$'
|
||||
return ind - &sw
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'with':
|
||||
elseif line =~ '^\s*with\>'
|
||||
if lline !~ '^\s*\(match\|try\)\>'
|
||||
return s:FindPair('\<\%(match\|try\)\>', '','\<with\>')
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'exception', 'external', 'include' or
|
||||
" 'open':
|
||||
elseif line =~ '^\s*\(exception\|external\|include\|open\)\>'
|
||||
if lline !~ s:lim . '\|' . s:letlim
|
||||
call search(line)
|
||||
return indent(search('^\s*\(\(exception\|external\|include\|open\|type\)\>\|val\>.*:\)', 'bW'))
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'val':
|
||||
elseif line =~ '^\s*val\>'
|
||||
if lline !~ '^\s*\(exception\|external\|include\|open\)\>\|' . s:obj . '\|' . s:letlim
|
||||
return indent(search('^\s*\(\(exception\|include\|initializer\|method\|open\|type\|val\)\>\|external\>.*:\)', 'bW'))
|
||||
endif
|
||||
|
||||
" Indent if current line begins with 'constraint', 'inherit', 'initializer'
|
||||
" or 'method':
|
||||
elseif line =~ '^\s*\(constraint\|inherit\|initializer\|method\)\>'
|
||||
if lline !~ s:obj
|
||||
return indent(search('\<\(object\|object\s*(.*)\)\s*$', 'bW')) + &sw
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
" Add a 'shiftwidth' after lines ending with:
|
||||
if lline =~ '\(:\|=\|->\|<-\|(\|\[\|{\|{<\|\[|\|\[<\|\<\(begin\|do\|else\|fun\|function\|functor\|if\|initializer\|object\|private\|sig\|struct\|then\|try\)\|\<object\s*(.*)\)\s*$'
|
||||
let ind = ind + &sw
|
||||
|
||||
" Back to normal indent after lines ending with ';;':
|
||||
elseif lline =~ ';;\s*$' && lline !~ '^\s*;;'
|
||||
let ind = s:GetInd(v:lnum, s:letpat, s:letlim)
|
||||
|
||||
" Back to normal indent after lines ending with 'end':
|
||||
elseif lline =~ '\<end\s*$'
|
||||
let ind = s:FindPair(s:module, '','\<end\>')
|
||||
|
||||
" Back to normal indent after lines ending with 'in':
|
||||
elseif lline =~ '\<in\s*$' && lline !~ '^\s*in\>'
|
||||
let ind = s:FindPair('\<let\>', '', '\<in\>')
|
||||
|
||||
" Back to normal indent after lines ending with 'done':
|
||||
elseif lline =~ '\<done\s*$'
|
||||
let ind = s:FindPair('\<do\>', '','\<done\>')
|
||||
|
||||
" Back to normal indent after lines ending with '}' or '>}':
|
||||
elseif lline =~ '\(\|>\)}\s*$'
|
||||
let ind = s:FindPair('{', '','}')
|
||||
|
||||
" Back to normal indent after lines ending with ']', '|]' or '>]':
|
||||
elseif lline =~ '\(\||\|>\)\]\s*$'
|
||||
let ind = s:FindPair('\[', '','\]')
|
||||
|
||||
" Back to normal indent after comments:
|
||||
elseif lline =~ '\*)\s*$'
|
||||
call search('\*)', 'bW')
|
||||
let ind = indent(searchpair('(\*', '', '\*)', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"'))
|
||||
|
||||
" Back to normal indent after lines ending with ')':
|
||||
elseif lline =~ ')\s*$'
|
||||
let ind = s:FindPair('(', '',')')
|
||||
|
||||
" If this is a multiline comment then align '*':
|
||||
elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
|
||||
let ind = ind + 1
|
||||
|
||||
else
|
||||
" Don't change indentation of this line
|
||||
" for new lines (indent==0) use indentation of previous line
|
||||
|
||||
" This is for preventing removing indentation of these args:
|
||||
" let f x =
|
||||
" let y = x + 1 in
|
||||
" Printf.printf
|
||||
" "o" << here
|
||||
" "oeuth" << don't touch indentation
|
||||
|
||||
let i = indent(v:lnum)
|
||||
return i == 0 ? ind : i
|
||||
|
||||
endif
|
||||
|
||||
return ind
|
||||
|
||||
endfunction
|
||||
|
||||
" vim: sw=4 et sts=4
|
265
bundle/vim-fsharp/syntax/fsharp.vim
vendored
Normal file
265
bundle/vim-fsharp/syntax/fsharp.vim
vendored
Normal file
@ -0,0 +1,265 @@
|
||||
" Vim syntax file
|
||||
" Language: F#
|
||||
" Last Change: Sun 19 Oct 2014 11:11:44 PM CEST
|
||||
" Maintainer: Gregor Uhlenheuer <kongo2002@googlemail.com>
|
||||
"
|
||||
" Note: This syntax file is a complete rewrite of the original version
|
||||
" of fs.vim from Choy Rim <choy.rim@gmail.com> and a slight
|
||||
" modified version from Thomas Schank <ThomasSchank@gmail.com>
|
||||
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists('b:current_syntax')
|
||||
finish
|
||||
endif
|
||||
|
||||
" F# is case sensitive.
|
||||
syn case match
|
||||
|
||||
" reset 'iskeyword' setting
|
||||
setl isk&vim
|
||||
|
||||
" Scripting/preprocessor directives
|
||||
syn match fsharpSScript "^\s*#\S\+" transparent contains=fsharpScript,fsharpRegion,fsharpPreCondit
|
||||
|
||||
syn match fsharpScript contained "#"
|
||||
syn keyword fsharpScript contained quitlabels warnings directory cd load use
|
||||
syn keyword fsharpScript contained install_printer remove_printer requirethread
|
||||
syn keyword fsharpScript contained trace untrace untrace_all print_depth
|
||||
syn keyword fsharpScript contained print_length define undef if elif else endif
|
||||
syn keyword fsharpScript contained line error warning light nowarn
|
||||
|
||||
|
||||
" comments
|
||||
syn match fsharpSingleLineComment "//.*$" contains=fsharpTodo,@Spell
|
||||
syn region fsharpDocComment start="///" end="$" contains=fsharpTodo,fsharpXml,@Spell keepend oneline
|
||||
syn region fsharpXml matchgroup=fsharpXmlDoc start="<[^>]\+>" end="</[^>]\+>" contained contains=fsharpXml
|
||||
|
||||
" Double-backtick identifiers
|
||||
syn region fsharpDoubleBacktick start="``" end="``" keepend oneline
|
||||
|
||||
|
||||
" symbol names
|
||||
syn match fsharpSymbol "\%(let\|use\|mutable\|rec\|and\|private\)\@<=!\=\s\+\zs\w\+\ze\s*[^=:]*[=:]"
|
||||
syn match fsharpSymbol "\%(member\)\@<=\s\+\w\+\.\zs\w\+"
|
||||
|
||||
|
||||
" types
|
||||
syn match fsharpTypeName "\%(\<type\s\+\)\@<=\w\+"
|
||||
|
||||
|
||||
" errors
|
||||
syn match fsharpBraceErr "}"
|
||||
syn match fsharpBrackErr "\]"
|
||||
syn match fsharpParenErr ")"
|
||||
syn match fsharpArrErr "|]"
|
||||
syn match fsharpCommentErr "\*)"
|
||||
|
||||
|
||||
" enclosing delimiters
|
||||
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="(" matchgroup=fsharpKeyword end=")" contains=ALLBUT,fsharpParenErr,fsharpScript
|
||||
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="{" matchgroup=fsharpKeyword end="}" contains=ALLBUT,fsharpBraceErr,fsharpScript
|
||||
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="\[" matchgroup=fsharpKeyword end="\]" contains=ALLBUT,fsharpBrackErr,fsharpScript
|
||||
syn region fsharpEncl transparent matchgroup=fsharpKeyword start="\[|" matchgroup=fsharpKeyword end="|\]" contains=ALLBUT,fsharpArrErr,fsharpScript
|
||||
|
||||
|
||||
" comments
|
||||
syn region fsharpMultiLineComment start="(\*" end="\*)" contains=fsharpTodo
|
||||
syn keyword fsharpTodo contained TODO FIXME XXX NOTE
|
||||
|
||||
" keywords
|
||||
syn keyword fsharpKeyword abstract as assert base begin class default delegate
|
||||
syn keyword fsharpKeyword do done downcast downto elif else end exception
|
||||
syn keyword fsharpKeyword extern for fun function global if in inherit inline
|
||||
syn keyword fsharpKeyword interface lazy let match member module mutable
|
||||
syn keyword fsharpKeyword namespace new of override rec static struct then
|
||||
syn keyword fsharpKeyword to type upcast use val void when while with
|
||||
|
||||
syn keyword fsharpKeyword async atomic break checked component const constraint
|
||||
syn keyword fsharpKeyword constructor continue decimal eager event external
|
||||
syn keyword fsharpKeyword fixed functor include method mixin object parallel
|
||||
syn keyword fsharpKeyword process pure return seq tailcall trait
|
||||
|
||||
" additional operator keywords (Microsoft.FSharp.Core.Operators)
|
||||
syn keyword fsharpKeyword box hash sizeof typeof typedefof unbox ref fst snd
|
||||
syn keyword fsharpKeyword stdin stdout stderr
|
||||
|
||||
" math operators (Microsoft.FSharp.Core.Operators)
|
||||
syn keyword fsharpKeyword abs acos asin atan atan2 ceil cos cosh exp floor log
|
||||
syn keyword fsharpKeyword log10 pown round sign sin sinh sqrt tan tanh
|
||||
|
||||
syn keyword fsharpOCaml asr land lor lsl lsr lxor mod sig
|
||||
|
||||
if !exists('g:fsharp_no_linq') || g:fsharp_no_linq == 0
|
||||
syn keyword fsharpLinq orderBy select where yield
|
||||
endif
|
||||
|
||||
" open
|
||||
syn keyword fsharpOpen open
|
||||
|
||||
" exceptions
|
||||
syn keyword fsharpException try failwith failwithf finally invalid_arg raise
|
||||
syn keyword fsharpException rethrow
|
||||
|
||||
" modifiers
|
||||
syn keyword fsharpModifier abstract const extern internal override private
|
||||
syn keyword fsharpModifier protected public readonly sealed static virtual
|
||||
syn keyword fsharpModifier volatile
|
||||
|
||||
" constants
|
||||
syn keyword fsharpConstant null
|
||||
syn keyword fsharpBoolean false true
|
||||
|
||||
" types
|
||||
syn keyword fsharpType array bool byte char decimal double enum exn float
|
||||
syn keyword fsharpType float32 int int16 int32 int64 lazy_t list nativeint
|
||||
syn keyword fsharpType obj option sbyte single string uint uint32 uint64
|
||||
syn keyword fsharpType uint16 unativeint unit
|
||||
|
||||
" core classes
|
||||
syn match fsharpCore "\u\a*\." transparent contains=fsharpCoreClass
|
||||
|
||||
syn keyword fsharpCoreClass Array Async Directory File List Option Path Map Set contained
|
||||
syn keyword fsharpCoreClass String Seq Tuple contained
|
||||
|
||||
syn keyword fsharpCoreMethod printf printfn sprintf eprintf eprintfn fprintf
|
||||
syn keyword fsharpCoreMethod fprintfn
|
||||
|
||||
" options
|
||||
syn keyword fsharpOption Some None
|
||||
|
||||
" operators
|
||||
syn keyword fsharpOperator not and or
|
||||
|
||||
syn match fsharpFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bscdiuxXoEefFgGMOAat]\|\[\^\=.[^]]*\]\)" contained
|
||||
|
||||
syn match fsharpCharacter "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
|
||||
syn match fsharpCharErr "'\\\d\d'\|'\\\d'"
|
||||
syn match fsharpCharErr "'\\[^\'ntbr]'"
|
||||
syn region fsharpString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=fsharpFormat
|
||||
syn region fsharpString start=+"""+ skip=+\\\\\|\\"+ end=+"""+ contains=fsharpFormat
|
||||
syn region fsharpString start=+@"+ skip=+""+ end=+"+ contains=fsharpFormat
|
||||
|
||||
syn match fsharpFunDef "->"
|
||||
syn match fsharpRefAssign ":="
|
||||
syn match fsharpTopStop ";;"
|
||||
syn match fsharpOperator "\^"
|
||||
syn match fsharpOperator "::"
|
||||
|
||||
syn match fsharpLabel "\<_\>"
|
||||
|
||||
syn match fsharpOperator "&&"
|
||||
syn match fsharpOperator "<"
|
||||
syn match fsharpOperator ">"
|
||||
syn match fsharpOperator "|>"
|
||||
syn match fsharpOperator ":>"
|
||||
syn match fsharpOperator ":?>"
|
||||
syn match fsharpOperator "&&&"
|
||||
syn match fsharpOperator "|||"
|
||||
syn match fsharpOperator "\.\."
|
||||
|
||||
syn match fsharpKeyChar "|[^\]]"me=e-1
|
||||
syn match fsharpKeyChar ";"
|
||||
syn match fsharpKeyChar "\~"
|
||||
syn match fsharpKeyChar "?"
|
||||
syn match fsharpKeyChar "\*"
|
||||
syn match fsharpKeyChar "+"
|
||||
syn match fsharpKeyChar "="
|
||||
syn match fsharpKeyChar "|"
|
||||
syn match fsharpKeyChar "(\*)"
|
||||
|
||||
syn match fsharpOperator "<-"
|
||||
|
||||
syn match fsharpNumber "\<\d\+"
|
||||
syn match fsharpNumber "\<-\=\d\(_\|\d\)*\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||
syn match fsharpNumber "\<-\=0[x|X]\(\x\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||
syn match fsharpNumber "\<-\=0[o|O]\(\o\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||
syn match fsharpNumber "\<-\=0[b|B]\([01]\|_\)\+\(u\|u\?[yslLn]\|UL\)\?\>"
|
||||
syn match fsharpFloat "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
|
||||
syn match fsharpFloat "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
|
||||
syn match fsharpFloat "\<\d\+\.\d*"
|
||||
|
||||
" modules
|
||||
syn match fsharpModule "\%(\<open\s\+\)\@<=[a-zA-Z.]\+"
|
||||
|
||||
" attributes
|
||||
syn region fsharpAttrib matchgroup=fsharpAttribute start="\[<" end=">]"
|
||||
|
||||
" regions
|
||||
syn region fsharpRegion matchgroup=fsharpPreCondit start="\%(end\)\@<!region.*$"
|
||||
\ end="endregion" fold contains=ALL contained
|
||||
|
||||
if version >= 508 || !exists("did_fs_syntax_inits")
|
||||
if version < 508
|
||||
let did_fs_syntax_inits = 1
|
||||
command -nargs=+ HiLink hi link <args>
|
||||
else
|
||||
command -nargs=+ HiLink hi def link <args>
|
||||
endif
|
||||
|
||||
HiLink fsharpBraceErr Error
|
||||
HiLink fsharpBrackErr Error
|
||||
HiLink fsharpParenErr Error
|
||||
HiLink fsharpArrErr Error
|
||||
HiLink fsharpCommentErr Error
|
||||
|
||||
HiLink fsharpSingleLineComment Comment
|
||||
HiLink fsharpMultiLineComment Comment
|
||||
HiLink fsharpDocComment Comment
|
||||
HiLink fsharpXml Comment
|
||||
HiLink fsharpDoubleBacktick String
|
||||
|
||||
HiLink fsharpOpen Include
|
||||
HiLink fsharpModPath Include
|
||||
HiLink fsharpScript Include
|
||||
HiLink fsharpPreCondit Include
|
||||
|
||||
HiLink fsharpKeyword Keyword
|
||||
HiLink fsharpCoreMethod Keyword
|
||||
|
||||
HiLink fsharpOCaml Statement
|
||||
HiLink fsharpLinq Statement
|
||||
|
||||
HiLink fsharpSymbol Function
|
||||
|
||||
HiLink fsharpFunDef Operator
|
||||
HiLink fsharpRefAssign Operator
|
||||
HiLink fsharpTopStop Operator
|
||||
HiLink fsharpKeyChar Operator
|
||||
HiLink fsharpOperator Operator
|
||||
|
||||
HiLink fsharpBoolean Boolean
|
||||
HiLink fsharpConstant Constant
|
||||
HiLink fsharpCharacter Character
|
||||
HiLink fsharpNumber Number
|
||||
HiLink fsharpFloat Float
|
||||
|
||||
HiLink fsharpString String
|
||||
HiLink fsharpFormat Special
|
||||
|
||||
HiLink fsharpModifier StorageClass
|
||||
|
||||
HiLink fsharpException Exception
|
||||
|
||||
HiLink fsharpLabel Identifier
|
||||
HiLink fsharpOption Identifier
|
||||
HiLink fsharpTypeName Identifier
|
||||
HiLink fsharpModule Identifier
|
||||
|
||||
HiLink fsharpType Type
|
||||
|
||||
HiLink fsharpCoreClass Typedef
|
||||
HiLink fsharpAttrib Typedef
|
||||
HiLink fsharpXmlDoc Typedef
|
||||
|
||||
HiLink fsharpTodo Todo
|
||||
|
||||
HiLink fsharpEncl Delimiter
|
||||
HiLink fsharpAttribute Delimiter
|
||||
|
||||
delcommand HiLink
|
||||
endif
|
||||
|
||||
let b:current_syntax = 'fsharp'
|
||||
|
||||
" vim: sw=4 et sts=4
|
Loading…
x
Reference in New Issue
Block a user