Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
MCMS
Commits
53f587bc
Commit
53f587bc
authored
Dec 27, 2019
by
zhongyh
Browse files
提交资源文件
parent
f40087b8
Changes
278
Show whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
20 of 278+
files are displayed.
Plain diff
Email patch
src/main/webapp/static/plugins/codemirror/5.48.4/mode/asterisk/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Asterisk dialplan mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"asterisk.js"
></script>
<style>
.CodeMirror
{
border
:
1px
solid
#999
;}
.cm-s-default
span
.cm-arrow
{
color
:
red
;
}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
Asterisk dialplan
</a>
</ul>
</div>
<article>
<h2>
Asterisk dialplan mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
; extensions.conf - the Asterisk dial plan
;
[general]
;
; If static is set to no, or omitted, then the pbx_config will rewrite
; this file when extensions are modified. Remember that all comments
; made in the file will be lost when that happens.
static=yes
#include "/etc/asterisk/additional_general.conf
[iaxprovider]
switch => IAX2/user:[key]@myserver/mycontext
[dynamic]
#exec /usr/bin/dynamic-peers.pl
[trunkint]
;
; International long distance through trunk
;
exten => _9011.,1,Macro(dundi-e164,${EXTEN:4})
exten => _9011.,n,Dial(${GLOBAL(TRUNK)}/${FILTER(0-9,${EXTEN:${GLOBAL(TRUNKMSD)}})})
[local]
;
; Master context for local, toll-free, and iaxtel calls only
;
ignorepat => 9
include => default
[demo]
include => stdexten
;
; We start with what to do when a call first comes in.
;
exten => s,1,Wait(1) ; Wait a second, just for fun
same => n,Answer ; Answer the line
same => n,Set(TIMEOUT(digit)=5) ; Set Digit Timeout to 5 seconds
same => n,Set(TIMEOUT(response)=10) ; Set Response Timeout to 10 seconds
same => n(restart),BackGround(demo-congrats) ; Play a congratulatory message
same => n(instruct),BackGround(demo-instruct) ; Play some instructions
same => n,WaitExten ; Wait for an extension to be dialed.
exten => 2,1,BackGround(demo-moreinfo) ; Give some more information.
exten => 2,n,Goto(s,instruct)
exten => 3,1,Set(LANGUAGE()=fr) ; Set language to french
exten => 3,n,Goto(s,restart) ; Start with the congratulations
exten => 1000,1,Goto(default,s,1)
;
; We also create an example user, 1234, who is on the console and has
; voicemail, etc.
;
exten => 1234,1,Playback(transfer,skip) ; "Please hold while..."
; (but skip if channel is not up)
exten => 1234,n,Gosub(${EXTEN},stdexten(${GLOBAL(CONSOLE)}))
exten => 1234,n,Goto(default,s,1) ; exited Voicemail
exten => 1235,1,Voicemail(1234,u) ; Right to voicemail
exten => 1236,1,Dial(Console/dsp) ; Ring forever
exten => 1236,n,Voicemail(1234,b) ; Unless busy
;
; # for when they're done with the demo
;
exten => #,1,Playback(demo-thanks) ; "Thanks for trying the demo"
exten => #,n,Hangup ; Hang them up.
;
; A timeout and "invalid extension rule"
;
exten => t,1,Goto(#,1) ; If they take too long, give up
exten => i,1,Playback(invalid) ; "That's not valid, try again"
;
; Create an extension, 500, for dialing the
; Asterisk demo.
;
exten => 500,1,Playback(demo-abouttotry); Let them know what's going on
exten => 500,n,Dial(IAX2/guest@pbx.digium.com/s@default) ; Call the Asterisk demo
exten => 500,n,Playback(demo-nogo) ; Couldn't connect to the demo site
exten => 500,n,Goto(s,6) ; Return to the start over message.
;
; Create an extension, 600, for evaluating echo latency.
;
exten => 600,1,Playback(demo-echotest) ; Let them know what's going on
exten => 600,n,Echo ; Do the echo test
exten => 600,n,Playback(demo-echodone) ; Let them know it's over
exten => 600,n,Goto(s,6) ; Start over
;
; You can use the Macro Page to intercom a individual user
exten => 76245,1,Macro(page,SIP/Grandstream1)
; or if your peernames are the same as extensions
exten => _7XXX,1,Macro(page,SIP/${EXTEN})
;
;
; System Wide Page at extension 7999
;
exten => 7999,1,Set(TIMEOUT(absolute)=60)
exten => 7999,2,Page(Local/Grandstream1@page
&
Local/Xlite1@page
&
Local/1234@page/n,d)
; Give voicemail at extension 8500
;
exten => 8500,1,VoicemailMain
exten => 8500,n,Goto(s,6)
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
mode
:
"
text/x-asterisk
"
,
matchBrackets
:
true
,
lineNumbers
:
true
});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-asterisk
</code>
.
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/brainfuck/brainfuck.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
// Brainfuck mode created by Michael Kaminsky https://github.com/mkaminsky11
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
mod
(
require
(
"
../../lib/codemirror
"
))
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
define
([
"
../../lib/codemirror
"
],
mod
)
else
mod
(
CodeMirror
)
})(
function
(
CodeMirror
)
{
"
use strict
"
var
reserve
=
"
><+-.,[]
"
.
split
(
""
);
/*
comments can be either:
placed behind lines
+++ this is a comment
where reserved characters cannot be used
or in a loop
[
this is ok to use [ ] and stuff
]
or preceded by #
*/
CodeMirror
.
defineMode
(
"
brainfuck
"
,
function
()
{
return
{
startState
:
function
()
{
return
{
commentLine
:
false
,
left
:
0
,
right
:
0
,
commentLoop
:
false
}
},
token
:
function
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
return
null
if
(
stream
.
sol
()){
state
.
commentLine
=
false
;
}
var
ch
=
stream
.
next
().
toString
();
if
(
reserve
.
indexOf
(
ch
)
!==
-
1
){
if
(
state
.
commentLine
===
true
){
if
(
stream
.
eol
()){
state
.
commentLine
=
false
;
}
return
"
comment
"
;
}
if
(
ch
===
"
]
"
||
ch
===
"
[
"
){
if
(
ch
===
"
[
"
){
state
.
left
++
;
}
else
{
state
.
right
++
;
}
return
"
bracket
"
;
}
else
if
(
ch
===
"
+
"
||
ch
===
"
-
"
){
return
"
keyword
"
;
}
else
if
(
ch
===
"
<
"
||
ch
===
"
>
"
){
return
"
atom
"
;
}
else
if
(
ch
===
"
.
"
||
ch
===
"
,
"
){
return
"
def
"
;
}
}
else
{
state
.
commentLine
=
true
;
if
(
stream
.
eol
()){
state
.
commentLine
=
false
;
}
return
"
comment
"
;
}
if
(
stream
.
eol
()){
state
.
commentLine
=
false
;
}
}
};
});
CodeMirror
.
defineMIME
(
"
text/x-brainfuck
"
,
"
brainfuck
"
)
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/brainfuck/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Brainfuck mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"./brainfuck.js"
></script>
<style>
.CodeMirror
{
border
:
2px
inset
#dee
;
}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
></a>
</ul>
</div>
<article>
<h2>
Brainfuck mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
[ This program prints "Hello World!" and a newline to the screen, its
length is 106 active command characters [it is not the shortest.]
This loop is a "comment loop", it's a simple way of adding a comment
to a BF program such that you don't have to worry about any command
characters. Any ".", ",", "+", "-", "
<
" and "
>
" characters are simply
ignored, the "[" and "]" characters just have to be balanced.
]
+++++ +++ Set Cell #0 to 8
[
>
++++ Add 4 to Cell #1; this will always set Cell #1 to 4
[ as the cell will be cleared by the loop
>
++ Add 2 to Cell #2
>
+++ Add 3 to Cell #3
>
+++ Add 3 to Cell #4
>
+ Add 1 to Cell #5
<<<<
- Decrement the loop counter in Cell #1
] Loop till Cell #1 is zero; number of iterations is 4
>
+ Add 1 to Cell #2
>
+ Add 1 to Cell #3
>
- Subtract 1 from Cell #4
>>
+ Add 1 to Cell #6
[
<
] Move back to the first zero cell you find; this will
be Cell #1 which was cleared by the previous loop
<
- Decrement the loop Counter in Cell #0
] Loop till Cell #0 is zero; number of iterations is 8
The result of this is:
Cell No : 0 1 2 3 4 5 6
Contents: 0 0 72 104 88 32 8
Pointer : ^
>>
. Cell #2 has value 72 which is 'H'
>
---. Subtract 3 from Cell #3 to get 101 which is 'e'
+++++++..+++. Likewise for 'llo' from Cell #3
>>
. Cell #5 is 32 for the space
<
-. Subtract 1 from Cell #4 for 87 to give a 'W'
<
. Cell #3 was set to 'o' from the end of 'Hello'
+++.------.--------. Cell #3 for 'rl' and 'd'
>>
+. Add 1 to Cell #5 gives us an exclamation point
>
++. And finally a newline from Cell #6
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-brainfuck
"
});
</script>
<p>
A mode for Brainfuck
</p>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-brainfuck
</code></p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clike/clike.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
function
Context
(
indented
,
column
,
type
,
info
,
align
,
prev
)
{
this
.
indented
=
indented
;
this
.
column
=
column
;
this
.
type
=
type
;
this
.
info
=
info
;
this
.
align
=
align
;
this
.
prev
=
prev
;
}
function
pushContext
(
state
,
col
,
type
,
info
)
{
var
indent
=
state
.
indented
;
if
(
state
.
context
&&
state
.
context
.
type
==
"
statement
"
&&
type
!=
"
statement
"
)
indent
=
state
.
context
.
indented
;
return
state
.
context
=
new
Context
(
indent
,
col
,
type
,
info
,
null
,
state
.
context
);
}
function
popContext
(
state
)
{
var
t
=
state
.
context
.
type
;
if
(
t
==
"
)
"
||
t
==
"
]
"
||
t
==
"
}
"
)
state
.
indented
=
state
.
context
.
indented
;
return
state
.
context
=
state
.
context
.
prev
;
}
function
typeBefore
(
stream
,
state
,
pos
)
{
if
(
state
.
prevToken
==
"
variable
"
||
state
.
prevToken
==
"
type
"
)
return
true
;
if
(
/
\S(?:[^
-
]
>|
[
*
\]])\s
*$|
\*
$/
.
test
(
stream
.
string
.
slice
(
0
,
pos
)))
return
true
;
if
(
state
.
typeAtEndOfLine
&&
stream
.
column
()
==
stream
.
indentation
())
return
true
;
}
function
isTopScope
(
context
)
{
for
(;;)
{
if
(
!
context
||
context
.
type
==
"
top
"
)
return
true
;
if
(
context
.
type
==
"
}
"
&&
context
.
prev
.
info
!=
"
namespace
"
)
return
false
;
context
=
context
.
prev
;
}
}
CodeMirror
.
defineMode
(
"
clike
"
,
function
(
config
,
parserConfig
)
{
var
indentUnit
=
config
.
indentUnit
,
statementIndentUnit
=
parserConfig
.
statementIndentUnit
||
indentUnit
,
dontAlignCalls
=
parserConfig
.
dontAlignCalls
,
keywords
=
parserConfig
.
keywords
||
{},
types
=
parserConfig
.
types
||
{},
builtin
=
parserConfig
.
builtin
||
{},
blockKeywords
=
parserConfig
.
blockKeywords
||
{},
defKeywords
=
parserConfig
.
defKeywords
||
{},
atoms
=
parserConfig
.
atoms
||
{},
hooks
=
parserConfig
.
hooks
||
{},
multiLineStrings
=
parserConfig
.
multiLineStrings
,
indentStatements
=
parserConfig
.
indentStatements
!==
false
,
indentSwitch
=
parserConfig
.
indentSwitch
!==
false
,
namespaceSeparator
=
parserConfig
.
namespaceSeparator
,
isPunctuationChar
=
parserConfig
.
isPunctuationChar
||
/
[\[\]
{}
\(\)
,;
\:\.]
/
,
numberStart
=
parserConfig
.
numberStart
||
/
[\d\.]
/
,
number
=
parserConfig
.
number
||
/^
(?:
0x
[
a-f
\d]
+|0b
[
01
]
+|
(?:\d
+
\.?\d
*|
\.\d
+
)(?:
e
[
-+
]?\d
+
)?)(
u|ll
?
|l|f
)?
/i
,
isOperatorChar
=
parserConfig
.
isOperatorChar
||
/
[
+
\-
*&%=<>!?|
\/]
/
,
isIdentifierChar
=
parserConfig
.
isIdentifierChar
||
/
[\w\$
_
\x
a1-
\u
ffff
]
/
,
// An optional function that takes a {string} token and returns true if it
// should be treated as a builtin.
isReservedIdentifier
=
parserConfig
.
isReservedIdentifier
||
false
;
var
curPunc
,
isDefKeyword
;
function
tokenBase
(
stream
,
state
)
{
var
ch
=
stream
.
next
();
if
(
hooks
[
ch
])
{
var
result
=
hooks
[
ch
](
stream
,
state
);
if
(
result
!==
false
)
return
result
;
}
if
(
ch
==
'
"
'
||
ch
==
"
'
"
)
{
state
.
tokenize
=
tokenString
(
ch
);
return
state
.
tokenize
(
stream
,
state
);
}
if
(
isPunctuationChar
.
test
(
ch
))
{
curPunc
=
ch
;
return
null
;
}
if
(
numberStart
.
test
(
ch
))
{
stream
.
backUp
(
1
)
if
(
stream
.
match
(
number
))
return
"
number
"
stream
.
next
()
}
if
(
ch
==
"
/
"
)
{
if
(
stream
.
eat
(
"
*
"
))
{
state
.
tokenize
=
tokenComment
;
return
tokenComment
(
stream
,
state
);
}
if
(
stream
.
eat
(
"
/
"
))
{
stream
.
skipToEnd
();
return
"
comment
"
;
}
}
if
(
isOperatorChar
.
test
(
ch
))
{
while
(
!
stream
.
match
(
/^
\/[\/
*
]
/
,
false
)
&&
stream
.
eat
(
isOperatorChar
))
{}
return
"
operator
"
;
}
stream
.
eatWhile
(
isIdentifierChar
);
if
(
namespaceSeparator
)
while
(
stream
.
match
(
namespaceSeparator
))
stream
.
eatWhile
(
isIdentifierChar
);
var
cur
=
stream
.
current
();
if
(
contains
(
keywords
,
cur
))
{
if
(
contains
(
blockKeywords
,
cur
))
curPunc
=
"
newstatement
"
;
if
(
contains
(
defKeywords
,
cur
))
isDefKeyword
=
true
;
return
"
keyword
"
;
}
if
(
contains
(
types
,
cur
))
return
"
type
"
;
if
(
contains
(
builtin
,
cur
)
||
(
isReservedIdentifier
&&
isReservedIdentifier
(
cur
)))
{
if
(
contains
(
blockKeywords
,
cur
))
curPunc
=
"
newstatement
"
;
return
"
builtin
"
;
}
if
(
contains
(
atoms
,
cur
))
return
"
atom
"
;
return
"
variable
"
;
}
function
tokenString
(
quote
)
{
return
function
(
stream
,
state
)
{
var
escaped
=
false
,
next
,
end
=
false
;
while
((
next
=
stream
.
next
())
!=
null
)
{
if
(
next
==
quote
&&
!
escaped
)
{
end
=
true
;
break
;}
escaped
=
!
escaped
&&
next
==
"
\\
"
;
}
if
(
end
||
!
(
escaped
||
multiLineStrings
))
state
.
tokenize
=
null
;
return
"
string
"
;
};
}
function
tokenComment
(
stream
,
state
)
{
var
maybeEnd
=
false
,
ch
;
while
(
ch
=
stream
.
next
())
{
if
(
ch
==
"
/
"
&&
maybeEnd
)
{
state
.
tokenize
=
null
;
break
;
}
maybeEnd
=
(
ch
==
"
*
"
);
}
return
"
comment
"
;
}
function
maybeEOL
(
stream
,
state
)
{
if
(
parserConfig
.
typeFirstDefinitions
&&
stream
.
eol
()
&&
isTopScope
(
state
.
context
))
state
.
typeAtEndOfLine
=
typeBefore
(
stream
,
state
,
stream
.
pos
)
}
// Interface
return
{
startState
:
function
(
basecolumn
)
{
return
{
tokenize
:
null
,
context
:
new
Context
((
basecolumn
||
0
)
-
indentUnit
,
0
,
"
top
"
,
null
,
false
),
indented
:
0
,
startOfLine
:
true
,
prevToken
:
null
};
},
token
:
function
(
stream
,
state
)
{
var
ctx
=
state
.
context
;
if
(
stream
.
sol
())
{
if
(
ctx
.
align
==
null
)
ctx
.
align
=
false
;
state
.
indented
=
stream
.
indentation
();
state
.
startOfLine
=
true
;
}
if
(
stream
.
eatSpace
())
{
maybeEOL
(
stream
,
state
);
return
null
;
}
curPunc
=
isDefKeyword
=
null
;
var
style
=
(
state
.
tokenize
||
tokenBase
)(
stream
,
state
);
if
(
style
==
"
comment
"
||
style
==
"
meta
"
)
return
style
;
if
(
ctx
.
align
==
null
)
ctx
.
align
=
true
;
if
(
curPunc
==
"
;
"
||
curPunc
==
"
:
"
||
(
curPunc
==
"
,
"
&&
stream
.
match
(
/^
\s
*
(?:\/\/
.*
)?
$/
,
false
)))
while
(
state
.
context
.
type
==
"
statement
"
)
popContext
(
state
);
else
if
(
curPunc
==
"
{
"
)
pushContext
(
state
,
stream
.
column
(),
"
}
"
);
else
if
(
curPunc
==
"
[
"
)
pushContext
(
state
,
stream
.
column
(),
"
]
"
);
else
if
(
curPunc
==
"
(
"
)
pushContext
(
state
,
stream
.
column
(),
"
)
"
);
else
if
(
curPunc
==
"
}
"
)
{
while
(
ctx
.
type
==
"
statement
"
)
ctx
=
popContext
(
state
);
if
(
ctx
.
type
==
"
}
"
)
ctx
=
popContext
(
state
);
while
(
ctx
.
type
==
"
statement
"
)
ctx
=
popContext
(
state
);
}
else
if
(
curPunc
==
ctx
.
type
)
popContext
(
state
);
else
if
(
indentStatements
&&
(((
ctx
.
type
==
"
}
"
||
ctx
.
type
==
"
top
"
)
&&
curPunc
!=
"
;
"
)
||
(
ctx
.
type
==
"
statement
"
&&
curPunc
==
"
newstatement
"
)))
{
pushContext
(
state
,
stream
.
column
(),
"
statement
"
,
stream
.
current
());
}
if
(
style
==
"
variable
"
&&
((
state
.
prevToken
==
"
def
"
||
(
parserConfig
.
typeFirstDefinitions
&&
typeBefore
(
stream
,
state
,
stream
.
start
)
&&
isTopScope
(
state
.
context
)
&&
stream
.
match
(
/^
\s
*
\(
/
,
false
)))))
style
=
"
def
"
;
if
(
hooks
.
token
)
{
var
result
=
hooks
.
token
(
stream
,
state
,
style
);
if
(
result
!==
undefined
)
style
=
result
;
}
if
(
style
==
"
def
"
&&
parserConfig
.
styleDefs
===
false
)
style
=
"
variable
"
;
state
.
startOfLine
=
false
;
state
.
prevToken
=
isDefKeyword
?
"
def
"
:
style
||
curPunc
;
maybeEOL
(
stream
,
state
);
return
style
;
},
indent
:
function
(
state
,
textAfter
)
{
if
(
state
.
tokenize
!=
tokenBase
&&
state
.
tokenize
!=
null
||
state
.
typeAtEndOfLine
)
return
CodeMirror
.
Pass
;
var
ctx
=
state
.
context
,
firstChar
=
textAfter
&&
textAfter
.
charAt
(
0
);
var
closing
=
firstChar
==
ctx
.
type
;
if
(
ctx
.
type
==
"
statement
"
&&
firstChar
==
"
}
"
)
ctx
=
ctx
.
prev
;
if
(
parserConfig
.
dontIndentStatements
)
while
(
ctx
.
type
==
"
statement
"
&&
parserConfig
.
dontIndentStatements
.
test
(
ctx
.
info
))
ctx
=
ctx
.
prev
if
(
hooks
.
indent
)
{
var
hook
=
hooks
.
indent
(
state
,
ctx
,
textAfter
,
indentUnit
);
if
(
typeof
hook
==
"
number
"
)
return
hook
}
var
switchBlock
=
ctx
.
prev
&&
ctx
.
prev
.
info
==
"
switch
"
;
if
(
parserConfig
.
allmanIndentation
&&
/
[
{(
]
/
.
test
(
firstChar
))
{
while
(
ctx
.
type
!=
"
top
"
&&
ctx
.
type
!=
"
}
"
)
ctx
=
ctx
.
prev
return
ctx
.
indented
}
if
(
ctx
.
type
==
"
statement
"
)
return
ctx
.
indented
+
(
firstChar
==
"
{
"
?
0
:
statementIndentUnit
);
if
(
ctx
.
align
&&
(
!
dontAlignCalls
||
ctx
.
type
!=
"
)
"
))
return
ctx
.
column
+
(
closing
?
0
:
1
);
if
(
ctx
.
type
==
"
)
"
&&
!
closing
)
return
ctx
.
indented
+
statementIndentUnit
;
return
ctx
.
indented
+
(
closing
?
0
:
indentUnit
)
+
(
!
closing
&&
switchBlock
&&
!
/^
(?:
case|default
)\b
/
.
test
(
textAfter
)
?
indentUnit
:
0
);
},
electricInput
:
indentSwitch
?
/^
\s
*
(?:
case .*
?
:|default:|
\{\}?
|
\})
$/
:
/^
\s
*
[
{}
]
$/
,
blockCommentStart
:
"
/*
"
,
blockCommentEnd
:
"
*/
"
,
blockCommentContinue
:
"
*
"
,
lineComment
:
"
//
"
,
fold
:
"
brace
"
};
});
function
words
(
str
)
{
var
obj
=
{},
words
=
str
.
split
(
"
"
);
for
(
var
i
=
0
;
i
<
words
.
length
;
++
i
)
obj
[
words
[
i
]]
=
true
;
return
obj
;
}
function
contains
(
words
,
word
)
{
if
(
typeof
words
===
"
function
"
)
{
return
words
(
word
);
}
else
{
return
words
.
propertyIsEnumerable
(
word
);
}
}
var
cKeywords
=
"
auto if break case register continue return default do sizeof
"
+
"
static else struct switch extern typedef union for goto while enum const
"
+
"
volatile inline restrict asm fortran
"
;
// Do not use this. Use the cTypes function below. This is global just to avoid
// excessive calls when cTypes is being called multiple times during a parse.
var
basicCTypes
=
words
(
"
int long char short double float unsigned signed
"
+
"
void bool
"
);
// Do not use this. Use the objCTypes function below. This is global just to avoid
// excessive calls when objCTypes is being called multiple times during a parse.
var
basicObjCTypes
=
words
(
"
SEL instancetype id Class Protocol BOOL
"
);
// Returns true if identifier is a "C" type.
// C type is defined as those that are reserved by the compiler (basicTypes),
// and those that end in _t (Reserved by POSIX for types)
// http://www.gnu.org/software/libc/manual/html_node/Reserved-Names.html
function
cTypes
(
identifier
)
{
return
contains
(
basicCTypes
,
identifier
)
||
/.+_t$/
.
test
(
identifier
);
}
// Returns true if identifier is a "Objective C" type.
function
objCTypes
(
identifier
)
{
return
cTypes
(
identifier
)
||
contains
(
basicObjCTypes
,
identifier
);
}
var
cBlockKeywords
=
"
case do else for if switch while struct enum union
"
;
var
cDefKeywords
=
"
struct enum union
"
;
function
cppHook
(
stream
,
state
)
{
if
(
!
state
.
startOfLine
)
return
false
for
(
var
ch
,
next
=
null
;
ch
=
stream
.
peek
();)
{
if
(
ch
==
"
\\
"
&&
stream
.
match
(
/^.$/
))
{
next
=
cppHook
break
}
else
if
(
ch
==
"
/
"
&&
stream
.
match
(
/^
\/[\/\*]
/
,
false
))
{
break
}
stream
.
next
()
}
state
.
tokenize
=
next
return
"
meta
"
}
function
pointerHook
(
_stream
,
state
)
{
if
(
state
.
prevToken
==
"
type
"
)
return
"
type
"
;
return
false
;
}
// For C and C++ (and ObjC): identifiers starting with __
// or _ followed by a capital letter are reserved for the compiler.
function
cIsReservedIdentifier
(
token
)
{
if
(
!
token
||
token
.
length
<
2
)
return
false
;
if
(
token
[
0
]
!=
'
_
'
)
return
false
;
return
(
token
[
1
]
==
'
_
'
)
||
(
token
[
1
]
!==
token
[
1
].
toLowerCase
());
}
function
cpp14Literal
(
stream
)
{
stream
.
eatWhile
(
/
[\w\.
'
]
/
);
return
"
number
"
;
}
function
cpp11StringHook
(
stream
,
state
)
{
stream
.
backUp
(
1
);
// Raw strings.
if
(
stream
.
match
(
/
(
R|u8R|uR|UR|LR
)
/
))
{
var
match
=
stream
.
match
(
/"
([^\s\\
()
]{0,16})\(
/
);
if
(
!
match
)
{
return
false
;
}
state
.
cpp11RawStringDelim
=
match
[
1
];
state
.
tokenize
=
tokenRawString
;
return
tokenRawString
(
stream
,
state
);
}
// Unicode strings/chars.
if
(
stream
.
match
(
/
(
u8|u|U|L
)
/
))
{
if
(
stream
.
match
(
/
[
"'
]
/
,
/* eat */
false
))
{
return
"
string
"
;
}
return
false
;
}
// Ignore this hook.
stream
.
next
();
return
false
;
}
function
cppLooksLikeConstructor
(
word
)
{
var
lastTwo
=
/
(\w
+
)
::~
?(\w
+
)
$/
.
exec
(
word
);
return
lastTwo
&&
lastTwo
[
1
]
==
lastTwo
[
2
];
}
// C#-style strings where "" escapes a quote.
function
tokenAtString
(
stream
,
state
)
{
var
next
;
while
((
next
=
stream
.
next
())
!=
null
)
{
if
(
next
==
'
"
'
&&
!
stream
.
eat
(
'
"
'
))
{
state
.
tokenize
=
null
;
break
;
}
}
return
"
string
"
;
}
// C++11 raw string literal is <prefix>"<delim>( anything )<delim>", where
// <delim> can be a string up to 16 characters long.
function
tokenRawString
(
stream
,
state
)
{
// Escape characters that have special regex meanings.
var
delim
=
state
.
cpp11RawStringDelim
.
replace
(
/
[^\w\s]
/g
,
'
\\
$&
'
);
var
match
=
stream
.
match
(
new
RegExp
(
"
.*?
\\
)
"
+
delim
+
'
"
'
));
if
(
match
)
state
.
tokenize
=
null
;
else
stream
.
skipToEnd
();
return
"
string
"
;
}
function
def
(
mimes
,
mode
)
{
if
(
typeof
mimes
==
"
string
"
)
mimes
=
[
mimes
];
var
words
=
[];
function
add
(
obj
)
{
if
(
obj
)
for
(
var
prop
in
obj
)
if
(
obj
.
hasOwnProperty
(
prop
))
words
.
push
(
prop
);
}
add
(
mode
.
keywords
);
add
(
mode
.
types
);
add
(
mode
.
builtin
);
add
(
mode
.
atoms
);
if
(
words
.
length
)
{
mode
.
helperType
=
mimes
[
0
];
CodeMirror
.
registerHelper
(
"
hintWords
"
,
mimes
[
0
],
words
);
}
for
(
var
i
=
0
;
i
<
mimes
.
length
;
++
i
)
CodeMirror
.
defineMIME
(
mimes
[
i
],
mode
);
}
def
([
"
text/x-csrc
"
,
"
text/x-c
"
,
"
text/x-chdr
"
],
{
name
:
"
clike
"
,
keywords
:
words
(
cKeywords
),
types
:
cTypes
,
blockKeywords
:
words
(
cBlockKeywords
),
defKeywords
:
words
(
cDefKeywords
),
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
NULL true false
"
),
isReservedIdentifier
:
cIsReservedIdentifier
,
hooks
:
{
"
#
"
:
cppHook
,
"
*
"
:
pointerHook
,
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
def
([
"
text/x-c++src
"
,
"
text/x-c++hdr
"
],
{
name
:
"
clike
"
,
// Keywords from https://en.cppreference.com/w/cpp/keyword includes C++20.
keywords
:
words
(
cKeywords
+
"
alignas alignof and and_eq audit axiom bitand bitor catch
"
+
"
class compl concept constexpr const_cast decltype delete dynamic_cast
"
+
"
explicit export final friend import module mutable namespace new noexcept
"
+
"
not not_eq operator or or_eq override private protected public
"
+
"
reinterpret_cast requires static_assert static_cast template this
"
+
"
thread_local throw try typeid typename using virtual xor xor_eq
"
),
types
:
cTypes
,
blockKeywords
:
words
(
cBlockKeywords
+
"
class try catch
"
),
defKeywords
:
words
(
cDefKeywords
+
"
class namespace
"
),
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
true false NULL nullptr
"
),
dontIndentStatements
:
/^template$/
,
isIdentifierChar
:
/
[\w\$
_~
\x
a1-
\u
ffff
]
/
,
isReservedIdentifier
:
cIsReservedIdentifier
,
hooks
:
{
"
#
"
:
cppHook
,
"
*
"
:
pointerHook
,
"
u
"
:
cpp11StringHook
,
"
U
"
:
cpp11StringHook
,
"
L
"
:
cpp11StringHook
,
"
R
"
:
cpp11StringHook
,
"
0
"
:
cpp14Literal
,
"
1
"
:
cpp14Literal
,
"
2
"
:
cpp14Literal
,
"
3
"
:
cpp14Literal
,
"
4
"
:
cpp14Literal
,
"
5
"
:
cpp14Literal
,
"
6
"
:
cpp14Literal
,
"
7
"
:
cpp14Literal
,
"
8
"
:
cpp14Literal
,
"
9
"
:
cpp14Literal
,
token
:
function
(
stream
,
state
,
style
)
{
if
(
style
==
"
variable
"
&&
stream
.
peek
()
==
"
(
"
&&
(
state
.
prevToken
==
"
;
"
||
state
.
prevToken
==
null
||
state
.
prevToken
==
"
}
"
)
&&
cppLooksLikeConstructor
(
stream
.
current
()))
return
"
def
"
;
}
},
namespaceSeparator
:
"
::
"
,
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
def
(
"
text/x-java
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
"
abstract assert break case catch class const continue default
"
+
"
do else enum extends final finally for goto if implements import
"
+
"
instanceof interface native new package private protected public
"
+
"
return static strictfp super switch synchronized this throw throws transient
"
+
"
try volatile while @interface
"
),
types
:
words
(
"
byte short int long float double boolean char void Boolean Byte Character Double Float
"
+
"
Integer Long Number Object Short String StringBuffer StringBuilder Void
"
),
blockKeywords
:
words
(
"
catch class do else finally for if switch try while
"
),
defKeywords
:
words
(
"
class interface enum @interface
"
),
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
true false null
"
),
number
:
/^
(?:
0x
[
a-f
\d
_
]
+|0b
[
01_
]
+|
(?:[\d
_
]
+
\.?\d
*|
\.\d
+
)(?:
e
[
-+
]?[\d
_
]
+
)?)(
u|ll
?
|l|f
)?
/i
,
hooks
:
{
"
@
"
:
function
(
stream
)
{
// Don't match the @interface keyword.
if
(
stream
.
match
(
'
interface
'
,
false
))
return
false
;
stream
.
eatWhile
(
/
[\w\$
_
]
/
);
return
"
meta
"
;
}
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
import
"
]}
});
def
(
"
text/x-csharp
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
"
abstract as async await base break case catch checked class const continue
"
+
"
default delegate do else enum event explicit extern finally fixed for
"
+
"
foreach goto if implicit in interface internal is lock namespace new
"
+
"
operator out override params private protected public readonly ref return sealed
"
+
"
sizeof stackalloc static struct switch this throw try typeof unchecked
"
+
"
unsafe using virtual void volatile while add alias ascending descending dynamic from get
"
+
"
global group into join let orderby partial remove select set value var yield
"
),
types
:
words
(
"
Action Boolean Byte Char DateTime DateTimeOffset Decimal Double Func
"
+
"
Guid Int16 Int32 Int64 Object SByte Single String Task TimeSpan UInt16 UInt32
"
+
"
UInt64 bool byte char decimal double short int long object
"
+
"
sbyte float string ushort uint ulong
"
),
blockKeywords
:
words
(
"
catch class do else finally for foreach if struct switch try while
"
),
defKeywords
:
words
(
"
class interface namespace struct var
"
),
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
true false null
"
),
hooks
:
{
"
@
"
:
function
(
stream
,
state
)
{
if
(
stream
.
eat
(
'
"
'
))
{
state
.
tokenize
=
tokenAtString
;
return
tokenAtString
(
stream
,
state
);
}
stream
.
eatWhile
(
/
[\w\$
_
]
/
);
return
"
meta
"
;
}
}
});
function
tokenTripleString
(
stream
,
state
)
{
var
escaped
=
false
;
while
(
!
stream
.
eol
())
{
if
(
!
escaped
&&
stream
.
match
(
'
"""
'
))
{
state
.
tokenize
=
null
;
break
;
}
escaped
=
stream
.
next
()
==
"
\\
"
&&
!
escaped
;
}
return
"
string
"
;
}
function
tokenNestedComment
(
depth
)
{
return
function
(
stream
,
state
)
{
var
ch
while
(
ch
=
stream
.
next
())
{
if
(
ch
==
"
*
"
&&
stream
.
eat
(
"
/
"
))
{
if
(
depth
==
1
)
{
state
.
tokenize
=
null
break
}
else
{
state
.
tokenize
=
tokenNestedComment
(
depth
-
1
)
return
state
.
tokenize
(
stream
,
state
)
}
}
else
if
(
ch
==
"
/
"
&&
stream
.
eat
(
"
*
"
))
{
state
.
tokenize
=
tokenNestedComment
(
depth
+
1
)
return
state
.
tokenize
(
stream
,
state
)
}
}
return
"
comment
"
}
}
def
(
"
text/x-scala
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
/* scala */
"
abstract case catch class def do else extends final finally for forSome if
"
+
"
implicit import lazy match new null object override package private protected return
"
+
"
sealed super this throw trait try type val var while with yield _
"
+
/* package scala */
"
assert assume require print println printf readLine readBoolean readByte readShort
"
+
"
readChar readInt readLong readFloat readDouble
"
),
types
:
words
(
"
AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either
"
+
"
Enumeration Equiv Error Exception Fractional Function IndexedSeq Int Integral Iterable
"
+
"
Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering
"
+
"
Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder
"
+
"
StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector
"
+
/* package java.lang */
"
Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable
"
+
"
Compiler Double Exception Float Integer Long Math Number Object Package Pair Process
"
+
"
Runtime Runnable SecurityManager Short StackTraceElement StrictMath String
"
+
"
StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void
"
),
multiLineStrings
:
true
,
blockKeywords
:
words
(
"
catch class enum do else finally for forSome if match switch try while
"
),
defKeywords
:
words
(
"
class enum def object package trait type val var
"
),
atoms
:
words
(
"
true false null
"
),
indentStatements
:
false
,
indentSwitch
:
false
,
isOperatorChar
:
/
[
+
\-
*&%=<>!?|
\/
#:@
]
/
,
hooks
:
{
"
@
"
:
function
(
stream
)
{
stream
.
eatWhile
(
/
[\w\$
_
]
/
);
return
"
meta
"
;
},
'
"
'
:
function
(
stream
,
state
)
{
if
(
!
stream
.
match
(
'
""
'
))
return
false
;
state
.
tokenize
=
tokenTripleString
;
return
state
.
tokenize
(
stream
,
state
);
},
"
'
"
:
function
(
stream
)
{
stream
.
eatWhile
(
/
[\w\$
_
\x
a1-
\u
ffff
]
/
);
return
"
atom
"
;
},
"
=
"
:
function
(
stream
,
state
)
{
var
cx
=
state
.
context
if
(
cx
.
type
==
"
}
"
&&
cx
.
align
&&
stream
.
eat
(
"
>
"
))
{
state
.
context
=
new
Context
(
cx
.
indented
,
cx
.
column
,
cx
.
type
,
cx
.
info
,
null
,
cx
.
prev
)
return
"
operator
"
}
else
{
return
false
}
},
"
/
"
:
function
(
stream
,
state
)
{
if
(
!
stream
.
eat
(
"
*
"
))
return
false
state
.
tokenize
=
tokenNestedComment
(
1
)
return
state
.
tokenize
(
stream
,
state
)
}
},
modeProps
:
{
closeBrackets
:
{
pairs
:
'
()[]{}""
'
,
triples
:
'
"
'
}}
});
function
tokenKotlinString
(
tripleString
){
return
function
(
stream
,
state
)
{
var
escaped
=
false
,
next
,
end
=
false
;
while
(
!
stream
.
eol
())
{
if
(
!
tripleString
&&
!
escaped
&&
stream
.
match
(
'
"
'
)
)
{
end
=
true
;
break
;}
if
(
tripleString
&&
stream
.
match
(
'
"""
'
))
{
end
=
true
;
break
;}
next
=
stream
.
next
();
if
(
!
escaped
&&
next
==
"
$
"
&&
stream
.
match
(
'
{
'
))
stream
.
skipTo
(
"
}
"
);
escaped
=
!
escaped
&&
next
==
"
\\
"
&&
!
tripleString
;
}
if
(
end
||
!
tripleString
)
state
.
tokenize
=
null
;
return
"
string
"
;
}
}
def
(
"
text/x-kotlin
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
/*keywords*/
"
package as typealias class interface this super val operator
"
+
"
var fun for is in This throw return annotation
"
+
"
break continue object if else while do try when !in !is as?
"
+
/*soft keywords*/
"
file import where by get set abstract enum open inner override private public internal
"
+
"
protected catch finally out final vararg reified dynamic companion constructor init
"
+
"
sealed field property receiver param sparam lateinit data inline noinline tailrec
"
+
"
external annotation crossinline const operator infix suspend actual expect setparam
"
),
types
:
words
(
/* package java.lang */
"
Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable
"
+
"
Compiler Double Exception Float Integer Long Math Number Object Package Pair Process
"
+
"
Runtime Runnable SecurityManager Short StackTraceElement StrictMath String
"
+
"
StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray
"
+
"
ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy
"
+
"
LazyThreadSafetyMode LongArray Nothing ShortArray Unit
"
),
intendSwitch
:
false
,
indentStatements
:
false
,
multiLineStrings
:
true
,
number
:
/^
(?:
0x
[
a-f
\d
_
]
+|0b
[
01_
]
+|
(?:[\d
_
]
+
(\.\d
+
)?
|
\.\d
+
)(?:
e
[
-+
]?[\d
_
]
+
)?)(
u|ll
?
|l|f
)?
/i
,
blockKeywords
:
words
(
"
catch class do else finally for if where try while enum
"
),
defKeywords
:
words
(
"
class val var object interface fun
"
),
atoms
:
words
(
"
true false null this
"
),
hooks
:
{
"
@
"
:
function
(
stream
)
{
stream
.
eatWhile
(
/
[\w\$
_
]
/
);
return
"
meta
"
;
},
'
*
'
:
function
(
_stream
,
state
)
{
return
state
.
prevToken
==
'
.
'
?
'
variable
'
:
'
operator
'
;
},
'
"
'
:
function
(
stream
,
state
)
{
state
.
tokenize
=
tokenKotlinString
(
stream
.
match
(
'
""
'
));
return
state
.
tokenize
(
stream
,
state
);
},
indent
:
function
(
state
,
ctx
,
textAfter
,
indentUnit
)
{
var
firstChar
=
textAfter
&&
textAfter
.
charAt
(
0
);
if
((
state
.
prevToken
==
"
}
"
||
state
.
prevToken
==
"
)
"
)
&&
textAfter
==
""
)
return
state
.
indented
;
if
(
state
.
prevToken
==
"
operator
"
&&
textAfter
!=
"
}
"
||
state
.
prevToken
==
"
variable
"
&&
firstChar
==
"
.
"
||
(
state
.
prevToken
==
"
}
"
||
state
.
prevToken
==
"
)
"
)
&&
firstChar
==
"
.
"
)
return
indentUnit
*
2
+
ctx
.
indented
;
if
(
ctx
.
align
&&
ctx
.
type
==
"
}
"
)
return
ctx
.
indented
+
(
state
.
context
.
type
==
(
textAfter
||
""
).
charAt
(
0
)
?
0
:
indentUnit
);
}
},
modeProps
:
{
closeBrackets
:
{
triples
:
'
"
'
}}
});
def
([
"
x-shader/x-vertex
"
,
"
x-shader/x-fragment
"
],
{
name
:
"
clike
"
,
keywords
:
words
(
"
sampler1D sampler2D sampler3D samplerCube
"
+
"
sampler1DShadow sampler2DShadow
"
+
"
const attribute uniform varying
"
+
"
break continue discard return
"
+
"
for while do if else struct
"
+
"
in out inout
"
),
types
:
words
(
"
float int bool void
"
+
"
vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4
"
+
"
mat2 mat3 mat4
"
),
blockKeywords
:
words
(
"
for while do if else struct
"
),
builtin
:
words
(
"
radians degrees sin cos tan asin acos atan
"
+
"
pow exp log exp2 sqrt inversesqrt
"
+
"
abs sign floor ceil fract mod min max clamp mix step smoothstep
"
+
"
length distance dot cross normalize ftransform faceforward
"
+
"
reflect refract matrixCompMult
"
+
"
lessThan lessThanEqual greaterThan greaterThanEqual
"
+
"
equal notEqual any all not
"
+
"
texture1D texture1DProj texture1DLod texture1DProjLod
"
+
"
texture2D texture2DProj texture2DLod texture2DProjLod
"
+
"
texture3D texture3DProj texture3DLod texture3DProjLod
"
+
"
textureCube textureCubeLod
"
+
"
shadow1D shadow2D shadow1DProj shadow2DProj
"
+
"
shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod
"
+
"
dFdx dFdy fwidth
"
+
"
noise1 noise2 noise3 noise4
"
),
atoms
:
words
(
"
true false
"
+
"
gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex
"
+
"
gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3
"
+
"
gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7
"
+
"
gl_FogCoord gl_PointCoord
"
+
"
gl_Position gl_PointSize gl_ClipVertex
"
+
"
gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor
"
+
"
gl_TexCoord gl_FogFragCoord
"
+
"
gl_FragCoord gl_FrontFacing
"
+
"
gl_FragData gl_FragDepth
"
+
"
gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix
"
+
"
gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse
"
+
"
gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse
"
+
"
gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose
"
+
"
gl_ProjectionMatrixInverseTranspose
"
+
"
gl_ModelViewProjectionMatrixInverseTranspose
"
+
"
gl_TextureMatrixInverseTranspose
"
+
"
gl_NormalScale gl_DepthRange gl_ClipPlane
"
+
"
gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel
"
+
"
gl_FrontLightModelProduct gl_BackLightModelProduct
"
+
"
gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ
"
+
"
gl_FogParameters
"
+
"
gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords
"
+
"
gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats
"
+
"
gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits
"
+
"
gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits
"
+
"
gl_MaxDrawBuffers
"
),
indentSwitch
:
false
,
hooks
:
{
"
#
"
:
cppHook
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
def
(
"
text/x-nesc
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
cKeywords
+
"
as atomic async call command component components configuration event generic
"
+
"
implementation includes interface module new norace nx_struct nx_union post provides
"
+
"
signal task uses abstract extends
"
),
types
:
cTypes
,
blockKeywords
:
words
(
cBlockKeywords
),
atoms
:
words
(
"
null true false
"
),
hooks
:
{
"
#
"
:
cppHook
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
def
(
"
text/x-objectivec
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
cKeywords
+
"
bycopy byref in inout oneway out self super atomic nonatomic retain copy
"
+
"
readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd
"
+
"
@interface @implementation @end @protocol @encode @property @synthesize @dynamic @class
"
+
"
@public @package @private @protected @required @optional @try @catch @finally @import
"
+
"
@selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available
"
),
types
:
objCTypes
,
builtin
:
words
(
"
FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINED
"
+
"
NS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER
"
+
"
NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN
"
+
"
NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT
"
),
blockKeywords
:
words
(
cBlockKeywords
+
"
@synthesize @try @catch @finally @autoreleasepool @synchronized
"
),
defKeywords
:
words
(
cDefKeywords
+
"
@interface @implementation @protocol @class
"
),
dontIndentStatements
:
/^@.*$/
,
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
YES NO NULL Nil nil true false nullptr
"
),
isReservedIdentifier
:
cIsReservedIdentifier
,
hooks
:
{
"
#
"
:
cppHook
,
"
*
"
:
pointerHook
,
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
def
(
"
text/x-squirrel
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
"
base break clone continue const default delete enum extends function in class
"
+
"
foreach local resume return this throw typeof yield constructor instanceof static
"
),
types
:
cTypes
,
blockKeywords
:
words
(
"
case catch class else for foreach if switch try while
"
),
defKeywords
:
words
(
"
function local class
"
),
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
true false null
"
),
hooks
:
{
"
#
"
:
cppHook
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
include
"
]}
});
// Ceylon Strings need to deal with interpolation
var
stringTokenizer
=
null
;
function
tokenCeylonString
(
type
)
{
return
function
(
stream
,
state
)
{
var
escaped
=
false
,
next
,
end
=
false
;
while
(
!
stream
.
eol
())
{
if
(
!
escaped
&&
stream
.
match
(
'
"
'
)
&&
(
type
==
"
single
"
||
stream
.
match
(
'
""
'
)))
{
end
=
true
;
break
;
}
if
(
!
escaped
&&
stream
.
match
(
'
``
'
))
{
stringTokenizer
=
tokenCeylonString
(
type
);
end
=
true
;
break
;
}
next
=
stream
.
next
();
escaped
=
type
==
"
single
"
&&
!
escaped
&&
next
==
"
\\
"
;
}
if
(
end
)
state
.
tokenize
=
null
;
return
"
string
"
;
}
}
def
(
"
text/x-ceylon
"
,
{
name
:
"
clike
"
,
keywords
:
words
(
"
abstracts alias assembly assert assign break case catch class continue dynamic else
"
+
"
exists extends finally for function given if import in interface is let module new
"
+
"
nonempty object of out outer package return satisfies super switch then this throw
"
+
"
try value void while
"
),
types
:
function
(
word
)
{
// In Ceylon all identifiers that start with an uppercase are types
var
first
=
word
.
charAt
(
0
);
return
(
first
===
first
.
toUpperCase
()
&&
first
!==
first
.
toLowerCase
());
},
blockKeywords
:
words
(
"
case catch class dynamic else finally for function if interface module new object switch try while
"
),
defKeywords
:
words
(
"
class dynamic function interface module object package value
"
),
builtin
:
words
(
"
abstract actual aliased annotation by default deprecated doc final formal late license
"
+
"
native optional sealed see serializable shared suppressWarnings tagged throws variable
"
),
isPunctuationChar
:
/
[\[\]
{}
\(\)
,;
\:\.
`
]
/
,
isOperatorChar
:
/
[
+
\-
*&%=<>!?|^~:
\/]
/
,
numberStart
:
/
[\d
#$
]
/
,
number
:
/^
(?:
#
[\d
a-fA-F_
]
+|
\$[
01_
]
+|
[\d
_
]
+
[
kMGTPmunpf
]?
|
[\d
_
]
+
\.[\d
_
]
+
(?:[
eE
][
-+
]?\d
+|
[
kMGTPmunpf
]
|
)
|
)
/i
,
multiLineStrings
:
true
,
typeFirstDefinitions
:
true
,
atoms
:
words
(
"
true false null larger smaller equal empty finished
"
),
indentSwitch
:
false
,
styleDefs
:
false
,
hooks
:
{
"
@
"
:
function
(
stream
)
{
stream
.
eatWhile
(
/
[\w\$
_
]
/
);
return
"
meta
"
;
},
'
"
'
:
function
(
stream
,
state
)
{
state
.
tokenize
=
tokenCeylonString
(
stream
.
match
(
'
""
'
)
?
"
triple
"
:
"
single
"
);
return
state
.
tokenize
(
stream
,
state
);
},
'
`
'
:
function
(
stream
,
state
)
{
if
(
!
stringTokenizer
||
!
stream
.
match
(
'
`
'
))
return
false
;
state
.
tokenize
=
stringTokenizer
;
stringTokenizer
=
null
;
return
state
.
tokenize
(
stream
,
state
);
},
"
'
"
:
function
(
stream
)
{
stream
.
eatWhile
(
/
[\w\$
_
\x
a1-
\u
ffff
]
/
);
return
"
atom
"
;
},
token
:
function
(
_stream
,
state
,
style
)
{
if
((
style
==
"
variable
"
||
style
==
"
type
"
)
&&
state
.
prevToken
==
"
.
"
)
{
return
"
variable-2
"
;
}
}
},
modeProps
:
{
fold
:
[
"
brace
"
,
"
import
"
],
closeBrackets
:
{
triples
:
'
"
'
}
}
});
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clike/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: C-like mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<link
rel=
"stylesheet"
href=
"../../addon/hint/show-hint.css"
>
<script
src=
"../../addon/hint/show-hint.js"
></script>
<script
src=
"clike.js"
></script>
<style>
.CodeMirror
{
border
:
2px
inset
#dee
;}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
C-like
</a>
</ul>
</div>
<article>
<h2>
C-like mode
</h2>
<div><textarea
id=
"c-code"
>
/* C demo code */
#include
<zmq.h>
#include
<pthread.h>
#include
<semaphore.h>
#include
<time.h>
#include
<stdio.h>
#include
<fcntl.h>
#include
<malloc.h>
typedef struct {
void* arg_socket;
zmq_msg_t* arg_msg;
char* arg_string;
unsigned long arg_len;
int arg_int, arg_command;
int signal_fd;
int pad;
void* context;
sem_t sem;
} acl_zmq_context;
#define p(X) (context->arg_##X)
void* zmq_thread(void* context_pointer) {
acl_zmq_context* context = (acl_zmq_context*)context_pointer;
char ok = 'K', err = 'X';
int res;
while (1) {
while ((res = sem_wait(
&
context->sem)) == EINTR);
if (res) {write(context->signal_fd,
&
err, 1); goto cleanup;}
switch(p(command)) {
case 0: goto cleanup;
case 1: p(socket) = zmq_socket(context->context, p(int)); break;
case 2: p(int) = zmq_close(p(socket)); break;
case 3: p(int) = zmq_bind(p(socket), p(string)); break;
case 4: p(int) = zmq_connect(p(socket), p(string)); break;
case 5: p(int) = zmq_getsockopt(p(socket), p(int), (void*)p(string),
&
p(len)); break;
case 6: p(int) = zmq_setsockopt(p(socket), p(int), (void*)p(string), p(len)); break;
case 7: p(int) = zmq_send(p(socket), p(msg), p(int)); break;
case 8: p(int) = zmq_recv(p(socket), p(msg), p(int)); break;
case 9: p(int) = zmq_poll(p(socket), p(int), p(len)); break;
}
p(command) = errno;
write(context->signal_fd,
&
ok, 1);
}
cleanup:
close(context->signal_fd);
free(context_pointer);
return 0;
}
void* zmq_thread_init(void* zmq_context, int signal_fd) {
acl_zmq_context* context = malloc(sizeof(acl_zmq_context));
pthread_t thread;
context->context = zmq_context;
context->signal_fd = signal_fd;
sem_init(
&
context->sem, 1, 0);
pthread_create(
&
thread, 0,
&
zmq_thread, context);
pthread_detach(thread);
return context;
}
</textarea></div>
<h2>
C++ example
</h2>
<div><textarea
id=
"cpp-code"
>
#include
<iostream>
#include "mystuff/util.h"
namespace {
enum Enum {
VAL1, VAL2, VAL3
};
char32_t unicode_string = U"\U0010FFFF";
string raw_string = R"delim(anything
you
want)delim";
int Helper(const MyType
&
param) {
return 0;
}
} // namespace
class ForwardDec;
template
<class
T
,
class
V
>
class Class : public BaseClass {
const MyType
<T
,
V
>
member_;
public:
const MyType
<T
,
V
>
&
Method() const {
return member_;
}
void Method2(MyType
<T
,
V
>
* value);
}
template
<class
T
,
class
V
>
void Class::Method2(MyType
<T
,
V
>
* value) {
std::out
<
<
1
>
> method();
value->Method3(member_);
member_ = value;
}
</textarea></div>
<h2>
Objective-C example
</h2>
<div><textarea
id=
"objectivec-code"
>
/*
This is a longer comment
That spans two lines
*/
#import "MyClass.h"
#import
<AFramework
/
AFrameork.h
>
@import BFrameworkModule;
NS_ENUM(SomeValues) {
aValue = 1;
};
// A Class Extension with some properties
@interface MyClass ()
<AProtocol>
@property(atomic, readwrite, assign) NSInteger anInt;
@property(nonatomic, strong, nullable) NSString *aString;
@end
@implementation YourAppDelegate
- (instancetype)initWithString:(NSString *)aStringVar {
if ((self = [super init])) {
aString = aStringVar;
}
return self;
}
- (BOOL)doSomething:(float)progress {
NSString *myString = @"This is a ObjC string %f ";
myString = [[NSString stringWithFormat:myString, progress] stringByAppendingString:self.aString];
return myString.length > 100 ? NO : YES;
}
@end
</textarea></div>
<h2>
Java example
</h2>
<div><textarea
id=
"java-code"
>
import com.demo.util.MyType;
import com.demo.util.MyInterface;
public enum Enum {
VAL1, VAL2, VAL3
}
public class Class
<T
,
V
>
implements MyInterface {
public static final MyType
<T
,
V
>
member;
private class InnerClass {
public int zero() {
return 0;
}
}
@Override
public MyType method() {
return member;
}
public void method2(MyType
<T
,
V
>
value) {
method();
value.method3();
member = value;
}
}
</textarea></div>
<h2>
Scala example
</h2>
<div><textarea
id=
"scala-code"
>
object FilterTest extends App {
def filter(xs: List[Int], threshold: Int) = {
def process(ys: List[Int]): List[Int] =
if (ys.isEmpty) ys
else if (ys.head
<
threshold
)
ys.head
::
process
(
ys.tail
)
else
process
(
ys.tail
)
process
(
xs
)
}
println
(
filter
(
List
(1,
9,
2,
8,
3,
7,
4),
5))
}
</
textarea
></div>
<h2>
Kotlin mode
</h2>
<div><textarea
id=
"kotlin-code"
>
package org.wasabi.http
import java.util.concurrent.Executors
import java.net.InetSocketAddress
import org.wasabi.app.AppConfiguration
import io.netty.bootstrap.ServerBootstrap
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.nio.NioServerSocketChannel
import org.wasabi.app.AppServer
public class HttpServer(private val appServer: AppServer) {
val bootstrap: ServerBootstrap
val primaryGroup: NioEventLoopGroup
val workerGroup: NioEventLoopGroup
init {
// Define worker groups
primaryGroup = NioEventLoopGroup()
workerGroup = NioEventLoopGroup()
// Initialize bootstrap of server
bootstrap = ServerBootstrap()
bootstrap.group(primaryGroup, workerGroup)
bootstrap.channel(javaClass
<NioServerSocketChannel>
())
bootstrap.childHandler(NettyPipelineInitializer(appServer))
}
public fun start(wait: Boolean = true) {
val channel = bootstrap.bind(appServer.configuration.port)?.sync()?.channel()
if (wait) {
channel?.closeFuture()?.sync()
}
}
public fun stop() {
// Shutdown all event loops
primaryGroup.shutdownGracefully()
workerGroup.shutdownGracefully()
// Wait till all threads are terminated
primaryGroup.terminationFuture().sync()
workerGroup.terminationFuture().sync()
}
}
</textarea></div>
<h2>
Ceylon mode
</h2>
<div><textarea
id=
"ceylon-code"
>
"Produces the [[stream|Iterable]] that results from repeated
application of the given [[function|next]] to the given
[[first]] element of the stream, until the function first
returns [[finished]]. If the given function never returns
`finished`, the resulting stream is infinite.
For example:
loop(0)(2.plus).takeWhile(10.largerThan)
produces the stream `{ 0, 2, 4, 6, 8 }`."
tagged("Streams")
shared {Element+} loop
<
Element
>
(
"The first element of the resulting stream."
Element first)(
"The function that produces the next element of the
stream, given the current element. The function may
return [[finished]] to indicate the end of the
stream."
Element|Finished next(Element element))
=
>
let (start = first)
object satisfies {Element+} {
first =
>
start;
empty =
>
false;
function nextElement(Element element)
=
>
next(element);
iterator()
=
>
object satisfies Iterator
<
Element
>
{
variable Element|Finished current = start;
shared actual Element|Finished next() {
if (!is Finished result = current) {
current = nextElement(result);
return result;
}
else {
return finished;
}
}
};
};
</textarea></div>
<script>
var
cEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
c-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-csrc
"
});
var
cppEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
cpp-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-c++src
"
});
var
javaEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
java-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-java
"
});
var
objectivecEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
objectivec-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-objectivec
"
});
var
scalaEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
scala-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-scala
"
});
var
kotlinEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
kotlin-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-kotlin
"
});
var
ceylonEditor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
ceylon-code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-ceylon
"
});
var
mac
=
CodeMirror
.
keyMap
.
default
==
CodeMirror
.
keyMap
.
macDefault
;
CodeMirror
.
keyMap
.
default
[(
mac
?
"
Cmd
"
:
"
Ctrl
"
)
+
"
-Space
"
]
=
"
autocomplete
"
;
</script>
<p>
Simple mode that tries to handle C-like languages as well as it
can. Takes two configuration parameters:
<code>
keywords
</code>
, an
object whose property names are the keywords in the language,
and
<code>
useCPP
</code>
, which determines whether C preprocessor
directives are recognized.
</p>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-csrc
</code>
(C),
<code>
text/x-c++src
</code>
(C++),
<code>
text/x-java
</code>
(Java),
<code>
text/x-csharp
</code>
(C#),
<code>
text/x-objectivec
</code>
(Objective-C),
<code>
text/x-scala
</code>
(Scala),
<code>
text/x-vertex
</code>
<code>
x-shader/x-fragment
</code>
(shader programs),
<code>
text/x-squirrel
</code>
(Squirrel) and
<code>
text/x-ceylon
</code>
(Ceylon)
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clike/scala.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Scala mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/ambiance.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"clike.js"
></script>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
Scala
</a>
</ul>
</div>
<article>
<h2>
Scala mode
</h2>
<form>
<textarea
id=
"code"
name=
"code"
>
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2011, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
package scala.collection
import generic._
import mutable.{ Builder, ListBuffer }
import annotation.{tailrec, migration, bridge}
import annotation.unchecked.{ uncheckedVariance => uV }
import parallel.ParIterable
/** A template trait for traversable collections of type `Traversable[A]`.
*
* $traversableInfo
* @define mutability
* @define traversableInfo
* This is a base trait of all kinds of $mutability Scala collections. It
* implements the behavior common to all collections, in terms of a method
* `foreach` with signature:
* {{{
* def foreach[U](f: Elem => U): Unit
* }}}
* Collection classes mixing in this trait provide a concrete
* `foreach` method which traverses all the
* elements contained in the collection, applying a given function to each.
* They also need to provide a method `newBuilder`
* which creates a builder for collections of the same kind.
*
* A traversable class might or might not have two properties: strictness
* and orderedness. Neither is represented as a type.
*
* The instances of a strict collection class have all their elements
* computed before they can be used as values. By contrast, instances of
* a non-strict collection class may defer computation of some of their
* elements until after the instance is available as a value.
* A typical example of a non-strict collection class is a
*
<a
href=
"../immutable/Stream.html"
target=
"ContentFrame"
>
* `scala.collection.immutable.Stream`
</a>
.
* A more general class of examples are `TraversableViews`.
*
* If a collection is an instance of an ordered collection class, traversing
* its elements with `foreach` will always visit elements in the
* same order, even for different runs of the program. If the class is not
* ordered, `foreach` can visit elements in different orders for
* different runs (but it will keep the same order in the same run).'
*
* A typical example of a collection class which is not ordered is a
* `HashMap` of objects. The traversal order for hash maps will
* depend on the hash codes of its elements, and these hash codes might
* differ from one run to the next. By contrast, a `LinkedHashMap`
* is ordered because it's `foreach` method visits elements in the
* order they were inserted into the `HashMap`.
*
* @author Martin Odersky
* @version 2.8
* @since 2.8
* @tparam A the element type of the collection
* @tparam Repr the type of the actual collection containing the elements.
*
* @define Coll Traversable
* @define coll traversable collection
*/
trait TraversableLike[+A, +Repr] extends HasNewBuilder[A, Repr]
with FilterMonadic[A, Repr]
with TraversableOnce[A]
with GenTraversableLike[A, Repr]
with Parallelizable[A, ParIterable[A]]
{
self =>
import Traversable.breaks._
/** The type implementing this traversable */
protected type Self = Repr
/** The collection of type $coll underlying this `TraversableLike` object.
* By default this is implemented as the `TraversableLike` object itself,
* but this can be overridden.
*/
def repr: Repr = this.asInstanceOf[Repr]
/** The underlying collection seen as an instance of `$Coll`.
* By default this is implemented as the current collection object itself,
* but this can be overridden.
*/
protected[this] def thisCollection: Traversable[A] = this.asInstanceOf[Traversable[A]]
/** A conversion from collections of type `Repr` to `$Coll` objects.
* By default this is implemented as just a cast, but this can be overridden.
*/
protected[this] def toCollection(repr: Repr): Traversable[A] = repr.asInstanceOf[Traversable[A]]
/** Creates a new builder for this collection type.
*/
protected[this] def newBuilder: Builder[A, Repr]
protected[this] def parCombiner = ParIterable.newCombiner[A]
/** Applies a function `f` to all elements of this $coll.
*
* Note: this method underlies the implementation of most other bulk operations.
* It's important to implement this method in an efficient way.
*
*
* @param f the function that is applied for its side-effect to every element.
* The result of function `f` is discarded.
*
* @tparam U the type parameter describing the result of function `f`.
* This result will always be ignored. Typically `U` is `Unit`,
* but this is not necessary.
*
* @usecase def foreach(f: A => Unit): Unit
*/
def foreach[U](f: A => U): Unit
/** Tests whether this $coll is empty.
*
* @return `true` if the $coll contain no elements, `false` otherwise.
*/
def isEmpty: Boolean = {
var result = true
breakable {
for (x
<-
this
)
{
result =
false
break
}
}
result
}
/
**
Tests
whether
this
$
coll
is
known
to
have
a
finite
size.
*
All
strict
collections
are
known
to
have
finite
size.
For
a
non-strict
collection
*
such
as
`
Stream
`,
the
predicate
returns
`
true
`
if
all
elements
have
been
computed.
*
It
returns
`
false
`
if
the
stream
is
not
yet
evaluated
to
the
end.
*
*
Note:
many
collection
methods
will
not
work
on
collections
of
infinite
sizes.
*
*
@
return
`
true
`
if
this
collection
is
known
to
have
finite
size
,
`
false
`
otherwise.
*
/
def
hasDefiniteSize =
true
def
++[
B
>
: A, That](that: GenTraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That = {
val b = bf(repr)
if (that.isInstanceOf[IndexedSeqLike[_, _]]) b.sizeHint(this, that.seq.size)
b ++= thisCollection
b ++= that.seq
b.result
}
@bridge
def ++[B >: A, That](that: TraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That =
++(that: GenTraversableOnce[B])(bf)
/** Concatenates this $coll with the elements of a traversable collection.
* It differs from ++ in that the right operand determines the type of the
* resulting collection rather than the left one.
*
* @param that the traversable to append.
* @tparam B the element type of the returned collection.
* @tparam That $thatinfo
* @param bf $bfinfo
* @return a new collection of type `That` which contains all elements
* of this $coll followed by all elements of `that`.
*
* @usecase def ++:[B](that: TraversableOnce[B]): $Coll[B]
*
* @return a new $coll which contains all elements of this $coll
* followed by all elements of `that`.
*/
def ++:[B >: A, That](that: TraversableOnce[B])(implicit bf: CanBuildFrom[Repr, B, That]): That = {
val b = bf(repr)
if (that.isInstanceOf[IndexedSeqLike[_, _]]) b.sizeHint(this, that.size)
b ++= that
b ++= thisCollection
b.result
}
/** This overload exists because: for the implementation of ++: we should reuse
* that of ++ because many collections override it with more efficient versions.
* Since TraversableOnce has no '++' method, we have to implement that directly,
* but Traversable and down can use the overload.
*/
def ++:[B >: A, That](that: Traversable[B])(implicit bf: CanBuildFrom[Repr, B, That]): That =
(that ++ seq)(breakOut)
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
val b = bf(repr)
b.sizeHint(this)
for (x
<-
this
)
b
+=
f
(
x
)
b.result
}
def
flatMap
[
B
,
That
](
f:
A =
>
GenTraversableOnce[B])(implicit
bf:
CanBuildFrom
[
Repr
,
B
,
That
])
:
That =
{
val
b =
bf(repr)
for
(
x
<
-
this
)
b
++=
f
(
x
).
seq
b.result
}
/
**
Selects
all
elements
of
this
$
coll
which
satisfy
a
predicate.
*
*
@
param
p
the
predicate
used
to
test
elements.
*
@
return
a
new
$
coll
consisting
of
all
elements
of
this
$
coll
that
satisfy
the
given
*
predicate
`
p
`.
The
order
of
the
elements
is
preserved.
*
/
def
filter
(
p:
A =
>
Boolean):
Repr =
{
val
b =
newBuilder
for
(
x
<
-
this
)
if
(
p
(
x
))
b
+=
x
b.result
}
/
**
Selects
all
elements
of
this
$
coll
which
do
not
satisfy
a
predicate.
*
*
@
param
p
the
predicate
used
to
test
elements.
*
@
return
a
new
$
coll
consisting
of
all
elements
of
this
$
coll
that
do
not
satisfy
the
given
*
predicate
`
p
`.
The
order
of
the
elements
is
preserved.
*
/
def
filterNot
(
p:
A =
>
Boolean):
Repr =
filter(!p(_))
def
collect
[
B
,
That
](
pf:
PartialFunction
[
A
,
B
])(
implicit
bf:
CanBuildFrom
[
Repr
,
B
,
That
])
:
That =
{
val
b =
bf(repr)
for
(
x
<
-
this
)
if
(
pf.isDefinedAt
(
x
))
b
+=
pf
(
x
)
b.result
}
/
**
Builds
a
new
collection
by
applying
an
option-valued
function
to
all
*
elements
of
this
$
coll
on
which
the
function
is
defined.
*
*
@
param
f
the
option-valued
function
which
filters
and
maps
the
$
coll.
*
@
tparam
B
the
element
type
of
the
returned
collection.
*
@
tparam
That
$
thatinfo
*
@
param
bf
$
bfinfo
*
@
return
a
new
collection
of
type
`
That
`
resulting
from
applying
the
option-valued
function
*
`
f
`
to
each
element
and
collecting
all
defined
results.
*
The
order
of
the
elements
is
preserved.
*
*
@
usecase
def
filterMap
[
B
](
f:
A =
>
Option[B]):
$
Coll
[
B
]
*
*
@
param
pf
the
partial
function
which
filters
and
maps
the
$
coll.
*
@
return
a
new
$
coll
resulting
from
applying
the
given
option-valued
function
*
`
f
`
to
each
element
and
collecting
all
defined
results.
*
The
order
of
the
elements
is
preserved.
def
filterMap
[
B
,
That
](
f:
A =
>
Option[B])(implicit
bf:
CanBuildFrom
[
Repr
,
B
,
That
])
:
That =
{
val
b =
bf(repr)
for
(
x
<
-
this
)
f
(
x
)
match
{
case
Some(y) =
>
b
+=
y
case
_ =
>
}
b.result
}
*
/
/
**
Partitions
this
$
coll
in
two
${
coll
}
s
according
to
a
predicate.
*
*
@
param
p
the
predicate
on
which
to
partition.
*
@
return
a
pair
of
${
coll
}
s:
the
first
$
coll
consists
of
all
elements
that
*
satisfy
the
predicate
`
p
`
and
the
second
$
coll
consists
of
all
elements
*
that
don
'
t.
The
relative
order
of
the
elements
in
the
resulting
${
coll
}
s
*
is
the
same
as
in
the
original
$
coll.
*
/
def
partition
(
p:
A =
>
Boolean):
(
Repr
,
Repr) =
{
val
l
,
r =
newBuilder
for
(
x
<
-
this
)
(
if
(
p
(
x
))
l
else
r
)
+=
x
(
l.result
,
r.result
)
}
def
groupBy
[
K
](
f:
A =
>
K):
immutable.Map
[
K
,
Repr] =
{
val
m =
mutable.Map.empty[K,
Builder
[
A
,
Repr
]]
for
(
elem
<
-
this
)
{
val
key =
f(elem)
val
bldr =
m.getOrElseUpdate(key,
newBuilder
)
bldr
+=
elem
}
val
b =
immutable.Map.newBuilder[K,
Repr
]
for
((
k
,
v
)
<
-
m
)
b
+=
((
k
,
v.result
))
b.result
}
/
**
Tests
whether
a
predicate
holds
for
all
elements
of
this
$
coll.
*
*
$
mayNotTerminateInf
*
*
@
param
p
the
predicate
used
to
test
elements.
*
@
return
`
true
`
if
the
given
predicate
`
p
`
holds
for
all
elements
*
of
this
$
coll
,
otherwise
`
false
`.
*
/
def
forall
(
p:
A =
>
Boolean):
Boolean =
{
var
result =
true
breakable
{
for
(
x
<
-
this
)
if
(!
p
(
x
))
{
result =
false;
break
}
}
result
}
/
**
Tests
whether
a
predicate
holds
for
some
of
the
elements
of
this
$
coll.
*
*
$
mayNotTerminateInf
*
*
@
param
p
the
predicate
used
to
test
elements.
*
@
return
`
true
`
if
the
given
predicate
`
p
`
holds
for
some
of
the
*
elements
of
this
$
coll
,
otherwise
`
false
`.
*
/
def
exists
(
p:
A =
>
Boolean):
Boolean =
{
var
result =
false
breakable
{
for
(
x
<
-
this
)
if
(
p
(
x
))
{
result =
true;
break
}
}
result
}
/
**
Finds
the
first
element
of
the
$
coll
satisfying
a
predicate
,
if
any.
*
*
$
mayNotTerminateInf
*
$
orderDependent
*
*
@
param
p
the
predicate
used
to
test
elements.
*
@
return
an
option
value
containing
the
first
element
in
the
$
coll
*
that
satisfies
`
p
`,
or
`
None
`
if
none
exists.
*
/
def
find
(
p:
A =
>
Boolean):
Option[A] =
{
var
result:
Option[A] =
None
breakable
{
for
(
x
<
-
this
)
if
(
p
(
x
))
{
result =
Some(x);
break
}
}
result
}
def
scan
[
B
>
: A, That](z: B)(op: (B, B) => B)(implicit cbf: CanBuildFrom[Repr, B, That]): That = scanLeft(z)(op)
def scanLeft[B, That](z: B)(op: (B, A) => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
val b = bf(repr)
b.sizeHint(this, 1)
var acc = z
b += acc
for (x
<-
this
)
{
acc =
op(acc,
x
);
b
+=
acc
}
b.result
}
@
migration
(2,
9,
"
This
scanRight
definition
has
changed
in
2.9.\
n
"
+
"
The
previous
behavior
can
be
reproduced
with
scanRight.reverse.
"
)
def
scanRight
[
B
,
That
](
z:
B
)(
op:
(
A
,
B) =
>
B)(implicit
bf:
CanBuildFrom
[
Repr
,
B
,
That
])
:
That =
{
var
scanned =
List(z)
var
acc =
z
for
(
x
<
-
reversed
)
{
acc =
op(x,
acc
)
scanned
::=
acc
}
val
b =
bf(repr)
for
(
elem
<
-
scanned
)
b
+=
elem
b.result
}
/
**
Selects
the
first
element
of
this
$
coll.
*
$
orderDependent
*
@
return
the
first
element
of
this
$
coll.
*
@
throws
`
NoSuchElementException
`
if
the
$
coll
is
empty.
*
/
def
head:
A =
{
var
result:
() =
>
A
=
() =
>
throw
new
NoSuchElementException
breakable
{
for
(
x
<
-
this
)
{
result =
()
=
>
x
break
}
}
result()
}
/** Optionally selects the first element.
* $orderDependent
* @return the first element of this $coll if it is nonempty, `None` if it is empty.
*/
def headOption: Option[A] = if (isEmpty) None else Some(head)
/** Selects all elements except the first.
* $orderDependent
* @return a $coll consisting of all elements of this $coll
* except the first one.
* @throws `UnsupportedOperationException` if the $coll is empty.
*/
override def tail: Repr = {
if (isEmpty) throw new UnsupportedOperationException("empty.tail")
drop(1)
}
/** Selects the last element.
* $orderDependent
* @return The last element of this $coll.
* @throws NoSuchElementException If the $coll is empty.
*/
def last: A = {
var lst = head
for (x
<-
this
)
lst =
x
lst
}
/
**
Optionally
selects
the
last
element.
*
$
orderDependent
*
@
return
the
last
element
of
this
$
coll
$
if
it
is
nonempty
,
`
None
`
if
it
is
empty.
*
/
def
lastOption:
Option[A] =
if
(
isEmpty
)
None
else
Some
(
last
)
/
**
Selects
all
elements
except
the
last.
*
$
orderDependent
*
@
return
a
$
coll
consisting
of
all
elements
of
this
$
coll
*
except
the
last
one.
*
@
throws
`
UnsupportedOperationException
`
if
the
$
coll
is
empty.
*
/
def
init:
Repr =
{
if
(
isEmpty
)
throw
new
UnsupportedOperationException
("
empty.init
")
var
lst =
head
var
follow =
false
val
b =
newBuilder
b.sizeHint
(
this
,
-1
)
for
(
x
<
-
this.seq
)
{
if
(
follow
)
b
+=
lst
else
follow =
true
lst =
x
}
b.result
}
def
take
(
n:
Int
)
:
Repr =
slice(0,
n
)
def
drop
(
n:
Int
)
:
Repr =
if
(
n
<=
0)
{
val
b =
newBuilder
b.sizeHint
(
this
)
b
++=
thisCollection
result
}
else
sliceWithKnownDelta
(
n
,
Int.MaxValue
,
-n
)
def
slice
(
from:
Int
,
until:
Int
)
:
Repr =
sliceWithKnownBound(math.max(from,
0),
until
)
//
Precondition:
from
>
= 0, until > 0, builder already configured for building.
private[this] def sliceInternal(from: Int, until: Int, b: Builder[A, Repr]): Repr = {
var i = 0
breakable {
for (x
<-
this.seq
)
{
if
(
i
>
= from) b += x
i += 1
if (i >= until) break
}
}
b.result
}
// Precondition: from >= 0
private[scala] def sliceWithKnownDelta(from: Int, until: Int, delta: Int): Repr = {
val b = newBuilder
if (until
<
=
from
)
b.result
else
{
b.sizeHint
(
this
,
delta
)
sliceInternal
(
from
,
until
,
b
)
}
}
//
Precondition:
from
>
= 0
private[scala] def sliceWithKnownBound(from: Int, until: Int): Repr = {
val b = newBuilder
if (until
<
=
from
)
b.result
else
{
b.sizeHintBounded
(
until
-
from
,
this
)
sliceInternal
(
from
,
until
,
b
)
}
}
def
takeWhile
(
p:
A =
>
Boolean):
Repr =
{
val
b =
newBuilder
breakable
{
for
(
x
<
-
this
)
{
if
(!
p
(
x
))
break
b
+=
x
}
}
b.result
}
def
dropWhile
(
p:
A =
>
Boolean):
Repr =
{
val
b =
newBuilder
var
go =
false
for
(
x
<
-
this
)
{
if
(!
p
(
x
))
go =
true
if
(
go
)
b
+=
x
}
b.result
}
def
span
(
p:
A =
>
Boolean):
(
Repr
,
Repr) =
{
val
l
,
r =
newBuilder
var
toLeft =
true
for
(
x
<
-
this
)
{
toLeft =
toLeft
&&
p
(
x
)
(
if
(
toLeft
)
l
else
r
)
+=
x
}
(
l.result
,
r.result
)
}
def
splitAt
(
n:
Int
)
:
(
Repr
,
Repr) =
{
val
l
,
r =
newBuilder
l.sizeHintBounded
(
n
,
this
)
if
(
n
>
= 0) r.sizeHint(this, -n)
var i = 0
for (x
<-
this
)
{
(
if
(
i
<
n
)
l
else
r
)
+=
x
i
+=
1
}
(
l.result
,
r.result
)
}
/
**
Iterates
over
the
tails
of
this
$
coll.
The
first
value
will
be
this
*
$
coll
and
the
final
one
will
be
an
empty
$
coll
,
with
the
intervening
*
values
the
results
of
successive
applications
of
`
tail
`.
*
*
@
return
an
iterator
over
all
the
tails
of
this
$
coll
*
@
example
`
List
(1,2,3
).tails =
Iterator(List(1,2,3),
List
(2,3),
List
(3),
Nil
)`
*
/
def
tails:
Iterator[Repr] =
iterateUntilEmpty(_.tail)
/
**
Iterates
over
the
inits
of
this
$
coll.
The
first
value
will
be
this
*
$
coll
and
the
final
one
will
be
an
empty
$
coll
,
with
the
intervening
*
values
the
results
of
successive
applications
of
`
init
`.
*
*
@
return
an
iterator
over
all
the
inits
of
this
$
coll
*
@
example
`
List
(1,2,3
).inits =
Iterator(List(1,2,3),
List
(1,2),
List
(1),
Nil
)`
*
/
def
inits:
Iterator[Repr] =
iterateUntilEmpty(_.init)
/
**
Copies
elements
of
this
$
coll
to
an
array.
*
Fills
the
given
array
`
xs
`
with
at
most
`
len
`
elements
of
*
this
$
coll
,
starting
at
position
`
start
`.
*
Copying
will
stop
once
either
the
end
of
the
current
$
coll
is
reached
,
*
or
the
end
of
the
array
is
reached
,
or
`
len
`
elements
have
been
copied.
*
*
$
willNotTerminateInf
*
*
@
param
xs
the
array
to
fill.
*
@
param
start
the
starting
index.
*
@
param
len
the
maximal
number
of
elements
to
copy.
*
@
tparam
B
the
type
of
the
elements
of
the
array.
*
*
*
@
usecase
def
copyToArray
(
xs:
Array
[
A
],
start:
Int
,
len:
Int
)
:
Unit
*
/
def
copyToArray
[
B
>
: A](xs: Array[B], start: Int, len: Int) {
var i = start
val end = (start + len) min xs.length
breakable {
for (x
<-
this
)
{
if
(
i
>
= end) break
xs(i) = x
i += 1
}
}
}
def toTraversable: Traversable[A] = thisCollection
def toIterator: Iterator[A] = toStream.iterator
def toStream: Stream[A] = toBuffer.toStream
/** Converts this $coll to a string.
*
* @return a string representation of this collection. By default this
* string consists of the `stringPrefix` of this $coll,
* followed by all elements separated by commas and enclosed in parentheses.
*/
override def toString = mkString(stringPrefix + "(", ", ", ")")
/** Defines the prefix of this object's `toString` representation.
*
* @return a string representation which starts the result of `toString`
* applied to this $coll. By default the string prefix is the
* simple name of the collection class $coll.
*/
def stringPrefix : String = {
var string = repr.asInstanceOf[AnyRef].getClass.getName
val idx1 = string.lastIndexOf('.' : Int)
if (idx1 != -1) string = string.substring(idx1 + 1)
val idx2 = string.indexOf('$')
if (idx2 != -1) string = string.substring(0, idx2)
string
}
/** Creates a non-strict view of this $coll.
*
* @return a non-strict view of this $coll.
*/
def view = new TraversableView[A, Repr] {
protected lazy val underlying = self.repr
override def foreach[U](f: A => U) = self foreach f
}
/** Creates a non-strict view of a slice of this $coll.
*
* Note: the difference between `view` and `slice` is that `view` produces
* a view of the current $coll, whereas `slice` produces a new $coll.
*
* Note: `view(from, to)` is equivalent to `view.slice(from, to)`
* $orderDependent
*
* @param from the index of the first element of the view
* @param until the index of the element following the view
* @return a non-strict view of a slice of this $coll, starting at index `from`
* and extending up to (but not including) index `until`.
*/
def view(from: Int, until: Int): TraversableView[A, Repr] = view.slice(from, until)
/** Creates a non-strict filter of this $coll.
*
* Note: the difference between `c filter p` and `c withFilter p` is that
* the former creates a new collection, whereas the latter only
* restricts the domain of subsequent `map`, `flatMap`, `foreach`,
* and `withFilter` operations.
* $orderDependent
*
* @param p the predicate used to test elements.
* @return an object of class `WithFilter`, which supports
* `map`, `flatMap`, `foreach`, and `withFilter` operations.
* All these operations apply to those elements of this $coll which
* satisfy the predicate `p`.
*/
def withFilter(p: A => Boolean): FilterMonadic[A, Repr] = new WithFilter(p)
/** A class supporting filtered operations. Instances of this class are
* returned by method `withFilter`.
*/
class WithFilter(p: A => Boolean) extends FilterMonadic[A, Repr] {
/** Builds a new collection by applying a function to all elements of the
* outer $coll containing this `WithFilter` instance that satisfy predicate `p`.
*
* @param f the function to apply to each element.
* @tparam B the element type of the returned collection.
* @tparam That $thatinfo
* @param bf $bfinfo
* @return a new collection of type `That` resulting from applying
* the given function `f` to each element of the outer $coll
* that satisfies predicate `p` and collecting the results.
*
* @usecase def map[B](f: A => B): $Coll[B]
*
* @return a new $coll resulting from applying the given function
* `f` to each element of the outer $coll that satisfies
* predicate `p` and collecting the results.
*/
def map[B, That](f: A => B)(implicit bf: CanBuildFrom[Repr, B, That]): That = {
val b = bf(repr)
for (x
<-
self
)
if
(
p
(
x
))
b
+=
f
(
x
)
b.result
}
/
**
Builds
a
new
collection
by
applying
a
function
to
all
elements
of
the
*
outer
$
coll
containing
this
`
WithFilter
`
instance
that
satisfy
*
predicate
`
p
`
and
concatenating
the
results.
*
*
@
param
f
the
function
to
apply
to
each
element.
*
@
tparam
B
the
element
type
of
the
returned
collection.
*
@
tparam
That
$
thatinfo
*
@
param
bf
$
bfinfo
*
@
return
a
new
collection
of
type
`
That
`
resulting
from
applying
*
the
given
collection-valued
function
`
f
`
to
each
element
*
of
the
outer
$
coll
that
satisfies
predicate
`
p
`
and
*
concatenating
the
results.
*
*
@
usecase
def
flatMap
[
B
](
f:
A =
>
TraversableOnce[B]):
$
Coll
[
B
]
*
*
@
return
a
new
$
coll
resulting
from
applying
the
given
collection-valued
function
*
`
f
`
to
each
element
of
the
outer
$
coll
that
satisfies
predicate
`
p
`
and
concatenating
the
results.
*
/
def
flatMap
[
B
,
That
](
f:
A =
>
GenTraversableOnce[B])(implicit
bf:
CanBuildFrom
[
Repr
,
B
,
That
])
:
That =
{
val
b =
bf(repr)
for
(
x
<
-
self
)
if
(
p
(
x
))
b
++=
f
(
x
).
seq
b.result
}
/
**
Applies
a
function
`
f
`
to
all
elements
of
the
outer
$
coll
containing
*
this
`
WithFilter
`
instance
that
satisfy
predicate
`
p
`.
*
*
@
param
f
the
function
that
is
applied
for
its
side-effect
to
every
element.
*
The
result
of
function
`
f
`
is
discarded.
*
*
@
tparam
U
the
type
parameter
describing
the
result
of
function
`
f
`.
*
This
result
will
always
be
ignored.
Typically
`
U
`
is
`
Unit
`,
*
but
this
is
not
necessary.
*
*
@
usecase
def
foreach
(
f:
A =
>
Unit):
Unit
*
/
def
foreach
[
U
](
f:
A =
>
U):
Unit =
for
(
x
<
-
self
)
if
(
p
(
x
))
f
(
x
)
/
**
Further
refines
the
filter
for
this
$
coll.
*
*
@
param
q
the
predicate
used
to
test
elements.
*
@
return
an
object
of
class
`
WithFilter
`,
which
supports
*
`
map
`,
`
flatMap
`,
`
foreach
`,
and
`
withFilter
`
operations.
*
All
these
operations
apply
to
those
elements
of
this
$
coll
which
*
satisfy
the
predicate
`
q
`
in
addition
to
the
predicate
`
p
`.
*
/
def
withFilter
(
q:
A =
>
Boolean):
WithFilter =
new
WithFilter(x =
>
p(x)
&&
q
(
x
))
}
//
A
helper
for
tails
and
inits.
private
def
iterateUntilEmpty
(
f:
Traversable
[
A
@
uV] =
>
Traversable[A
@
uV
])
:
Iterator[Repr] =
{
val
it =
Iterator.iterate(thisCollection)(f)
takeWhile
(x =
>
!x.isEmpty)
it
++
Iterator
(
Nil
)
map
(
newBuilder
++=
_
result
)
}
}
</
textarea
>
</form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
theme
:
"
ambiance
"
,
mode
:
"
text/x-scala
"
});
</script>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clike/test.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
()
{
var
mode
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
text/x-c
"
);
function
MT
(
name
)
{
test
.
mode
(
name
,
mode
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MT
(
"
indent
"
,
"
[type void] [def foo]([type void*] [variable a], [type int] [variable b]) {
"
,
"
[type int] [variable c] [operator =] [variable b] [operator +]
"
,
"
[number 1];
"
,
"
[keyword return] [operator *][variable a];
"
,
"
}
"
);
MT
(
"
indent_switch
"
,
"
[keyword switch] ([variable x]) {
"
,
"
[keyword case] [number 10]:
"
,
"
[keyword return] [number 20];
"
,
"
[keyword default]:
"
,
"
[variable printf]([string
\"
foo %c
\"
], [variable x]);
"
,
"
}
"
);
MT
(
"
def
"
,
"
[type void] [def foo]() {}
"
,
"
[keyword struct] [def bar]{}
"
,
"
[keyword enum] [def zot]{}
"
,
"
[keyword union] [def ugh]{}
"
,
"
[type int] [type *][def baz]() {}
"
);
MT
(
"
def_new_line
"
,
"
::[variable std]::[variable SomeTerribleType][operator <][variable T][operator >]
"
,
"
[def SomeLongMethodNameThatDoesntFitIntoOneLine]([keyword const] [variable MyType][operator &] [variable param]) {}
"
)
MT
(
"
double_block
"
,
"
[keyword for] (;;)
"
,
"
[keyword for] (;;)
"
,
"
[variable x][operator ++];
"
,
"
[keyword return];
"
);
MT
(
"
preprocessor
"
,
"
[meta #define FOO 3]
"
,
"
[type int] [variable foo];
"
,
"
[meta #define BAR
\\
]
"
,
"
[meta 4]
"
,
"
[type unsigned] [type int] [variable bar] [operator =] [number 8];
"
,
"
[meta #include <baz> ][comment // comment]
"
)
MT
(
"
c_underscores
"
,
"
[builtin __FOO];
"
,
"
[builtin _Complex];
"
,
"
[builtin __aName];
"
,
"
[variable _aName];
"
);
MT
(
"
c_types
"
,
"
[type int];
"
,
"
[type long];
"
,
"
[type char];
"
,
"
[type short];
"
,
"
[type double];
"
,
"
[type float];
"
,
"
[type unsigned];
"
,
"
[type signed];
"
,
"
[type void];
"
,
"
[type bool];
"
,
"
[type foo_t];
"
,
"
[variable foo_T];
"
,
"
[variable _t];
"
);
var
mode_cpp
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
text/x-c++src
"
);
function
MTCPP
(
name
)
{
test
.
mode
(
name
,
mode_cpp
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MTCPP
(
"
cpp14_literal
"
,
"
[number 10'000];
"
,
"
[number 0b10'000];
"
,
"
[number 0x10'000];
"
,
"
[string '100000'];
"
);
MTCPP
(
"
ctor_dtor
"
,
"
[def Foo::Foo]() {}
"
,
"
[def Foo::~Foo]() {}
"
);
MTCPP
(
"
cpp_underscores
"
,
"
[builtin __FOO];
"
,
"
[builtin _Complex];
"
,
"
[builtin __aName];
"
,
"
[variable _aName];
"
);
var
mode_objc
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
text/x-objectivec
"
);
function
MTOBJC
(
name
)
{
test
.
mode
(
name
,
mode_objc
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MTOBJC
(
"
objc_underscores
"
,
"
[builtin __FOO];
"
,
"
[builtin _Complex];
"
,
"
[builtin __aName];
"
,
"
[variable _aName];
"
);
MTOBJC
(
"
objc_interface
"
,
"
[keyword @interface] [def foo] {
"
,
"
[type int] [variable bar];
"
,
"
}
"
,
"
[keyword @property] ([keyword atomic], [keyword nullable]) [variable NSString][operator *] [variable a];
"
,
"
[keyword @property] ([keyword nonatomic], [keyword assign]) [type int] [variable b];
"
,
"
[operator -]([type instancetype])[variable initWithFoo]:([type int])[variable a]
"
+
"
[builtin NS_DESIGNATED_INITIALIZER];
"
,
"
[keyword @end]
"
);
MTOBJC
(
"
objc_implementation
"
,
"
[keyword @implementation] [def foo] {
"
,
"
[type int] [variable bar];
"
,
"
}
"
,
"
[keyword @property] ([keyword readwrite]) [type SEL] [variable a];
"
,
"
[operator -]([type instancetype])[variable initWithFoo]:([type int])[variable a] {
"
,
"
[keyword if](([keyword self] [operator =] [[[keyword super] [variable init] ]])) {}
"
,
"
[keyword return] [keyword self];
"
,
"
}
"
,
"
[keyword @end]
"
);
MTOBJC
(
"
objc_types
"
,
"
[type int];
"
,
"
[type foo_t];
"
,
"
[variable foo_T];
"
,
"
[type id];
"
,
"
[type SEL];
"
,
"
[type instancetype];
"
,
"
[type Class];
"
,
"
[type Protocol];
"
,
"
[type BOOL];
"
);
var
mode_scala
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
text/x-scala
"
);
function
MTSCALA
(
name
)
{
test
.
mode
(
"
scala_
"
+
name
,
mode_scala
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MTSCALA
(
"
nested_comments
"
,
"
[comment /*]
"
,
"
[comment But wait /* this is a nested comment */ for real]
"
,
"
[comment /**** let * me * show * you ****/]
"
,
"
[comment ///// let / me / show / you /////]
"
,
"
[comment */]
"
);
var
mode_java
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
text/x-java
"
);
function
MTJAVA
(
name
)
{
test
.
mode
(
"
java_
"
+
name
,
mode_java
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MTJAVA
(
"
types
"
,
"
[type byte];
"
,
"
[type short];
"
,
"
[type int];
"
,
"
[type long];
"
,
"
[type float];
"
,
"
[type double];
"
,
"
[type boolean];
"
,
"
[type char];
"
,
"
[type void];
"
,
"
[type Boolean];
"
,
"
[type Byte];
"
,
"
[type Character];
"
,
"
[type Double];
"
,
"
[type Float];
"
,
"
[type Integer];
"
,
"
[type Long];
"
,
"
[type Number];
"
,
"
[type Object];
"
,
"
[type Short];
"
,
"
[type String];
"
,
"
[type StringBuffer];
"
,
"
[type StringBuilder];
"
,
"
[type Void];
"
);
})();
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clojure/clojure.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
===
"
object
"
&&
typeof
module
===
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
===
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
clojure
"
,
function
(
options
)
{
var
atoms
=
[
"
false
"
,
"
nil
"
,
"
true
"
];
var
specialForms
=
[
"
.
"
,
"
catch
"
,
"
def
"
,
"
do
"
,
"
if
"
,
"
monitor-enter
"
,
"
monitor-exit
"
,
"
new
"
,
"
quote
"
,
"
recur
"
,
"
set!
"
,
"
throw
"
,
"
try
"
,
"
var
"
];
var
coreSymbols
=
[
"
*
"
,
"
*'
"
,
"
*1
"
,
"
*2
"
,
"
*3
"
,
"
*agent*
"
,
"
*allow-unresolved-vars*
"
,
"
*assert*
"
,
"
*clojure-version*
"
,
"
*command-line-args*
"
,
"
*compile-files*
"
,
"
*compile-path*
"
,
"
*compiler-options*
"
,
"
*data-readers*
"
,
"
*default-data-reader-fn*
"
,
"
*e
"
,
"
*err*
"
,
"
*file*
"
,
"
*flush-on-newline*
"
,
"
*fn-loader*
"
,
"
*in*
"
,
"
*math-context*
"
,
"
*ns*
"
,
"
*out*
"
,
"
*print-dup*
"
,
"
*print-length*
"
,
"
*print-level*
"
,
"
*print-meta*
"
,
"
*print-namespace-maps*
"
,
"
*print-readably*
"
,
"
*read-eval*
"
,
"
*reader-resolver*
"
,
"
*source-path*
"
,
"
*suppress-read*
"
,
"
*unchecked-math*
"
,
"
*use-context-classloader*
"
,
"
*verbose-defrecords*
"
,
"
*warn-on-reflection*
"
,
"
+
"
,
"
+'
"
,
"
-
"
,
"
-'
"
,
"
->
"
,
"
->>
"
,
"
->ArrayChunk
"
,
"
->Eduction
"
,
"
->Vec
"
,
"
->VecNode
"
,
"
->VecSeq
"
,
"
-cache-protocol-fn
"
,
"
-reset-methods
"
,
"
..
"
,
"
/
"
,
"
<
"
,
"
<=
"
,
"
=
"
,
"
==
"
,
"
>
"
,
"
>=
"
,
"
EMPTY-NODE
"
,
"
Inst
"
,
"
StackTraceElement->vec
"
,
"
Throwable->map
"
,
"
accessor
"
,
"
aclone
"
,
"
add-classpath
"
,
"
add-watch
"
,
"
agent
"
,
"
agent-error
"
,
"
agent-errors
"
,
"
aget
"
,
"
alength
"
,
"
alias
"
,
"
all-ns
"
,
"
alter
"
,
"
alter-meta!
"
,
"
alter-var-root
"
,
"
amap
"
,
"
ancestors
"
,
"
and
"
,
"
any?
"
,
"
apply
"
,
"
areduce
"
,
"
array-map
"
,
"
as->
"
,
"
aset
"
,
"
aset-boolean
"
,
"
aset-byte
"
,
"
aset-char
"
,
"
aset-double
"
,
"
aset-float
"
,
"
aset-int
"
,
"
aset-long
"
,
"
aset-short
"
,
"
assert
"
,
"
assoc
"
,
"
assoc!
"
,
"
assoc-in
"
,
"
associative?
"
,
"
atom
"
,
"
await
"
,
"
await-for
"
,
"
await1
"
,
"
bases
"
,
"
bean
"
,
"
bigdec
"
,
"
bigint
"
,
"
biginteger
"
,
"
binding
"
,
"
bit-and
"
,
"
bit-and-not
"
,
"
bit-clear
"
,
"
bit-flip
"
,
"
bit-not
"
,
"
bit-or
"
,
"
bit-set
"
,
"
bit-shift-left
"
,
"
bit-shift-right
"
,
"
bit-test
"
,
"
bit-xor
"
,
"
boolean
"
,
"
boolean-array
"
,
"
boolean?
"
,
"
booleans
"
,
"
bound-fn
"
,
"
bound-fn*
"
,
"
bound?
"
,
"
bounded-count
"
,
"
butlast
"
,
"
byte
"
,
"
byte-array
"
,
"
bytes
"
,
"
bytes?
"
,
"
case
"
,
"
cast
"
,
"
cat
"
,
"
char
"
,
"
char-array
"
,
"
char-escape-string
"
,
"
char-name-string
"
,
"
char?
"
,
"
chars
"
,
"
chunk
"
,
"
chunk-append
"
,
"
chunk-buffer
"
,
"
chunk-cons
"
,
"
chunk-first
"
,
"
chunk-next
"
,
"
chunk-rest
"
,
"
chunked-seq?
"
,
"
class
"
,
"
class?
"
,
"
clear-agent-errors
"
,
"
clojure-version
"
,
"
coll?
"
,
"
comment
"
,
"
commute
"
,
"
comp
"
,
"
comparator
"
,
"
compare
"
,
"
compare-and-set!
"
,
"
compile
"
,
"
complement
"
,
"
completing
"
,
"
concat
"
,
"
cond
"
,
"
cond->
"
,
"
cond->>
"
,
"
condp
"
,
"
conj
"
,
"
conj!
"
,
"
cons
"
,
"
constantly
"
,
"
construct-proxy
"
,
"
contains?
"
,
"
count
"
,
"
counted?
"
,
"
create-ns
"
,
"
create-struct
"
,
"
cycle
"
,
"
dec
"
,
"
dec'
"
,
"
decimal?
"
,
"
declare
"
,
"
dedupe
"
,
"
default-data-readers
"
,
"
definline
"
,
"
definterface
"
,
"
defmacro
"
,
"
defmethod
"
,
"
defmulti
"
,
"
defn
"
,
"
defn-
"
,
"
defonce
"
,
"
defprotocol
"
,
"
defrecord
"
,
"
defstruct
"
,
"
deftype
"
,
"
delay
"
,
"
delay?
"
,
"
deliver
"
,
"
denominator
"
,
"
deref
"
,
"
derive
"
,
"
descendants
"
,
"
destructure
"
,
"
disj
"
,
"
disj!
"
,
"
dissoc
"
,
"
dissoc!
"
,
"
distinct
"
,
"
distinct?
"
,
"
doall
"
,
"
dorun
"
,
"
doseq
"
,
"
dosync
"
,
"
dotimes
"
,
"
doto
"
,
"
double
"
,
"
double-array
"
,
"
double?
"
,
"
doubles
"
,
"
drop
"
,
"
drop-last
"
,
"
drop-while
"
,
"
eduction
"
,
"
empty
"
,
"
empty?
"
,
"
ensure
"
,
"
ensure-reduced
"
,
"
enumeration-seq
"
,
"
error-handler
"
,
"
error-mode
"
,
"
eval
"
,
"
even?
"
,
"
every-pred
"
,
"
every?
"
,
"
ex-data
"
,
"
ex-info
"
,
"
extend
"
,
"
extend-protocol
"
,
"
extend-type
"
,
"
extenders
"
,
"
extends?
"
,
"
false?
"
,
"
ffirst
"
,
"
file-seq
"
,
"
filter
"
,
"
filterv
"
,
"
find
"
,
"
find-keyword
"
,
"
find-ns
"
,
"
find-protocol-impl
"
,
"
find-protocol-method
"
,
"
find-var
"
,
"
first
"
,
"
flatten
"
,
"
float
"
,
"
float-array
"
,
"
float?
"
,
"
floats
"
,
"
flush
"
,
"
fn
"
,
"
fn?
"
,
"
fnext
"
,
"
fnil
"
,
"
for
"
,
"
force
"
,
"
format
"
,
"
frequencies
"
,
"
future
"
,
"
future-call
"
,
"
future-cancel
"
,
"
future-cancelled?
"
,
"
future-done?
"
,
"
future?
"
,
"
gen-class
"
,
"
gen-interface
"
,
"
gensym
"
,
"
get
"
,
"
get-in
"
,
"
get-method
"
,
"
get-proxy-class
"
,
"
get-thread-bindings
"
,
"
get-validator
"
,
"
group-by
"
,
"
halt-when
"
,
"
hash
"
,
"
hash-combine
"
,
"
hash-map
"
,
"
hash-ordered-coll
"
,
"
hash-set
"
,
"
hash-unordered-coll
"
,
"
ident?
"
,
"
identical?
"
,
"
identity
"
,
"
if-let
"
,
"
if-not
"
,
"
if-some
"
,
"
ifn?
"
,
"
import
"
,
"
in-ns
"
,
"
inc
"
,
"
inc'
"
,
"
indexed?
"
,
"
init-proxy
"
,
"
inst-ms
"
,
"
inst-ms*
"
,
"
inst?
"
,
"
instance?
"
,
"
int
"
,
"
int-array
"
,
"
int?
"
,
"
integer?
"
,
"
interleave
"
,
"
intern
"
,
"
interpose
"
,
"
into
"
,
"
into-array
"
,
"
ints
"
,
"
io!
"
,
"
isa?
"
,
"
iterate
"
,
"
iterator-seq
"
,
"
juxt
"
,
"
keep
"
,
"
keep-indexed
"
,
"
key
"
,
"
keys
"
,
"
keyword
"
,
"
keyword?
"
,
"
last
"
,
"
lazy-cat
"
,
"
lazy-seq
"
,
"
let
"
,
"
letfn
"
,
"
line-seq
"
,
"
list
"
,
"
list*
"
,
"
list?
"
,
"
load
"
,
"
load-file
"
,
"
load-reader
"
,
"
load-string
"
,
"
loaded-libs
"
,
"
locking
"
,
"
long
"
,
"
long-array
"
,
"
longs
"
,
"
loop
"
,
"
macroexpand
"
,
"
macroexpand-1
"
,
"
make-array
"
,
"
make-hierarchy
"
,
"
map
"
,
"
map-entry?
"
,
"
map-indexed
"
,
"
map?
"
,
"
mapcat
"
,
"
mapv
"
,
"
max
"
,
"
max-key
"
,
"
memfn
"
,
"
memoize
"
,
"
merge
"
,
"
merge-with
"
,
"
meta
"
,
"
method-sig
"
,
"
methods
"
,
"
min
"
,
"
min-key
"
,
"
mix-collection-hash
"
,
"
mod
"
,
"
munge
"
,
"
name
"
,
"
namespace
"
,
"
namespace-munge
"
,
"
nat-int?
"
,
"
neg-int?
"
,
"
neg?
"
,
"
newline
"
,
"
next
"
,
"
nfirst
"
,
"
nil?
"
,
"
nnext
"
,
"
not
"
,
"
not-any?
"
,
"
not-empty
"
,
"
not-every?
"
,
"
not=
"
,
"
ns
"
,
"
ns-aliases
"
,
"
ns-imports
"
,
"
ns-interns
"
,
"
ns-map
"
,
"
ns-name
"
,
"
ns-publics
"
,
"
ns-refers
"
,
"
ns-resolve
"
,
"
ns-unalias
"
,
"
ns-unmap
"
,
"
nth
"
,
"
nthnext
"
,
"
nthrest
"
,
"
num
"
,
"
number?
"
,
"
numerator
"
,
"
object-array
"
,
"
odd?
"
,
"
or
"
,
"
parents
"
,
"
partial
"
,
"
partition
"
,
"
partition-all
"
,
"
partition-by
"
,
"
pcalls
"
,
"
peek
"
,
"
persistent!
"
,
"
pmap
"
,
"
pop
"
,
"
pop!
"
,
"
pop-thread-bindings
"
,
"
pos-int?
"
,
"
pos?
"
,
"
pr
"
,
"
pr-str
"
,
"
prefer-method
"
,
"
prefers
"
,
"
primitives-classnames
"
,
"
print
"
,
"
print-ctor
"
,
"
print-dup
"
,
"
print-method
"
,
"
print-simple
"
,
"
print-str
"
,
"
printf
"
,
"
println
"
,
"
println-str
"
,
"
prn
"
,
"
prn-str
"
,
"
promise
"
,
"
proxy
"
,
"
proxy-call-with-super
"
,
"
proxy-mappings
"
,
"
proxy-name
"
,
"
proxy-super
"
,
"
push-thread-bindings
"
,
"
pvalues
"
,
"
qualified-ident?
"
,
"
qualified-keyword?
"
,
"
qualified-symbol?
"
,
"
quot
"
,
"
rand
"
,
"
rand-int
"
,
"
rand-nth
"
,
"
random-sample
"
,
"
range
"
,
"
ratio?
"
,
"
rational?
"
,
"
rationalize
"
,
"
re-find
"
,
"
re-groups
"
,
"
re-matcher
"
,
"
re-matches
"
,
"
re-pattern
"
,
"
re-seq
"
,
"
read
"
,
"
read-line
"
,
"
read-string
"
,
"
reader-conditional
"
,
"
reader-conditional?
"
,
"
realized?
"
,
"
record?
"
,
"
reduce
"
,
"
reduce-kv
"
,
"
reduced
"
,
"
reduced?
"
,
"
reductions
"
,
"
ref
"
,
"
ref-history-count
"
,
"
ref-max-history
"
,
"
ref-min-history
"
,
"
ref-set
"
,
"
refer
"
,
"
refer-clojure
"
,
"
reify
"
,
"
release-pending-sends
"
,
"
rem
"
,
"
remove
"
,
"
remove-all-methods
"
,
"
remove-method
"
,
"
remove-ns
"
,
"
remove-watch
"
,
"
repeat
"
,
"
repeatedly
"
,
"
replace
"
,
"
replicate
"
,
"
require
"
,
"
reset!
"
,
"
reset-meta!
"
,
"
reset-vals!
"
,
"
resolve
"
,
"
rest
"
,
"
restart-agent
"
,
"
resultset-seq
"
,
"
reverse
"
,
"
reversible?
"
,
"
rseq
"
,
"
rsubseq
"
,
"
run!
"
,
"
satisfies?
"
,
"
second
"
,
"
select-keys
"
,
"
send
"
,
"
send-off
"
,
"
send-via
"
,
"
seq
"
,
"
seq?
"
,
"
seqable?
"
,
"
seque
"
,
"
sequence
"
,
"
sequential?
"
,
"
set
"
,
"
set-agent-send-executor!
"
,
"
set-agent-send-off-executor!
"
,
"
set-error-handler!
"
,
"
set-error-mode!
"
,
"
set-validator!
"
,
"
set?
"
,
"
short
"
,
"
short-array
"
,
"
shorts
"
,
"
shuffle
"
,
"
shutdown-agents
"
,
"
simple-ident?
"
,
"
simple-keyword?
"
,
"
simple-symbol?
"
,
"
slurp
"
,
"
some
"
,
"
some->
"
,
"
some->>
"
,
"
some-fn
"
,
"
some?
"
,
"
sort
"
,
"
sort-by
"
,
"
sorted-map
"
,
"
sorted-map-by
"
,
"
sorted-set
"
,
"
sorted-set-by
"
,
"
sorted?
"
,
"
special-symbol?
"
,
"
spit
"
,
"
split-at
"
,
"
split-with
"
,
"
str
"
,
"
string?
"
,
"
struct
"
,
"
struct-map
"
,
"
subs
"
,
"
subseq
"
,
"
subvec
"
,
"
supers
"
,
"
swap!
"
,
"
swap-vals!
"
,
"
symbol
"
,
"
symbol?
"
,
"
sync
"
,
"
tagged-literal
"
,
"
tagged-literal?
"
,
"
take
"
,
"
take-last
"
,
"
take-nth
"
,
"
take-while
"
,
"
test
"
,
"
the-ns
"
,
"
thread-bound?
"
,
"
time
"
,
"
to-array
"
,
"
to-array-2d
"
,
"
trampoline
"
,
"
transduce
"
,
"
transient
"
,
"
tree-seq
"
,
"
true?
"
,
"
type
"
,
"
unchecked-add
"
,
"
unchecked-add-int
"
,
"
unchecked-byte
"
,
"
unchecked-char
"
,
"
unchecked-dec
"
,
"
unchecked-dec-int
"
,
"
unchecked-divide-int
"
,
"
unchecked-double
"
,
"
unchecked-float
"
,
"
unchecked-inc
"
,
"
unchecked-inc-int
"
,
"
unchecked-int
"
,
"
unchecked-long
"
,
"
unchecked-multiply
"
,
"
unchecked-multiply-int
"
,
"
unchecked-negate
"
,
"
unchecked-negate-int
"
,
"
unchecked-remainder-int
"
,
"
unchecked-short
"
,
"
unchecked-subtract
"
,
"
unchecked-subtract-int
"
,
"
underive
"
,
"
unquote
"
,
"
unquote-splicing
"
,
"
unreduced
"
,
"
unsigned-bit-shift-right
"
,
"
update
"
,
"
update-in
"
,
"
update-proxy
"
,
"
uri?
"
,
"
use
"
,
"
uuid?
"
,
"
val
"
,
"
vals
"
,
"
var-get
"
,
"
var-set
"
,
"
var?
"
,
"
vary-meta
"
,
"
vec
"
,
"
vector
"
,
"
vector-of
"
,
"
vector?
"
,
"
volatile!
"
,
"
volatile?
"
,
"
vreset!
"
,
"
vswap!
"
,
"
when
"
,
"
when-first
"
,
"
when-let
"
,
"
when-not
"
,
"
when-some
"
,
"
while
"
,
"
with-bindings
"
,
"
with-bindings*
"
,
"
with-in-str
"
,
"
with-loading-context
"
,
"
with-local-vars
"
,
"
with-meta
"
,
"
with-open
"
,
"
with-out-str
"
,
"
with-precision
"
,
"
with-redefs
"
,
"
with-redefs-fn
"
,
"
xml-seq
"
,
"
zero?
"
,
"
zipmap
"
];
var
haveBodyParameter
=
[
"
->
"
,
"
->>
"
,
"
as->
"
,
"
binding
"
,
"
bound-fn
"
,
"
case
"
,
"
catch
"
,
"
comment
"
,
"
cond
"
,
"
cond->
"
,
"
cond->>
"
,
"
condp
"
,
"
def
"
,
"
definterface
"
,
"
defmethod
"
,
"
defn
"
,
"
defmacro
"
,
"
defprotocol
"
,
"
defrecord
"
,
"
defstruct
"
,
"
deftype
"
,
"
do
"
,
"
doseq
"
,
"
dotimes
"
,
"
doto
"
,
"
extend
"
,
"
extend-protocol
"
,
"
extend-type
"
,
"
fn
"
,
"
for
"
,
"
future
"
,
"
if
"
,
"
if-let
"
,
"
if-not
"
,
"
if-some
"
,
"
let
"
,
"
letfn
"
,
"
locking
"
,
"
loop
"
,
"
ns
"
,
"
proxy
"
,
"
reify
"
,
"
struct-map
"
,
"
some->
"
,
"
some->>
"
,
"
try
"
,
"
when
"
,
"
when-first
"
,
"
when-let
"
,
"
when-not
"
,
"
when-some
"
,
"
while
"
,
"
with-bindings
"
,
"
with-bindings*
"
,
"
with-in-str
"
,
"
with-loading-context
"
,
"
with-local-vars
"
,
"
with-meta
"
,
"
with-open
"
,
"
with-out-str
"
,
"
with-precision
"
,
"
with-redefs
"
,
"
with-redefs-fn
"
];
CodeMirror
.
registerHelper
(
"
hintWords
"
,
"
clojure
"
,
[].
concat
(
atoms
,
specialForms
,
coreSymbols
));
var
atom
=
createLookupMap
(
atoms
);
var
specialForm
=
createLookupMap
(
specialForms
);
var
coreSymbol
=
createLookupMap
(
coreSymbols
);
var
hasBodyParameter
=
createLookupMap
(
haveBodyParameter
);
var
delimiter
=
/^
(?:[\\\[\]\s
"(),;@^`{}~
]
|$
)
/
;
var
numberLiteral
=
/^
(?:[
+
\-]?\d
+
(?:(?:
N|
(?:[
eE
][
+
\-]?\d
+
))
|
(?:\.?\d
*
(?:
M|
(?:[
eE
][
+
\-]?\d
+
))?)
|
\/\d
+|
[
xX
][
0-9a-fA-F
]
+|r
[
0-9a-zA-Z
]
+
)?(?=[\\\[\]\s
"#'(),;@^`{}~
]
|$
))
/
;
var
characterLiteral
=
/^
(?:\\(?:
backspace|formfeed|newline|return|space|tab|o
[
0-7
]{3}
|u
[
0-9A-Fa-f
]{4}
|x
[
0-9A-Fa-f
]{4}
|.
)?(?=[\\\[\]\s
"(),;@^`{}~
]
|$
))
/
;
// simple-namespace := /^[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*/
// simple-symbol := /^(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)/
// qualified-symbol := (<simple-namespace>(<.><simple-namespace>)*</>)?<simple-symbol>
var
qualifiedSymbol
=
/^
(?:(?:[^\\\/\[\]\d\s
"#'(),;@^`{}~
][^\\\[\]\s
"(),;@^`{}~
]
*
(?:\.[^\\\/\[\]\d\s
"#'(),;@^`{}~
][^\\\[\]\s
"(),;@^`{}~
]
*
)
*
\/)?(?:\/
|
[^\\\/\[\]\d\s
"#'(),;@^`{}~
][^\\\[\]\s
"(),;@^`{}~
]
*
)
*
(?=[\\\[\]\s
"(),;@^`{}~
]
|$
))
/
;
function
base
(
stream
,
state
)
{
if
(
stream
.
eatSpace
()
||
stream
.
eat
(
"
,
"
))
return
[
"
space
"
,
null
];
if
(
stream
.
match
(
numberLiteral
))
return
[
null
,
"
number
"
];
if
(
stream
.
match
(
characterLiteral
))
return
[
null
,
"
string-2
"
];
if
(
stream
.
eat
(
/^"/
))
return
(
state
.
tokenize
=
inString
)(
stream
,
state
);
if
(
stream
.
eat
(
/^
[
(
\[
{
]
/
))
return
[
"
open
"
,
"
bracket
"
];
if
(
stream
.
eat
(
/^
[
)
\]
}
]
/
))
return
[
"
close
"
,
"
bracket
"
];
if
(
stream
.
eat
(
/^;/
))
{
stream
.
skipToEnd
();
return
[
"
space
"
,
"
comment
"
];}
if
(
stream
.
eat
(
/^
[
#'@^`~
]
/
))
return
[
null
,
"
meta
"
];
var
matches
=
stream
.
match
(
qualifiedSymbol
);
var
symbol
=
matches
&&
matches
[
0
];
if
(
!
symbol
)
{
// advance stream by at least one character so we don't get stuck.
stream
.
next
();
stream
.
eatWhile
(
function
(
c
)
{
return
!
is
(
c
,
delimiter
);});
return
[
null
,
"
error
"
];
}
if
(
symbol
===
"
comment
"
&&
state
.
lastToken
===
"
(
"
)
return
(
state
.
tokenize
=
inComment
)(
stream
,
state
);
if
(
is
(
symbol
,
atom
)
||
symbol
.
charAt
(
0
)
===
"
:
"
)
return
[
"
symbol
"
,
"
atom
"
];
if
(
is
(
symbol
,
specialForm
)
||
is
(
symbol
,
coreSymbol
))
return
[
"
symbol
"
,
"
keyword
"
];
if
(
state
.
lastToken
===
"
(
"
)
return
[
"
symbol
"
,
"
builtin
"
];
// other operator
return
[
"
symbol
"
,
"
variable
"
];
}
function
inString
(
stream
,
state
)
{
var
escaped
=
false
,
next
;
while
(
next
=
stream
.
next
())
{
if
(
next
===
"
\"
"
&&
!
escaped
)
{
state
.
tokenize
=
base
;
break
;}
escaped
=
!
escaped
&&
next
===
"
\\
"
;
}
return
[
null
,
"
string
"
];
}
function
inComment
(
stream
,
state
)
{
var
parenthesisCount
=
1
;
var
next
;
while
(
next
=
stream
.
next
())
{
if
(
next
===
"
)
"
)
parenthesisCount
--
;
if
(
next
===
"
(
"
)
parenthesisCount
++
;
if
(
parenthesisCount
===
0
)
{
stream
.
backUp
(
1
);
state
.
tokenize
=
base
;
break
;
}
}
return
[
"
space
"
,
"
comment
"
];
}
function
createLookupMap
(
words
)
{
var
obj
=
{};
for
(
var
i
=
0
;
i
<
words
.
length
;
++
i
)
obj
[
words
[
i
]]
=
true
;
return
obj
;
}
function
is
(
value
,
test
)
{
if
(
test
instanceof
RegExp
)
return
test
.
test
(
value
);
if
(
test
instanceof
Object
)
return
test
.
propertyIsEnumerable
(
value
);
}
return
{
startState
:
function
()
{
return
{
ctx
:
{
prev
:
null
,
start
:
0
,
indentTo
:
0
},
lastToken
:
null
,
tokenize
:
base
};
},
token
:
function
(
stream
,
state
)
{
if
(
stream
.
sol
()
&&
(
typeof
state
.
ctx
.
indentTo
!==
"
number
"
))
state
.
ctx
.
indentTo
=
state
.
ctx
.
start
+
1
;
var
typeStylePair
=
state
.
tokenize
(
stream
,
state
);
var
type
=
typeStylePair
[
0
];
var
style
=
typeStylePair
[
1
];
var
current
=
stream
.
current
();
if
(
type
!==
"
space
"
)
{
if
(
state
.
lastToken
===
"
(
"
&&
state
.
ctx
.
indentTo
===
null
)
{
if
(
type
===
"
symbol
"
&&
is
(
current
,
hasBodyParameter
))
state
.
ctx
.
indentTo
=
state
.
ctx
.
start
+
options
.
indentUnit
;
else
state
.
ctx
.
indentTo
=
"
next
"
;
}
else
if
(
state
.
ctx
.
indentTo
===
"
next
"
)
{
state
.
ctx
.
indentTo
=
stream
.
column
();
}
state
.
lastToken
=
current
;
}
if
(
type
===
"
open
"
)
state
.
ctx
=
{
prev
:
state
.
ctx
,
start
:
stream
.
column
(),
indentTo
:
null
};
else
if
(
type
===
"
close
"
)
state
.
ctx
=
state
.
ctx
.
prev
||
state
.
ctx
;
return
style
;
},
indent
:
function
(
state
)
{
var
i
=
state
.
ctx
.
indentTo
;
return
(
typeof
i
===
"
number
"
)
?
i
:
state
.
ctx
.
start
+
1
;
},
closeBrackets
:
{
pairs
:
"
()[]{}
\"\"
"
},
lineComment
:
"
;;
"
};
});
CodeMirror
.
defineMIME
(
"
text/x-clojure
"
,
"
clojure
"
);
CodeMirror
.
defineMIME
(
"
text/x-clojurescript
"
,
"
clojure
"
);
CodeMirror
.
defineMIME
(
"
application/edn
"
,
"
clojure
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clojure/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Clojure mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/closebrackets.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"clojure.js"
></script>
<style>
.CodeMirror
{
background
:
#f8f8f8
;}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
Clojure
</a>
</ul>
</div>
<article>
<h2>
Clojure mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
(ns game-of-life
"Conway's Game of Life, based on the work of
Christophe Grand (http://clj-me.cgrand.net/2011/08/19/conways-game-of-life)
and Laurent Petit (https://gist.github.com/1200343).")
;;; Core game of life's algorithm functions
(defn neighbors
"Given a cell's coordinates `[x y]`, returns the coordinates of its
neighbors."
[[x y]]
(for [dx [-1 0 1]
dy (if (zero? dx)
[-1 1]
[-1 0 1])]
[(+ dx x) (+ dy y)]))
(defn step
"Given a set of living `cells`, computes the new set of living cells."
[cells]
(set (for [[cell n] (frequencies (mapcat neighbors cells))
:when (or (= n 3)
(and (= n 2)
(cells cell)))]
cell)))
;;; Utility methods for displaying game on a text terminal
(defn print-grid
"Prints a `grid` of `w` columns and `h` rows, on *out*, representing a
step in the game."
[grid w h]
(doseq [x (range (inc w))
y (range (inc h))]
(when (= y 0) (println))
(print (if (grid [x y])
"[X]"
" . "))))
(defn print-grids
"Prints a sequence of `grids` of `w` columns and `h` rows on *out*,
representing several steps."
[grids w h]
(doseq [grid grids]
(print-grid grid w h)
(println)))
;;; Launches an example grid
(def grid
"`grid` represents the initial set of living cells"
#{[2 1] [2 2] [2 3]})
(print-grids (take 3 (iterate step grid)) 5 5)
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
autoCloseBrackets
:
true
,
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
'
text/x-clojure
'
});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-clojure
</code>
.
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/clojure/test.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
()
{
var
mode
=
CodeMirror
.
getMode
({
indentUnit
:
2
},
"
clojure
"
);
function
MT
(
name
)
{
test
.
mode
(
name
,
mode
,
Array
.
prototype
.
slice
.
call
(
arguments
,
1
));
}
MT
(
"
atoms
"
,
"
[atom false]
"
,
"
[atom nil]
"
,
"
[atom true]
"
);
MT
(
"
keywords
"
,
"
[atom :foo]
"
,
"
[atom ::bar]
"
,
"
[atom :foo/bar]
"
,
"
[atom :foo.bar/baz]
"
);
MT
(
"
numbers
"
,
"
[number 42] [number +42] [number -421]
"
,
"
[number 42N] [number +42N] [number -42N]
"
,
"
[number 0.42] [number +0.42] [number -0.42]
"
,
"
[number 42M] [number +42M] [number -42M]
"
,
"
[number 42.42M] [number +42.42M] [number -42.42M]
"
,
"
[number 1/42] [number +1/42] [number -1/42]
"
,
"
[number 0x42af] [number +0x42af] [number -0x42af]
"
,
"
[number 0x42AF] [number +0x42AF] [number -0x42AF]
"
,
"
[number 1e2] [number 1e+2] [number 1e-2]
"
,
"
[number +1e2] [number +1e+2] [number +1e-2]
"
,
"
[number -1e2] [number -1e+2] [number -1e-2]
"
,
"
[number -1.0e2] [number -0.1e+2] [number -1.01e-2]
"
,
"
[number 1E2] [number 1E+2] [number 1E-2]
"
,
"
[number +1E2] [number +1E+2] [number +1E-2]
"
,
"
[number -1E2] [number -1E+2] [number -1E-2]
"
,
"
[number -1.0E2] [number -0.1E+2] [number -1.01E-2]
"
,
"
[number 2r101010] [number +2r101010] [number -2r101010]
"
,
"
[number 2r101010] [number +2r101010] [number -2r101010]
"
,
"
[number 8r52] [number +8r52] [number -8r52]
"
,
"
[number 36rhello] [number +36rhello] [number -36rhello]
"
,
"
[number 36rz] [number +36rz] [number -36rz]
"
,
"
[number 36rZ] [number +36rZ] [number -36rZ]
"
,
// invalid numbers
"
[error 42foo]
"
,
"
[error 42Nfoo]
"
,
"
[error 42Mfoo]
"
,
"
[error 42.42Mfoo]
"
,
"
[error 42.42M!]
"
,
"
[error 42!]
"
,
"
[error 0x42afm]
"
);
MT
(
"
characters
"
,
"
[string-2
\\
1]
"
,
"
[string-2
\\
a]
"
,
"
[string-2
\\
a
\\
b
\\
c]
"
,
"
[string-2
\\
#]
"
,
"
[string-2
\\\\
]
"
,
"
[string-2
\\\"
]
"
,
"
[string-2
\\
(]
"
,
"
[string-2
\\
A]
"
,
"
[string-2
\\
backspace]
"
,
"
[string-2
\\
formfeed]
"
,
"
[string-2
\\
newline]
"
,
"
[string-2
\\
space]
"
,
"
[string-2
\\
return]
"
,
"
[string-2
\\
tab]
"
,
"
[string-2
\\
u1000]
"
,
"
[string-2
\\
uAaAa]
"
,
"
[string-2
\\
u9F9F]
"
,
"
[string-2
\\
o123]
"
,
"
[string-2
\\
符]
"
,
"
[string-2
\\
シ]
"
,
"
[string-2
\\
ۇ]
"
,
// FIXME
// "[string-2 \\🙂]",
// invalid character literals
"
[error
\\
abc]
"
,
"
[error
\\
a123]
"
,
"
[error
\\
a!]
"
,
"
[error
\\
newlines]
"
,
"
[error
\\
NEWLINE]
"
,
"
[error
\\
u9F9FF]
"
,
"
[error
\\
o1234]
"
);
MT
(
"
strings
"
,
"
[string
\"
I'm a teapot.
\"
]
"
,
"
[string
\"
I'm a
\\\"
teapot
\\\"
.
\"
]
"
,
"
[string
\"
I'm]
"
,
// this is
"
[string a]
"
,
// a multi-line
"
[string teapot.
\"
]
"
// string
// TODO unterminated (multi-line) strings?
);
MT
(
"
comments
"
,
"
[comment ; this is an in-line comment.]
"
,
"
[comment ;; this is a line comment.]
"
,
"
[keyword comment]
"
,
"
[bracket (][comment comment (foo 1 2 3)][bracket )]
"
);
MT
(
"
reader macro characters
"
,
"
[meta #][variable _]
"
,
"
[meta #][variable -Inf]
"
,
"
[meta ##][variable Inf]
"
,
"
[meta ##][variable NaN]
"
,
"
[meta @][variable x]
"
,
"
[meta ^][bracket {][atom :tag] [variable String][bracket }]
"
,
"
[meta `][bracket (][builtin f] [variable x][bracket )]
"
,
"
[meta ~][variable foo#]
"
,
"
[meta '][number 1]
"
,
"
[meta '][atom :foo]
"
,
"
[meta '][string
\"
foo
\"
]
"
,
"
[meta '][variable x]
"
,
"
[meta '][bracket (][builtin a] [variable b] [variable c][bracket )]
"
,
"
[meta '][bracket [[][variable a] [variable b] [variable c][bracket ]]]
"
,
"
[meta '][bracket {][variable a] [number 1] [atom :foo] [number 2] [variable c] [number 3][bracket }]
"
,
"
[meta '#][bracket {][variable a] [number 1] [atom :foo][bracket }]
"
);
MT
(
"
symbols
"
,
"
[variable foo!]
"
,
"
[variable foo#]
"
,
"
[variable foo$]
"
,
"
[variable foo&]
"
,
"
[variable foo']
"
,
"
[variable foo*]
"
,
"
[variable foo+]
"
,
"
[variable foo-]
"
,
"
[variable foo.]
"
,
"
[variable foo/bar]
"
,
"
[variable foo:bar]
"
,
"
[variable foo<]
"
,
"
[variable foo=]
"
,
"
[variable foo>]
"
,
"
[variable foo?]
"
,
"
[variable foo_]
"
,
"
[variable foo|]
"
,
"
[variable foobarBaz]
"
,
"
[variable foo¡]
"
,
"
[variable 符号]
"
,
"
[variable シンボル]
"
,
"
[variable ئۇيغۇر]
"
,
"
[variable 🙂❤🇺🇸]
"
,
// invalid symbols
"
[error 3foo]
"
,
"
[error 3+]
"
,
"
[error 3|]
"
,
"
[error 3_]
"
);
MT
(
"
numbers and other forms
"
,
"
[number 42][bracket (][builtin foo][bracket )]
"
,
"
[number 42][bracket [[][variable foo][bracket ]]]
"
,
"
[number 42][meta #][bracket {][variable foo][bracket }]
"
,
"
[number 42][bracket {][atom :foo] [variable bar][bracket }]
"
,
"
[number 42][meta `][variable foo]
"
,
"
[number 42][meta ~][variable foo]
"
,
"
[number 42][meta #][variable foo]
"
);
var
specialForms
=
[
"
.
"
,
"
catch
"
,
"
def
"
,
"
do
"
,
"
if
"
,
"
monitor-enter
"
,
"
monitor-exit
"
,
"
new
"
,
"
quote
"
,
"
recur
"
,
"
set!
"
,
"
throw
"
,
"
try
"
,
"
var
"
];
MT
(
"
should highlight special forms as keywords
"
,
typeTokenPairs
(
"
keyword
"
,
specialForms
)
);
var
coreSymbols1
=
[
"
*
"
,
"
*'
"
,
"
*1
"
,
"
*2
"
,
"
*3
"
,
"
*agent*
"
,
"
*allow-unresolved-vars*
"
,
"
*assert*
"
,
"
*clojure-version*
"
,
"
*command-line-args*
"
,
"
*compile-files*
"
,
"
*compile-path*
"
,
"
*compiler-options*
"
,
"
*data-readers*
"
,
"
*default-data-reader-fn*
"
,
"
*e
"
,
"
*err*
"
,
"
*file*
"
,
"
*flush-on-newline*
"
,
"
*fn-loader*
"
,
"
*in*
"
,
"
*math-context*
"
,
"
*ns*
"
,
"
*out*
"
,
"
*print-dup*
"
,
"
*print-length*
"
,
"
*print-level*
"
,
"
*print-meta*
"
,
"
*print-namespace-maps*
"
,
"
*print-readably*
"
,
"
*read-eval*
"
,
"
*reader-resolver*
"
,
"
*source-path*
"
,
"
*suppress-read*
"
,
"
*unchecked-math*
"
,
"
*use-context-classloader*
"
,
"
*verbose-defrecords*
"
,
"
*warn-on-reflection*
"
,
"
+
"
,
"
+'
"
,
"
-
"
,
"
-'
"
,
"
->
"
,
"
->>
"
,
"
->ArrayChunk
"
,
"
->Eduction
"
,
"
->Vec
"
,
"
->VecNode
"
,
"
->VecSeq
"
,
"
-cache-protocol-fn
"
,
"
-reset-methods
"
,
"
..
"
,
"
/
"
,
"
<
"
,
"
<=
"
,
"
=
"
,
"
==
"
,
"
>
"
,
"
>=
"
,
"
EMPTY-NODE
"
,
"
Inst
"
,
"
StackTraceElement->vec
"
,
"
Throwable->map
"
,
"
accessor
"
,
"
aclone
"
,
"
add-classpath
"
,
"
add-watch
"
,
"
agent
"
,
"
agent-error
"
,
"
agent-errors
"
,
"
aget
"
,
"
alength
"
,
"
alias
"
,
"
all-ns
"
,
"
alter
"
,
"
alter-meta!
"
,
"
alter-var-root
"
,
"
amap
"
,
"
ancestors
"
,
"
and
"
,
"
any?
"
,
"
apply
"
,
"
areduce
"
,
"
array-map
"
,
"
as->
"
,
"
aset
"
,
"
aset-boolean
"
,
"
aset-byte
"
,
"
aset-char
"
,
"
aset-double
"
,
"
aset-float
"
,
"
aset-int
"
,
"
aset-long
"
,
"
aset-short
"
,
"
assert
"
,
"
assoc
"
,
"
assoc!
"
,
"
assoc-in
"
,
"
associative?
"
,
"
atom
"
,
"
await
"
,
"
await-for
"
,
"
await1
"
,
"
bases
"
,
"
bean
"
,
"
bigdec
"
,
"
bigint
"
,
"
biginteger
"
,
"
binding
"
,
"
bit-and
"
,
"
bit-and-not
"
,
"
bit-clear
"
,
"
bit-flip
"
,
"
bit-not
"
,
"
bit-or
"
,
"
bit-set
"
,
"
bit-shift-left
"
,
"
bit-shift-right
"
,
"
bit-test
"
,
"
bit-xor
"
,
"
boolean
"
,
"
boolean-array
"
,
"
boolean?
"
,
"
booleans
"
,
"
bound-fn
"
,
"
bound-fn*
"
,
"
bound?
"
,
"
bounded-count
"
,
"
butlast
"
,
"
byte
"
,
"
byte-array
"
,
"
bytes
"
,
"
bytes?
"
,
"
case
"
,
"
cast
"
,
"
cat
"
,
"
char
"
,
"
char-array
"
,
"
char-escape-string
"
,
"
char-name-string
"
,
"
char?
"
,
"
chars
"
,
"
chunk
"
,
"
chunk-append
"
,
"
chunk-buffer
"
,
"
chunk-cons
"
,
"
chunk-first
"
,
"
chunk-next
"
,
"
chunk-rest
"
,
"
chunked-seq?
"
,
"
class
"
,
"
class?
"
,
"
clear-agent-errors
"
,
"
clojure-version
"
,
"
coll?
"
,
"
comment
"
,
"
commute
"
,
"
comp
"
,
"
comparator
"
,
"
compare
"
,
"
compare-and-set!
"
,
"
compile
"
,
"
complement
"
,
"
completing
"
,
"
concat
"
,
"
cond
"
,
"
cond->
"
,
"
cond->>
"
,
"
condp
"
,
"
conj
"
,
"
conj!
"
,
"
cons
"
,
"
constantly
"
,
"
construct-proxy
"
,
"
contains?
"
,
"
count
"
,
"
counted?
"
,
"
create-ns
"
,
"
create-struct
"
,
"
cycle
"
,
"
dec
"
,
"
dec'
"
,
"
decimal?
"
,
"
declare
"
,
"
dedupe
"
,
"
default-data-readers
"
,
"
definline
"
,
"
definterface
"
,
"
defmacro
"
,
"
defmethod
"
,
"
defmulti
"
,
"
defn
"
,
"
defn-
"
,
"
defonce
"
,
"
defprotocol
"
,
"
defrecord
"
,
"
defstruct
"
,
"
deftype
"
,
"
delay
"
,
"
delay?
"
,
"
deliver
"
,
"
denominator
"
,
"
deref
"
,
"
derive
"
,
"
descendants
"
,
"
destructure
"
,
"
disj
"
,
"
disj!
"
,
"
dissoc
"
,
"
dissoc!
"
,
"
distinct
"
,
"
distinct?
"
,
"
doall
"
,
"
dorun
"
,
"
doseq
"
,
"
dosync
"
,
"
dotimes
"
,
"
doto
"
,
"
double
"
,
"
double-array
"
,
"
double?
"
,
"
doubles
"
,
"
drop
"
,
"
drop-last
"
,
"
drop-while
"
,
"
eduction
"
,
"
empty
"
,
"
empty?
"
,
"
ensure
"
,
"
ensure-reduced
"
,
"
enumeration-seq
"
,
"
error-handler
"
,
"
error-mode
"
,
"
eval
"
,
"
even?
"
,
"
every-pred
"
,
"
every?
"
,
"
ex-data
"
,
"
ex-info
"
,
"
extend
"
,
"
extend-protocol
"
,
"
extend-type
"
,
"
extenders
"
,
"
extends?
"
,
"
false?
"
,
"
ffirst
"
,
"
file-seq
"
,
"
filter
"
,
"
filterv
"
,
"
find
"
,
"
find-keyword
"
,
"
find-ns
"
,
"
find-protocol-impl
"
,
"
find-protocol-method
"
,
"
find-var
"
,
"
first
"
,
"
flatten
"
,
"
float
"
,
"
float-array
"
,
"
float?
"
,
"
floats
"
,
"
flush
"
,
"
fn
"
,
"
fn?
"
,
"
fnext
"
,
"
fnil
"
,
"
for
"
,
"
force
"
,
"
format
"
,
"
frequencies
"
,
"
future
"
,
"
future-call
"
,
"
future-cancel
"
,
"
future-cancelled?
"
,
"
future-done?
"
,
"
future?
"
,
"
gen-class
"
,
"
gen-interface
"
,
"
gensym
"
,
"
get
"
,
"
get-in
"
,
"
get-method
"
,
"
get-proxy-class
"
,
"
get-thread-bindings
"
,
"
get-validator
"
,
"
group-by
"
,
"
halt-when
"
,
"
hash
"
,
"
hash-combine
"
,
"
hash-map
"
,
"
hash-ordered-coll
"
,
"
hash-set
"
,
"
hash-unordered-coll
"
,
"
ident?
"
,
"
identical?
"
,
"
identity
"
,
"
if-let
"
,
"
if-not
"
,
"
if-some
"
,
"
ifn?
"
,
"
import
"
,
"
in-ns
"
,
"
inc
"
,
"
inc'
"
,
"
indexed?
"
,
"
init-proxy
"
,
"
inst-ms
"
,
"
inst-ms*
"
,
"
inst?
"
,
"
instance?
"
,
"
int
"
,
"
int-array
"
,
"
int?
"
,
"
integer?
"
,
"
interleave
"
,
"
intern
"
,
"
interpose
"
,
"
into
"
,
"
into-array
"
,
"
ints
"
,
"
io!
"
,
"
isa?
"
,
"
iterate
"
,
"
iterator-seq
"
,
"
juxt
"
,
"
keep
"
,
"
keep-indexed
"
,
"
key
"
,
"
keys
"
,
"
keyword
"
,
"
keyword?
"
,
"
last
"
,
"
lazy-cat
"
,
"
lazy-seq
"
,
"
let
"
,
"
letfn
"
,
"
line-seq
"
,
"
list
"
,
"
list*
"
,
"
list?
"
,
"
load
"
,
"
load-file
"
,
"
load-reader
"
,
"
load-string
"
,
"
loaded-libs
"
,
"
locking
"
,
"
long
"
,
"
long-array
"
,
"
longs
"
,
"
loop
"
,
"
macroexpand
"
,
"
macroexpand-1
"
,
"
make-array
"
,
"
make-hierarchy
"
,
"
map
"
,
"
map-entry?
"
,
"
map-indexed
"
,
"
map?
"
,
"
mapcat
"
,
"
mapv
"
,
"
max
"
,
"
max-key
"
,
"
memfn
"
,
"
memoize
"
,
"
merge
"
,
"
merge-with
"
,
"
meta
"
,
"
method-sig
"
,
"
methods
"
];
var
coreSymbols2
=
[
"
min
"
,
"
min-key
"
,
"
mix-collection-hash
"
,
"
mod
"
,
"
munge
"
,
"
name
"
,
"
namespace
"
,
"
namespace-munge
"
,
"
nat-int?
"
,
"
neg-int?
"
,
"
neg?
"
,
"
newline
"
,
"
next
"
,
"
nfirst
"
,
"
nil?
"
,
"
nnext
"
,
"
not
"
,
"
not-any?
"
,
"
not-empty
"
,
"
not-every?
"
,
"
not=
"
,
"
ns
"
,
"
ns-aliases
"
,
"
ns-imports
"
,
"
ns-interns
"
,
"
ns-map
"
,
"
ns-name
"
,
"
ns-publics
"
,
"
ns-refers
"
,
"
ns-resolve
"
,
"
ns-unalias
"
,
"
ns-unmap
"
,
"
nth
"
,
"
nthnext
"
,
"
nthrest
"
,
"
num
"
,
"
number?
"
,
"
numerator
"
,
"
object-array
"
,
"
odd?
"
,
"
or
"
,
"
parents
"
,
"
partial
"
,
"
partition
"
,
"
partition-all
"
,
"
partition-by
"
,
"
pcalls
"
,
"
peek
"
,
"
persistent!
"
,
"
pmap
"
,
"
pop
"
,
"
pop!
"
,
"
pop-thread-bindings
"
,
"
pos-int?
"
,
"
pos?
"
,
"
pr
"
,
"
pr-str
"
,
"
prefer-method
"
,
"
prefers
"
,
"
primitives-classnames
"
,
"
print
"
,
"
print-ctor
"
,
"
print-dup
"
,
"
print-method
"
,
"
print-simple
"
,
"
print-str
"
,
"
printf
"
,
"
println
"
,
"
println-str
"
,
"
prn
"
,
"
prn-str
"
,
"
promise
"
,
"
proxy
"
,
"
proxy-call-with-super
"
,
"
proxy-mappings
"
,
"
proxy-name
"
,
"
proxy-super
"
,
"
push-thread-bindings
"
,
"
pvalues
"
,
"
qualified-ident?
"
,
"
qualified-keyword?
"
,
"
qualified-symbol?
"
,
"
quot
"
,
"
rand
"
,
"
rand-int
"
,
"
rand-nth
"
,
"
random-sample
"
,
"
range
"
,
"
ratio?
"
,
"
rational?
"
,
"
rationalize
"
,
"
re-find
"
,
"
re-groups
"
,
"
re-matcher
"
,
"
re-matches
"
,
"
re-pattern
"
,
"
re-seq
"
,
"
read
"
,
"
read-line
"
,
"
read-string
"
,
"
reader-conditional
"
,
"
reader-conditional?
"
,
"
realized?
"
,
"
record?
"
,
"
reduce
"
,
"
reduce-kv
"
,
"
reduced
"
,
"
reduced?
"
,
"
reductions
"
,
"
ref
"
,
"
ref-history-count
"
,
"
ref-max-history
"
,
"
ref-min-history
"
,
"
ref-set
"
,
"
refer
"
,
"
refer-clojure
"
,
"
reify
"
,
"
release-pending-sends
"
,
"
rem
"
,
"
remove
"
,
"
remove-all-methods
"
,
"
remove-method
"
,
"
remove-ns
"
,
"
remove-watch
"
,
"
repeat
"
,
"
repeatedly
"
,
"
replace
"
,
"
replicate
"
,
"
require
"
,
"
reset!
"
,
"
reset-meta!
"
,
"
reset-vals!
"
,
"
resolve
"
,
"
rest
"
,
"
restart-agent
"
,
"
resultset-seq
"
,
"
reverse
"
,
"
reversible?
"
,
"
rseq
"
,
"
rsubseq
"
,
"
run!
"
,
"
satisfies?
"
,
"
second
"
,
"
select-keys
"
,
"
send
"
,
"
send-off
"
,
"
send-via
"
,
"
seq
"
,
"
seq?
"
,
"
seqable?
"
,
"
seque
"
,
"
sequence
"
,
"
sequential?
"
,
"
set
"
,
"
set-agent-send-executor!
"
,
"
set-agent-send-off-executor!
"
,
"
set-error-handler!
"
,
"
set-error-mode!
"
,
"
set-validator!
"
,
"
set?
"
,
"
short
"
,
"
short-array
"
,
"
shorts
"
,
"
shuffle
"
,
"
shutdown-agents
"
,
"
simple-ident?
"
,
"
simple-keyword?
"
,
"
simple-symbol?
"
,
"
slurp
"
,
"
some
"
,
"
some->
"
,
"
some->>
"
,
"
some-fn
"
,
"
some?
"
,
"
sort
"
,
"
sort-by
"
,
"
sorted-map
"
,
"
sorted-map-by
"
,
"
sorted-set
"
,
"
sorted-set-by
"
,
"
sorted?
"
,
"
special-symbol?
"
,
"
spit
"
,
"
split-at
"
,
"
split-with
"
,
"
str
"
,
"
string?
"
,
"
struct
"
,
"
struct-map
"
,
"
subs
"
,
"
subseq
"
,
"
subvec
"
,
"
supers
"
,
"
swap!
"
,
"
swap-vals!
"
,
"
symbol
"
,
"
symbol?
"
,
"
sync
"
,
"
tagged-literal
"
,
"
tagged-literal?
"
,
"
take
"
,
"
take-last
"
,
"
take-nth
"
,
"
take-while
"
,
"
test
"
,
"
the-ns
"
,
"
thread-bound?
"
,
"
time
"
,
"
to-array
"
,
"
to-array-2d
"
,
"
trampoline
"
,
"
transduce
"
,
"
transient
"
,
"
tree-seq
"
,
"
true?
"
,
"
type
"
,
"
unchecked-add
"
,
"
unchecked-add-int
"
,
"
unchecked-byte
"
,
"
unchecked-char
"
,
"
unchecked-dec
"
,
"
unchecked-dec-int
"
,
"
unchecked-divide-int
"
,
"
unchecked-double
"
,
"
unchecked-float
"
,
"
unchecked-inc
"
,
"
unchecked-inc-int
"
,
"
unchecked-int
"
,
"
unchecked-long
"
,
"
unchecked-multiply
"
,
"
unchecked-multiply-int
"
,
"
unchecked-negate
"
,
"
unchecked-negate-int
"
,
"
unchecked-remainder-int
"
,
"
unchecked-short
"
,
"
unchecked-subtract
"
,
"
unchecked-subtract-int
"
,
"
underive
"
,
"
unquote
"
,
"
unquote-splicing
"
,
"
unreduced
"
,
"
unsigned-bit-shift-right
"
,
"
update
"
,
"
update-in
"
,
"
update-proxy
"
,
"
uri?
"
,
"
use
"
,
"
uuid?
"
,
"
val
"
,
"
vals
"
,
"
var-get
"
,
"
var-set
"
,
"
var?
"
,
"
vary-meta
"
,
"
vec
"
,
"
vector
"
,
"
vector-of
"
,
"
vector?
"
,
"
volatile!
"
,
"
volatile?
"
,
"
vreset!
"
,
"
vswap!
"
,
"
when
"
,
"
when-first
"
,
"
when-let
"
,
"
when-not
"
,
"
when-some
"
,
"
while
"
,
"
with-bindings
"
,
"
with-bindings*
"
,
"
with-in-str
"
,
"
with-loading-context
"
,
"
with-local-vars
"
,
"
with-meta
"
,
"
with-open
"
,
"
with-out-str
"
,
"
with-precision
"
,
"
with-redefs
"
,
"
with-redefs-fn
"
,
"
xml-seq
"
,
"
zero?
"
,
"
zipmap
"
];
MT
(
"
should highlight core symbols as keywords (part 1/2)
"
,
typeTokenPairs
(
"
keyword
"
,
coreSymbols1
)
);
MT
(
"
should highlight core symbols as keywords (part 2/2)
"
,
typeTokenPairs
(
"
keyword
"
,
coreSymbols2
)
);
MT
(
"
should properly indent forms in list literals
"
,
"
[bracket (][builtin foo] [atom :a] [number 1] [atom true] [atom nil][bracket )]
"
,
""
,
"
[bracket (][builtin foo] [atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket )]
"
,
""
,
"
[bracket (][builtin foo] [atom :a] [number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket )]
"
,
""
,
"
[bracket (]
"
,
"
[builtin foo]
"
,
"
[atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket )]
"
,
""
,
"
[bracket (][builtin foo] [bracket [[][atom :a][bracket ]]]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket )]
"
);
MT
(
"
should properly indent forms in vector literals
"
,
"
[bracket [[][atom :a] [number 1] [atom true] [atom nil][bracket ]]]
"
,
""
,
"
[bracket [[][atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket ]]]
"
,
""
,
"
[bracket [[][atom :a] [number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket ]]]
"
,
""
,
"
[bracket [[]
"
,
"
[variable foo]
"
,
"
[atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket ]]]
"
);
MT
(
"
should properly indent forms in map literals
"
,
"
[bracket {][atom :a] [atom :a] [atom :b] [number 1] [atom :c] [atom true] [atom :d] [atom nil] [bracket }]
"
,
""
,
"
[bracket {][atom :a] [atom :a]
"
,
"
[atom :b] [number 1]
"
,
"
[atom :c] [atom true]
"
,
"
[atom :d] [atom nil][bracket }]
"
,
""
,
"
[bracket {][atom :a]
"
,
"
[atom :a]
"
,
"
[atom :b]
"
,
"
[number 1]
"
,
"
[atom :c]
"
,
"
[atom true]
"
,
"
[atom :d]
"
,
"
[atom nil][bracket }]
"
,
""
,
"
[bracket {]
"
,
"
[atom :a] [atom :a]
"
,
"
[atom :b] [number 1]
"
,
"
[atom :c] [atom true]
"
,
"
[atom :d] [atom nil][bracket }]
"
);
MT
(
"
should properly indent forms in set literals
"
,
"
[meta #][bracket {][atom :a] [number 1] [atom true] [atom nil] [bracket }]
"
,
""
,
"
[meta #][bracket {][atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket }]
"
,
""
,
"
[meta #][bracket {]
"
,
"
[atom :a]
"
,
"
[number 1]
"
,
"
[atom true]
"
,
"
[atom nil][bracket }]
"
);
var
haveBodyParameter
=
[
"
->
"
,
"
->>
"
,
"
as->
"
,
"
binding
"
,
"
bound-fn
"
,
"
case
"
,
"
catch
"
,
"
cond
"
,
"
cond->
"
,
"
cond->>
"
,
"
condp
"
,
"
def
"
,
"
definterface
"
,
"
defmethod
"
,
"
defn
"
,
"
defmacro
"
,
"
defprotocol
"
,
"
defrecord
"
,
"
defstruct
"
,
"
deftype
"
,
"
do
"
,
"
doseq
"
,
"
dotimes
"
,
"
doto
"
,
"
extend
"
,
"
extend-protocol
"
,
"
extend-type
"
,
"
fn
"
,
"
for
"
,
"
future
"
,
"
if
"
,
"
if-let
"
,
"
if-not
"
,
"
if-some
"
,
"
let
"
,
"
letfn
"
,
"
locking
"
,
"
loop
"
,
"
ns
"
,
"
proxy
"
,
"
reify
"
,
"
some->
"
,
"
some->>
"
,
"
struct-map
"
,
"
try
"
,
"
when
"
,
"
when-first
"
,
"
when-let
"
,
"
when-not
"
,
"
when-some
"
,
"
while
"
,
"
with-bindings
"
,
"
with-bindings*
"
,
"
with-in-str
"
,
"
with-loading-context
"
,
"
with-local-vars
"
,
"
with-meta
"
,
"
with-open
"
,
"
with-out-str
"
,
"
with-precision
"
,
"
with-redefs
"
,
"
with-redefs-fn
"
];
function
testFormsThatHaveBodyParameter
(
forms
)
{
for
(
var
i
=
0
;
i
<
forms
.
length
;
i
++
)
{
MT
(
"
should indent body argument of `
"
+
forms
[
i
]
+
"
` by `options.indentUnit` spaces
"
,
"
[bracket (][keyword
"
+
forms
[
i
]
+
"
] [variable foo] [variable bar]
"
,
"
[variable baz]
"
,
"
[variable qux][bracket )]
"
);
}
}
testFormsThatHaveBodyParameter
(
haveBodyParameter
);
MT
(
"
should indent body argument of `comment` by `options.indentUnit` spaces
"
,
"
[bracket (][comment comment foo bar]
"
,
"
[comment baz]
"
,
"
[comment qux][bracket )]
"
);
function
typeTokenPairs
(
type
,
tokens
)
{
return
"
[
"
+
type
+
"
"
+
tokens
.
join
(
"
] [
"
+
type
+
"
"
)
+
"
]
"
;
}
})();
src/main/webapp/static/plugins/codemirror/5.48.4/mode/cmake/cmake.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
define
([
"
../../lib/codemirror
"
],
mod
);
else
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
cmake
"
,
function
()
{
var
variable_regex
=
/
(
{
)?[
a-zA-Z0-9_
]
+
(
}
)?
/
;
function
tokenString
(
stream
,
state
)
{
var
current
,
prev
,
found_var
=
false
;
while
(
!
stream
.
eol
()
&&
(
current
=
stream
.
next
())
!=
state
.
pending
)
{
if
(
current
===
'
$
'
&&
prev
!=
'
\\
'
&&
state
.
pending
==
'
"
'
)
{
found_var
=
true
;
break
;
}
prev
=
current
;
}
if
(
found_var
)
{
stream
.
backUp
(
1
);
}
if
(
current
==
state
.
pending
)
{
state
.
continueString
=
false
;
}
else
{
state
.
continueString
=
true
;
}
return
"
string
"
;
}
function
tokenize
(
stream
,
state
)
{
var
ch
=
stream
.
next
();
// Have we found a variable?
if
(
ch
===
'
$
'
)
{
if
(
stream
.
match
(
variable_regex
))
{
return
'
variable-2
'
;
}
return
'
variable
'
;
}
// Should we still be looking for the end of a string?
if
(
state
.
continueString
)
{
// If so, go through the loop again
stream
.
backUp
(
1
);
return
tokenString
(
stream
,
state
);
}
// Do we just have a function on our hands?
// In 'cmake_minimum_required (VERSION 2.8.8)', 'cmake_minimum_required' is matched
if
(
stream
.
match
(
/
(\s
+
)?\w
+
\(
/
)
||
stream
.
match
(
/
(\s
+
)?\w
+
\ \(
/
))
{
stream
.
backUp
(
1
);
return
'
def
'
;
}
if
(
ch
==
"
#
"
)
{
stream
.
skipToEnd
();
return
"
comment
"
;
}
// Have we found a string?
if
(
ch
==
"
'
"
||
ch
==
'
"
'
)
{
// Store the type (single or double)
state
.
pending
=
ch
;
// Perform the looping function to find the end
return
tokenString
(
stream
,
state
);
}
if
(
ch
==
'
(
'
||
ch
==
'
)
'
)
{
return
'
bracket
'
;
}
if
(
ch
.
match
(
/
[
0-9
]
/
))
{
return
'
number
'
;
}
stream
.
eatWhile
(
/
[\w
-
]
/
);
return
null
;
}
return
{
startState
:
function
()
{
var
state
=
{};
state
.
inDefinition
=
false
;
state
.
inInclude
=
false
;
state
.
continueString
=
false
;
state
.
pending
=
false
;
return
state
;
},
token
:
function
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
return
null
;
return
tokenize
(
stream
,
state
);
}
};
});
CodeMirror
.
defineMIME
(
"
text/x-cmake
"
,
"
cmake
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/cmake/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: CMake mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"cmake.js"
></script>
<style>
.CodeMirror
{
border-top
:
1px
solid
black
;
border-bottom
:
1px
solid
black
;}
.cm-s-default
span
.cm-arrow
{
color
:
red
;
}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
CMake
</a>
</ul>
</div>
<article>
<h2>
CMake mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
# vim: syntax=cmake
if(NOT CMAKE_BUILD_TYPE)
# default to Release build for GCC builds
set(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
FORCE)
endif()
message(STATUS "cmake version ${CMAKE_VERSION}")
if(POLICY CMP0025)
cmake_policy(SET CMP0025 OLD) # report Apple's Clang as just Clang
endif()
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW) # MACOSX_RPATH
endif()
project (x265)
cmake_minimum_required (VERSION 2.8.8) # OBJECT libraries require 2.8.8
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckSymbolExists)
include(CheckCXXCompilerFlag)
# X265_BUILD must be incremented each time the public API is changed
set(X265_BUILD 48)
configure_file("${PROJECT_SOURCE_DIR}/x265.def.in"
"${PROJECT_BINARY_DIR}/x265.def")
configure_file("${PROJECT_SOURCE_DIR}/x265_config.h.in"
"${PROJECT_BINARY_DIR}/x265_config.h")
SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
# System architecture detection
string(TOLOWER "${CMAKE_SYSTEM_PROCESSOR}" SYSPROC)
set(X86_ALIASES x86 i386 i686 x86_64 amd64)
list(FIND X86_ALIASES "${SYSPROC}" X86MATCH)
if("${SYSPROC}" STREQUAL "" OR X86MATCH GREATER "-1")
message(STATUS "Detected x86 target processor")
set(X86 1)
add_definitions(-DX265_ARCH_X86=1)
if("${CMAKE_SIZEOF_VOID_P}" MATCHES 8)
set(X64 1)
add_definitions(-DX86_64=1)
endif()
elseif(${SYSPROC} STREQUAL "armv6l")
message(STATUS "Detected ARM target processor")
set(ARM 1)
add_definitions(-DX265_ARCH_ARM=1 -DHAVE_ARMV6=1)
else()
message(STATUS "CMAKE_SYSTEM_PROCESSOR value `${CMAKE_SYSTEM_PROCESSOR}` is unknown")
message(STATUS "Please add this value near ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE}")
endif()
if(UNIX)
list(APPEND PLATFORM_LIBS pthread)
find_library(LIBRT rt)
if(LIBRT)
list(APPEND PLATFORM_LIBS rt)
endif()
find_package(Numa)
if(NUMA_FOUND)
list(APPEND CMAKE_REQUIRED_LIBRARIES ${NUMA_LIBRARY})
check_symbol_exists(numa_node_of_cpu numa.h NUMA_V2)
if(NUMA_V2)
add_definitions(-DHAVE_LIBNUMA)
message(STATUS "libnuma found, building with support for NUMA nodes")
list(APPEND PLATFORM_LIBS ${NUMA_LIBRARY})
link_directories(${NUMA_LIBRARY_DIR})
include_directories(${NUMA_INCLUDE_DIR})
endif()
endif()
mark_as_advanced(LIBRT NUMA_FOUND)
endif(UNIX)
if(X64 AND NOT WIN32)
option(ENABLE_PIC "Enable Position Independent Code" ON)
else()
option(ENABLE_PIC "Enable Position Independent Code" OFF)
endif(X64 AND NOT WIN32)
# Compiler detection
if(CMAKE_GENERATOR STREQUAL "Xcode")
set(XCODE 1)
endif()
if (APPLE)
add_definitions(-DMACOS)
endif()
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
mode
:
"
text/x-cmake
"
,
matchBrackets
:
true
,
indentUnit
:
4
});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-cmake
</code>
.
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/cobol/cobol.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
/**
* Author: Gautam Mehta
* Branched from CodeMirror's Scheme mode
*/
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
cobol
"
,
function
()
{
var
BUILTIN
=
"
builtin
"
,
COMMENT
=
"
comment
"
,
STRING
=
"
string
"
,
ATOM
=
"
atom
"
,
NUMBER
=
"
number
"
,
KEYWORD
=
"
keyword
"
,
MODTAG
=
"
header
"
,
COBOLLINENUM
=
"
def
"
,
PERIOD
=
"
link
"
;
function
makeKeywords
(
str
)
{
var
obj
=
{},
words
=
str
.
split
(
"
"
);
for
(
var
i
=
0
;
i
<
words
.
length
;
++
i
)
obj
[
words
[
i
]]
=
true
;
return
obj
;
}
var
atoms
=
makeKeywords
(
"
TRUE FALSE ZEROES ZEROS ZERO SPACES SPACE LOW-VALUE LOW-VALUES
"
);
var
keywords
=
makeKeywords
(
"
ACCEPT ACCESS ACQUIRE ADD ADDRESS
"
+
"
ADVANCING AFTER ALIAS ALL ALPHABET
"
+
"
ALPHABETIC ALPHABETIC-LOWER ALPHABETIC-UPPER ALPHANUMERIC ALPHANUMERIC-EDITED
"
+
"
ALSO ALTER ALTERNATE AND ANY
"
+
"
ARE AREA AREAS ARITHMETIC ASCENDING
"
+
"
ASSIGN AT ATTRIBUTE AUTHOR AUTO
"
+
"
AUTO-SKIP AUTOMATIC B-AND B-EXOR B-LESS
"
+
"
B-NOT B-OR BACKGROUND-COLOR BACKGROUND-COLOUR BEEP
"
+
"
BEFORE BELL BINARY BIT BITS
"
+
"
BLANK BLINK BLOCK BOOLEAN BOTTOM
"
+
"
BY CALL CANCEL CD CF
"
+
"
CH CHARACTER CHARACTERS CLASS CLOCK-UNITS
"
+
"
CLOSE COBOL CODE CODE-SET COL
"
+
"
COLLATING COLUMN COMMA COMMIT COMMITMENT
"
+
"
COMMON COMMUNICATION COMP COMP-0 COMP-1
"
+
"
COMP-2 COMP-3 COMP-4 COMP-5 COMP-6
"
+
"
COMP-7 COMP-8 COMP-9 COMPUTATIONAL COMPUTATIONAL-0
"
+
"
COMPUTATIONAL-1 COMPUTATIONAL-2 COMPUTATIONAL-3 COMPUTATIONAL-4 COMPUTATIONAL-5
"
+
"
COMPUTATIONAL-6 COMPUTATIONAL-7 COMPUTATIONAL-8 COMPUTATIONAL-9 COMPUTE
"
+
"
CONFIGURATION CONNECT CONSOLE CONTAINED CONTAINS
"
+
"
CONTENT CONTINUE CONTROL CONTROL-AREA CONTROLS
"
+
"
CONVERTING COPY CORR CORRESPONDING COUNT
"
+
"
CRT CRT-UNDER CURRENCY CURRENT CURSOR
"
+
"
DATA DATE DATE-COMPILED DATE-WRITTEN DAY
"
+
"
DAY-OF-WEEK DB DB-ACCESS-CONTROL-KEY DB-DATA-NAME DB-EXCEPTION
"
+
"
DB-FORMAT-NAME DB-RECORD-NAME DB-SET-NAME DB-STATUS DBCS
"
+
"
DBCS-EDITED DE DEBUG-CONTENTS DEBUG-ITEM DEBUG-LINE
"
+
"
DEBUG-NAME DEBUG-SUB-1 DEBUG-SUB-2 DEBUG-SUB-3 DEBUGGING
"
+
"
DECIMAL-POINT DECLARATIVES DEFAULT DELETE DELIMITED
"
+
"
DELIMITER DEPENDING DESCENDING DESCRIBED DESTINATION
"
+
"
DETAIL DISABLE DISCONNECT DISPLAY DISPLAY-1
"
+
"
DISPLAY-2 DISPLAY-3 DISPLAY-4 DISPLAY-5 DISPLAY-6
"
+
"
DISPLAY-7 DISPLAY-8 DISPLAY-9 DIVIDE DIVISION
"
+
"
DOWN DROP DUPLICATE DUPLICATES DYNAMIC
"
+
"
EBCDIC EGI EJECT ELSE EMI
"
+
"
EMPTY EMPTY-CHECK ENABLE END END. END-ACCEPT END-ACCEPT.
"
+
"
END-ADD END-CALL END-COMPUTE END-DELETE END-DISPLAY
"
+
"
END-DIVIDE END-EVALUATE END-IF END-INVOKE END-MULTIPLY
"
+
"
END-OF-PAGE END-PERFORM END-READ END-RECEIVE END-RETURN
"
+
"
END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT
"
+
"
END-UNSTRING END-WRITE END-XML ENTER ENTRY
"
+
"
ENVIRONMENT EOP EQUAL EQUALS ERASE
"
+
"
ERROR ESI EVALUATE EVERY EXCEEDS
"
+
"
EXCEPTION EXCLUSIVE EXIT EXTEND EXTERNAL
"
+
"
EXTERNALLY-DESCRIBED-KEY FD FETCH FILE FILE-CONTROL
"
+
"
FILE-STREAM FILES FILLER FINAL FIND
"
+
"
FINISH FIRST FOOTING FOR FOREGROUND-COLOR
"
+
"
FOREGROUND-COLOUR FORMAT FREE FROM FULL
"
+
"
FUNCTION GENERATE GET GIVING GLOBAL
"
+
"
GO GOBACK GREATER GROUP HEADING
"
+
"
HIGH-VALUE HIGH-VALUES HIGHLIGHT I-O I-O-CONTROL
"
+
"
ID IDENTIFICATION IF IN INDEX
"
+
"
INDEX-1 INDEX-2 INDEX-3 INDEX-4 INDEX-5
"
+
"
INDEX-6 INDEX-7 INDEX-8 INDEX-9 INDEXED
"
+
"
INDIC INDICATE INDICATOR INDICATORS INITIAL
"
+
"
INITIALIZE INITIATE INPUT INPUT-OUTPUT INSPECT
"
+
"
INSTALLATION INTO INVALID INVOKE IS
"
+
"
JUST JUSTIFIED KANJI KEEP KEY
"
+
"
LABEL LAST LD LEADING LEFT
"
+
"
LEFT-JUSTIFY LENGTH LENGTH-CHECK LESS LIBRARY
"
+
"
LIKE LIMIT LIMITS LINAGE LINAGE-COUNTER
"
+
"
LINE LINE-COUNTER LINES LINKAGE LOCAL-STORAGE
"
+
"
LOCALE LOCALLY LOCK
"
+
"
MEMBER MEMORY MERGE MESSAGE METACLASS
"
+
"
MODE MODIFIED MODIFY MODULES MOVE
"
+
"
MULTIPLE MULTIPLY NATIONAL NATIVE NEGATIVE
"
+
"
NEXT NO NO-ECHO NONE NOT
"
+
"
NULL NULL-KEY-MAP NULL-MAP NULLS NUMBER
"
+
"
NUMERIC NUMERIC-EDITED OBJECT OBJECT-COMPUTER OCCURS
"
+
"
OF OFF OMITTED ON ONLY
"
+
"
OPEN OPTIONAL OR ORDER ORGANIZATION
"
+
"
OTHER OUTPUT OVERFLOW OWNER PACKED-DECIMAL
"
+
"
PADDING PAGE PAGE-COUNTER PARSE PERFORM
"
+
"
PF PH PIC PICTURE PLUS
"
+
"
POINTER POSITION POSITIVE PREFIX PRESENT
"
+
"
PRINTING PRIOR PROCEDURE PROCEDURE-POINTER PROCEDURES
"
+
"
PROCEED PROCESS PROCESSING PROGRAM PROGRAM-ID
"
+
"
PROMPT PROTECTED PURGE QUEUE QUOTE
"
+
"
QUOTES RANDOM RD READ READY
"
+
"
REALM RECEIVE RECONNECT RECORD RECORD-NAME
"
+
"
RECORDS RECURSIVE REDEFINES REEL REFERENCE
"
+
"
REFERENCE-MONITOR REFERENCES RELATION RELATIVE RELEASE
"
+
"
REMAINDER REMOVAL RENAMES REPEATED REPLACE
"
+
"
REPLACING REPORT REPORTING REPORTS REPOSITORY
"
+
"
REQUIRED RERUN RESERVE RESET RETAINING
"
+
"
RETRIEVAL RETURN RETURN-CODE RETURNING REVERSE-VIDEO
"
+
"
REVERSED REWIND REWRITE RF RH
"
+
"
RIGHT RIGHT-JUSTIFY ROLLBACK ROLLING ROUNDED
"
+
"
RUN SAME SCREEN SD SEARCH
"
+
"
SECTION SECURE SECURITY SEGMENT SEGMENT-LIMIT
"
+
"
SELECT SEND SENTENCE SEPARATE SEQUENCE
"
+
"
SEQUENTIAL SET SHARED SIGN SIZE
"
+
"
SKIP1 SKIP2 SKIP3 SORT SORT-MERGE
"
+
"
SORT-RETURN SOURCE SOURCE-COMPUTER SPACE-FILL
"
+
"
SPECIAL-NAMES STANDARD STANDARD-1 STANDARD-2
"
+
"
START STARTING STATUS STOP STORE
"
+
"
STRING SUB-QUEUE-1 SUB-QUEUE-2 SUB-QUEUE-3 SUB-SCHEMA
"
+
"
SUBFILE SUBSTITUTE SUBTRACT SUM SUPPRESS
"
+
"
SYMBOLIC SYNC SYNCHRONIZED SYSIN SYSOUT
"
+
"
TABLE TALLYING TAPE TENANT TERMINAL
"
+
"
TERMINATE TEST TEXT THAN THEN
"
+
"
THROUGH THRU TIME TIMES TITLE
"
+
"
TO TOP TRAILING TRAILING-SIGN TRANSACTION
"
+
"
TYPE TYPEDEF UNDERLINE UNEQUAL UNIT
"
+
"
UNSTRING UNTIL UP UPDATE UPON
"
+
"
USAGE USAGE-MODE USE USING VALID
"
+
"
VALIDATE VALUE VALUES VARYING VLR
"
+
"
WAIT WHEN WHEN-COMPILED WITH WITHIN
"
+
"
WORDS WORKING-STORAGE WRITE XML XML-CODE
"
+
"
XML-EVENT XML-NTEXT XML-TEXT ZERO ZERO-FILL
"
);
var
builtins
=
makeKeywords
(
"
- * ** / + < <= = > >=
"
);
var
tests
=
{
digit
:
/
\d
/
,
digit_or_colon
:
/
[\d
:
]
/
,
hex
:
/
[
0-9a-f
]
/i
,
sign
:
/
[
+-
]
/
,
exponent
:
/e/i
,
keyword_char
:
/
[^\s\(\[\;\)\]]
/
,
symbol
:
/
[\w
*+
\-]
/
};
function
isNumber
(
ch
,
stream
){
// hex
if
(
ch
===
'
0
'
&&
stream
.
eat
(
/x/i
)
)
{
stream
.
eatWhile
(
tests
.
hex
);
return
true
;
}
// leading sign
if
(
(
ch
==
'
+
'
||
ch
==
'
-
'
)
&&
(
tests
.
digit
.
test
(
stream
.
peek
())
)
)
{
stream
.
eat
(
tests
.
sign
);
ch
=
stream
.
next
();
}
if
(
tests
.
digit
.
test
(
ch
)
)
{
stream
.
eat
(
ch
);
stream
.
eatWhile
(
tests
.
digit
);
if
(
'
.
'
==
stream
.
peek
())
{
stream
.
eat
(
'
.
'
);
stream
.
eatWhile
(
tests
.
digit
);
}
if
(
stream
.
eat
(
tests
.
exponent
)
)
{
stream
.
eat
(
tests
.
sign
);
stream
.
eatWhile
(
tests
.
digit
);
}
return
true
;
}
return
false
;
}
return
{
startState
:
function
()
{
return
{
indentStack
:
null
,
indentation
:
0
,
mode
:
false
};
},
token
:
function
(
stream
,
state
)
{
if
(
state
.
indentStack
==
null
&&
stream
.
sol
())
{
// update indentation, but only if indentStack is empty
state
.
indentation
=
6
;
//stream.indentation();
}
// skip spaces
if
(
stream
.
eatSpace
())
{
return
null
;
}
var
returnType
=
null
;
switch
(
state
.
mode
){
case
"
string
"
:
// multi-line string parsing mode
var
next
=
false
;
while
((
next
=
stream
.
next
())
!=
null
)
{
if
(
next
==
"
\"
"
||
next
==
"
\
'
"
)
{
state
.
mode
=
false
;
break
;
}
}
returnType
=
STRING
;
// continue on in string mode
break
;
default
:
// default parsing mode
var
ch
=
stream
.
next
();
var
col
=
stream
.
column
();
if
(
col
>=
0
&&
col
<=
5
)
{
returnType
=
COBOLLINENUM
;
}
else
if
(
col
>=
72
&&
col
<=
79
)
{
stream
.
skipToEnd
();
returnType
=
MODTAG
;
}
else
if
(
ch
==
"
*
"
&&
col
==
6
)
{
// comment
stream
.
skipToEnd
();
// rest of the line is a comment
returnType
=
COMMENT
;
}
else
if
(
ch
==
"
\"
"
||
ch
==
"
\
'
"
)
{
state
.
mode
=
"
string
"
;
returnType
=
STRING
;
}
else
if
(
ch
==
"
'
"
&&
!
(
tests
.
digit_or_colon
.
test
(
stream
.
peek
())
))
{
returnType
=
ATOM
;
}
else
if
(
ch
==
"
.
"
)
{
returnType
=
PERIOD
;
}
else
if
(
isNumber
(
ch
,
stream
)){
returnType
=
NUMBER
;
}
else
{
if
(
stream
.
current
().
match
(
tests
.
symbol
))
{
while
(
col
<
71
)
{
if
(
stream
.
eat
(
tests
.
symbol
)
===
undefined
)
{
break
;
}
else
{
col
++
;
}
}
}
if
(
keywords
&&
keywords
.
propertyIsEnumerable
(
stream
.
current
().
toUpperCase
()))
{
returnType
=
KEYWORD
;
}
else
if
(
builtins
&&
builtins
.
propertyIsEnumerable
(
stream
.
current
().
toUpperCase
()))
{
returnType
=
BUILTIN
;
}
else
if
(
atoms
&&
atoms
.
propertyIsEnumerable
(
stream
.
current
().
toUpperCase
()))
{
returnType
=
ATOM
;
}
else
returnType
=
null
;
}
}
return
returnType
;
},
indent
:
function
(
state
)
{
if
(
state
.
indentStack
==
null
)
return
state
.
indentation
;
return
state
.
indentStack
.
indent
;
}
};
});
CodeMirror
.
defineMIME
(
"
text/x-cobol
"
,
"
cobol
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/cobol/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: COBOL mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/neat.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/elegant.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/erlang-dark.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/night.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/monokai.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/cobalt.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/eclipse.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/rubyblue.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/lesser-dark.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/xq-dark.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/xq-light.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/ambiance.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/blackboard.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/vibrant-ink.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/solarized.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/twilight.css"
>
<link
rel=
"stylesheet"
href=
"../../theme/midnight.css"
>
<link
rel=
"stylesheet"
href=
"../../addon/dialog/dialog.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"cobol.js"
></script>
<script
src=
"../../addon/selection/active-line.js"
></script>
<script
src=
"../../addon/search/search.js"
></script>
<script
src=
"../../addon/dialog/dialog.js"
></script>
<script
src=
"../../addon/search/searchcursor.js"
></script>
<style>
.CodeMirror
{
border
:
1px
solid
#eee
;
font-size
:
20px
;
height
:
auto
!important
;
}
.CodeMirror-activeline-background
{
background
:
#555555
!important
;}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
COBOL
</a>
</ul>
</div>
<article>
<h2>
COBOL mode
</h2>
<p>
Select Theme
<select
onchange=
"selectTheme()"
id=
"selectTheme"
>
<option>
default
</option>
<option>
ambiance
</option>
<option>
blackboard
</option>
<option>
cobalt
</option>
<option>
eclipse
</option>
<option>
elegant
</option>
<option>
erlang-dark
</option>
<option>
lesser-dark
</option>
<option>
midnight
</option>
<option>
monokai
</option>
<option>
neat
</option>
<option>
night
</option>
<option>
rubyblue
</option>
<option>
solarized dark
</option>
<option>
solarized light
</option>
<option
selected
>
twilight
</option>
<option>
vibrant-ink
</option>
<option>
xq-dark
</option>
<option>
xq-light
</option>
</select>
Select Font Size
<select
onchange=
"selectFontsize()"
id=
"selectFontSize"
>
<option
value=
"13px"
>
13px
</option>
<option
value=
"14px"
>
14px
</option>
<option
value=
"16px"
>
16px
</option>
<option
value=
"18px"
>
18px
</option>
<option
value=
"20px"
selected=
"selected"
>
20px
</option>
<option
value=
"24px"
>
24px
</option>
<option
value=
"26px"
>
26px
</option>
<option
value=
"28px"
>
28px
</option>
<option
value=
"30px"
>
30px
</option>
<option
value=
"32px"
>
32px
</option>
<option
value=
"34px"
>
34px
</option>
<option
value=
"36px"
>
36px
</option>
</select>
<label
for=
"checkBoxReadOnly"
>
Read-only
</label>
<input
type=
"checkbox"
id=
"checkBoxReadOnly"
onchange=
"selectReadOnly()"
>
<label
for=
"id_tabToIndentSpace"
>
Insert Spaces on Tab
</label>
<input
type=
"checkbox"
id=
"id_tabToIndentSpace"
onchange=
"tabToIndentSpace()"
>
</p>
<textarea
id=
"code"
name=
"code"
>
---------1---------2---------3---------4---------5---------6---------7---------8
12345678911234567892123456789312345678941234567895123456789612345678971234567898
000010 IDENTIFICATION DIVISION. MODTGHERE
000020 PROGRAM-ID. SAMPLE.
000030 AUTHOR. TEST SAM.
000040 DATE-WRITTEN. 5 February 2013
000041
000042* A sample program just to show the form.
000043* The program copies its input to the output,
000044* and counts the number of records.
000045* At the end this number is printed.
000046
000050 ENVIRONMENT DIVISION.
000060 INPUT-OUTPUT SECTION.
000070 FILE-CONTROL.
000080 SELECT STUDENT-FILE ASSIGN TO SYSIN
000090 ORGANIZATION IS LINE SEQUENTIAL.
000100 SELECT PRINT-FILE ASSIGN TO SYSOUT
000110 ORGANIZATION IS LINE SEQUENTIAL.
000120
000130 DATA DIVISION.
000140 FILE SECTION.
000150 FD STUDENT-FILE
000160 RECORD CONTAINS 43 CHARACTERS
000170 DATA RECORD IS STUDENT-IN.
000180 01 STUDENT-IN PIC X(43).
000190
000200 FD PRINT-FILE
000210 RECORD CONTAINS 80 CHARACTERS
000220 DATA RECORD IS PRINT-LINE.
000230 01 PRINT-LINE PIC X(80).
000240
000250 WORKING-STORAGE SECTION.
000260 01 DATA-REMAINS-SWITCH PIC X(2) VALUE SPACES.
000261 01 RECORDS-WRITTEN PIC 99.
000270
000280 01 DETAIL-LINE.
000290 05 FILLER PIC X(7) VALUE SPACES.
000300 05 RECORD-IMAGE PIC X(43).
000310 05 FILLER PIC X(30) VALUE SPACES.
000311
000312 01 SUMMARY-LINE.
000313 05 FILLER PIC X(7) VALUE SPACES.
000314 05 TOTAL-READ PIC 99.
000315 05 FILLER PIC X VALUE SPACE.
000316 05 FILLER PIC X(17)
000317 VALUE 'Records were read'.
000318 05 FILLER PIC X(53) VALUE SPACES.
000319
000320 PROCEDURE DIVISION.
000321
000330 PREPARE-SENIOR-REPORT.
000340 OPEN INPUT STUDENT-FILE
000350 OUTPUT PRINT-FILE.
000351 MOVE ZERO TO RECORDS-WRITTEN.
000360 READ STUDENT-FILE
000370 AT END MOVE 'NO' TO DATA-REMAINS-SWITCH
000380 END-READ.
000390 PERFORM PROCESS-RECORDS
000410 UNTIL DATA-REMAINS-SWITCH = 'NO'.
000411 PERFORM PRINT-SUMMARY.
000420 CLOSE STUDENT-FILE
000430 PRINT-FILE.
000440 STOP RUN.
000450
000460 PROCESS-RECORDS.
000470 MOVE STUDENT-IN TO RECORD-IMAGE.
000480 MOVE DETAIL-LINE TO PRINT-LINE.
000490 WRITE PRINT-LINE.
000500 ADD 1 TO RECORDS-WRITTEN.
000510 READ STUDENT-FILE
000520 AT END MOVE 'NO' TO DATA-REMAINS-SWITCH
000530 END-READ.
000540
000550 PRINT-SUMMARY.
000560 MOVE RECORDS-WRITTEN TO TOTAL-READ.
000570 MOVE SUMMARY-LINE TO PRINT-LINE.
000571 WRITE PRINT-LINE.
000572
000580
</textarea>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
lineNumbers
:
true
,
matchBrackets
:
true
,
mode
:
"
text/x-cobol
"
,
theme
:
"
twilight
"
,
styleActiveLine
:
true
,
showCursorWhenSelecting
:
true
,
});
function
selectTheme
()
{
var
themeInput
=
document
.
getElementById
(
"
selectTheme
"
);
var
theme
=
themeInput
.
options
[
themeInput
.
selectedIndex
].
innerHTML
;
editor
.
setOption
(
"
theme
"
,
theme
);
}
function
selectFontsize
()
{
var
fontSizeInput
=
document
.
getElementById
(
"
selectFontSize
"
);
var
fontSize
=
fontSizeInput
.
options
[
fontSizeInput
.
selectedIndex
].
innerHTML
;
editor
.
getWrapperElement
().
style
.
fontSize
=
fontSize
;
editor
.
refresh
();
}
function
selectReadOnly
()
{
editor
.
setOption
(
"
readOnly
"
,
document
.
getElementById
(
"
checkBoxReadOnly
"
).
checked
);
}
function
tabToIndentSpace
()
{
if
(
document
.
getElementById
(
"
id_tabToIndentSpace
"
).
checked
)
{
editor
.
setOption
(
"
extraKeys
"
,
{
Tab
:
function
(
cm
)
{
cm
.
replaceSelection
(
"
"
,
"
end
"
);
}});
}
else
{
editor
.
setOption
(
"
extraKeys
"
,
{
Tab
:
function
(
cm
)
{
cm
.
replaceSelection
(
"
"
,
"
end
"
);
}});
}
}
</script>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/coffeescript/coffeescript.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
/**
* Link to the project's GitHub page:
* https://github.com/pickhardt/coffeescript-codemirror-mode
*/
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
coffeescript
"
,
function
(
conf
,
parserConf
)
{
var
ERRORCLASS
=
"
error
"
;
function
wordRegexp
(
words
)
{
return
new
RegExp
(
"
^((
"
+
words
.
join
(
"
)|(
"
)
+
"
))
\\
b
"
);
}
var
operators
=
/^
(?:
->|=>|
\+[
+=
]?
|-
[\-
=
]?
|
\*[\*
=
]?
|
\/[\/
=
]?
|
[
=!
]
=|<
[
><
]?
=
?
|>>
?
=
?
|%=
?
|&=
?
|
\|
=
?
|
\^
=
?
|
\~
|!|
\?
|
(
or|and|
\|\|
|&&|
\?)
=
)
/
;
var
delimiters
=
/^
(?:[
()
\[\]
{},:`=;
]
|
\.\.?\.?)
/
;
var
identifiers
=
/^
[
_A-Za-z$
][
_A-Za-z$0-9
]
*/
;
var
atProp
=
/^@
[
_A-Za-z$
][
_A-Za-z$0-9
]
*/
;
var
wordOperators
=
wordRegexp
([
"
and
"
,
"
or
"
,
"
not
"
,
"
is
"
,
"
isnt
"
,
"
in
"
,
"
instanceof
"
,
"
typeof
"
]);
var
indentKeywords
=
[
"
for
"
,
"
while
"
,
"
loop
"
,
"
if
"
,
"
unless
"
,
"
else
"
,
"
switch
"
,
"
try
"
,
"
catch
"
,
"
finally
"
,
"
class
"
];
var
commonKeywords
=
[
"
break
"
,
"
by
"
,
"
continue
"
,
"
debugger
"
,
"
delete
"
,
"
do
"
,
"
in
"
,
"
of
"
,
"
new
"
,
"
return
"
,
"
then
"
,
"
this
"
,
"
@
"
,
"
throw
"
,
"
when
"
,
"
until
"
,
"
extends
"
];
var
keywords
=
wordRegexp
(
indentKeywords
.
concat
(
commonKeywords
));
indentKeywords
=
wordRegexp
(
indentKeywords
);
var
stringPrefixes
=
/^
(
'
{3}
|
\"{3}
|
[
'
\"])
/
;
var
regexPrefixes
=
/^
(\/{3}
|
\/)
/
;
var
commonConstants
=
[
"
Infinity
"
,
"
NaN
"
,
"
undefined
"
,
"
null
"
,
"
true
"
,
"
false
"
,
"
on
"
,
"
off
"
,
"
yes
"
,
"
no
"
];
var
constants
=
wordRegexp
(
commonConstants
);
// Tokenizers
function
tokenBase
(
stream
,
state
)
{
// Handle scope changes
if
(
stream
.
sol
())
{
if
(
state
.
scope
.
align
===
null
)
state
.
scope
.
align
=
false
;
var
scopeOffset
=
state
.
scope
.
offset
;
if
(
stream
.
eatSpace
())
{
var
lineOffset
=
stream
.
indentation
();
if
(
lineOffset
>
scopeOffset
&&
state
.
scope
.
type
==
"
coffee
"
)
{
return
"
indent
"
;
}
else
if
(
lineOffset
<
scopeOffset
)
{
return
"
dedent
"
;
}
return
null
;
}
else
{
if
(
scopeOffset
>
0
)
{
dedent
(
stream
,
state
);
}
}
}
if
(
stream
.
eatSpace
())
{
return
null
;
}
var
ch
=
stream
.
peek
();
// Handle docco title comment (single line)
if
(
stream
.
match
(
"
####
"
))
{
stream
.
skipToEnd
();
return
"
comment
"
;
}
// Handle multi line comments
if
(
stream
.
match
(
"
###
"
))
{
state
.
tokenize
=
longComment
;
return
state
.
tokenize
(
stream
,
state
);
}
// Single line comment
if
(
ch
===
"
#
"
)
{
stream
.
skipToEnd
();
return
"
comment
"
;
}
// Handle number literals
if
(
stream
.
match
(
/^-
?[
0-9
\.]
/
,
false
))
{
var
floatLiteral
=
false
;
// Floats
if
(
stream
.
match
(
/^-
?\d
*
\.\d
+
(
e
[\+\-]?\d
+
)?
/i
))
{
floatLiteral
=
true
;
}
if
(
stream
.
match
(
/^-
?\d
+
\.\d
*/
))
{
floatLiteral
=
true
;
}
if
(
stream
.
match
(
/^-
?\.\d
+/
))
{
floatLiteral
=
true
;
}
if
(
floatLiteral
)
{
// prevent from getting extra . on 1..
if
(
stream
.
peek
()
==
"
.
"
){
stream
.
backUp
(
1
);
}
return
"
number
"
;
}
// Integers
var
intLiteral
=
false
;
// Hex
if
(
stream
.
match
(
/^-
?
0x
[
0-9a-f
]
+/i
))
{
intLiteral
=
true
;
}
// Decimal
if
(
stream
.
match
(
/^-
?[
1-9
]\d
*
(
e
[\+\-]?\d
+
)?
/
))
{
intLiteral
=
true
;
}
// Zero by itself with no other piece of number.
if
(
stream
.
match
(
/^-
?
0
(?![\d
x
])
/i
))
{
intLiteral
=
true
;
}
if
(
intLiteral
)
{
return
"
number
"
;
}
}
// Handle strings
if
(
stream
.
match
(
stringPrefixes
))
{
state
.
tokenize
=
tokenFactory
(
stream
.
current
(),
false
,
"
string
"
);
return
state
.
tokenize
(
stream
,
state
);
}
// Handle regex literals
if
(
stream
.
match
(
regexPrefixes
))
{
if
(
stream
.
current
()
!=
"
/
"
||
stream
.
match
(
/^.*
\/
/
,
false
))
{
// prevent highlight of division
state
.
tokenize
=
tokenFactory
(
stream
.
current
(),
true
,
"
string-2
"
);
return
state
.
tokenize
(
stream
,
state
);
}
else
{
stream
.
backUp
(
1
);
}
}
// Handle operators and delimiters
if
(
stream
.
match
(
operators
)
||
stream
.
match
(
wordOperators
))
{
return
"
operator
"
;
}
if
(
stream
.
match
(
delimiters
))
{
return
"
punctuation
"
;
}
if
(
stream
.
match
(
constants
))
{
return
"
atom
"
;
}
if
(
stream
.
match
(
atProp
)
||
state
.
prop
&&
stream
.
match
(
identifiers
))
{
return
"
property
"
;
}
if
(
stream
.
match
(
keywords
))
{
return
"
keyword
"
;
}
if
(
stream
.
match
(
identifiers
))
{
return
"
variable
"
;
}
// Handle non-detected items
stream
.
next
();
return
ERRORCLASS
;
}
function
tokenFactory
(
delimiter
,
singleline
,
outclass
)
{
return
function
(
stream
,
state
)
{
while
(
!
stream
.
eol
())
{
stream
.
eatWhile
(
/
[^
'"
\/\\]
/
);
if
(
stream
.
eat
(
"
\\
"
))
{
stream
.
next
();
if
(
singleline
&&
stream
.
eol
())
{
return
outclass
;
}
}
else
if
(
stream
.
match
(
delimiter
))
{
state
.
tokenize
=
tokenBase
;
return
outclass
;
}
else
{
stream
.
eat
(
/
[
'"
\/]
/
);
}
}
if
(
singleline
)
{
if
(
parserConf
.
singleLineStringErrors
)
{
outclass
=
ERRORCLASS
;
}
else
{
state
.
tokenize
=
tokenBase
;
}
}
return
outclass
;
};
}
function
longComment
(
stream
,
state
)
{
while
(
!
stream
.
eol
())
{
stream
.
eatWhile
(
/
[^
#
]
/
);
if
(
stream
.
match
(
"
###
"
))
{
state
.
tokenize
=
tokenBase
;
break
;
}
stream
.
eatWhile
(
"
#
"
);
}
return
"
comment
"
;
}
function
indent
(
stream
,
state
,
type
)
{
type
=
type
||
"
coffee
"
;
var
offset
=
0
,
align
=
false
,
alignOffset
=
null
;
for
(
var
scope
=
state
.
scope
;
scope
;
scope
=
scope
.
prev
)
{
if
(
scope
.
type
===
"
coffee
"
||
scope
.
type
==
"
}
"
)
{
offset
=
scope
.
offset
+
conf
.
indentUnit
;
break
;
}
}
if
(
type
!==
"
coffee
"
)
{
align
=
null
;
alignOffset
=
stream
.
column
()
+
stream
.
current
().
length
;
}
else
if
(
state
.
scope
.
align
)
{
state
.
scope
.
align
=
false
;
}
state
.
scope
=
{
offset
:
offset
,
type
:
type
,
prev
:
state
.
scope
,
align
:
align
,
alignOffset
:
alignOffset
};
}
function
dedent
(
stream
,
state
)
{
if
(
!
state
.
scope
.
prev
)
return
;
if
(
state
.
scope
.
type
===
"
coffee
"
)
{
var
_indent
=
stream
.
indentation
();
var
matched
=
false
;
for
(
var
scope
=
state
.
scope
;
scope
;
scope
=
scope
.
prev
)
{
if
(
_indent
===
scope
.
offset
)
{
matched
=
true
;
break
;
}
}
if
(
!
matched
)
{
return
true
;
}
while
(
state
.
scope
.
prev
&&
state
.
scope
.
offset
!==
_indent
)
{
state
.
scope
=
state
.
scope
.
prev
;
}
return
false
;
}
else
{
state
.
scope
=
state
.
scope
.
prev
;
return
false
;
}
}
function
tokenLexer
(
stream
,
state
)
{
var
style
=
state
.
tokenize
(
stream
,
state
);
var
current
=
stream
.
current
();
// Handle scope changes.
if
(
current
===
"
return
"
)
{
state
.
dedent
=
true
;
}
if
(((
current
===
"
->
"
||
current
===
"
=>
"
)
&&
stream
.
eol
())
||
style
===
"
indent
"
)
{
indent
(
stream
,
state
);
}
var
delimiter_index
=
"
[({
"
.
indexOf
(
current
);
if
(
delimiter_index
!==
-
1
)
{
indent
(
stream
,
state
,
"
])}
"
.
slice
(
delimiter_index
,
delimiter_index
+
1
));
}
if
(
indentKeywords
.
exec
(
current
)){
indent
(
stream
,
state
);
}
if
(
current
==
"
then
"
){
dedent
(
stream
,
state
);
}
if
(
style
===
"
dedent
"
)
{
if
(
dedent
(
stream
,
state
))
{
return
ERRORCLASS
;
}
}
delimiter_index
=
"
])}
"
.
indexOf
(
current
);
if
(
delimiter_index
!==
-
1
)
{
while
(
state
.
scope
.
type
==
"
coffee
"
&&
state
.
scope
.
prev
)
state
.
scope
=
state
.
scope
.
prev
;
if
(
state
.
scope
.
type
==
current
)
state
.
scope
=
state
.
scope
.
prev
;
}
if
(
state
.
dedent
&&
stream
.
eol
())
{
if
(
state
.
scope
.
type
==
"
coffee
"
&&
state
.
scope
.
prev
)
state
.
scope
=
state
.
scope
.
prev
;
state
.
dedent
=
false
;
}
return
style
;
}
var
external
=
{
startState
:
function
(
basecolumn
)
{
return
{
tokenize
:
tokenBase
,
scope
:
{
offset
:
basecolumn
||
0
,
type
:
"
coffee
"
,
prev
:
null
,
align
:
false
},
prop
:
false
,
dedent
:
0
};
},
token
:
function
(
stream
,
state
)
{
var
fillAlign
=
state
.
scope
.
align
===
null
&&
state
.
scope
;
if
(
fillAlign
&&
stream
.
sol
())
fillAlign
.
align
=
false
;
var
style
=
tokenLexer
(
stream
,
state
);
if
(
style
&&
style
!=
"
comment
"
)
{
if
(
fillAlign
)
fillAlign
.
align
=
true
;
state
.
prop
=
style
==
"
punctuation
"
&&
stream
.
current
()
==
"
.
"
}
return
style
;
},
indent
:
function
(
state
,
text
)
{
if
(
state
.
tokenize
!=
tokenBase
)
return
0
;
var
scope
=
state
.
scope
;
var
closer
=
text
&&
"
])}
"
.
indexOf
(
text
.
charAt
(
0
))
>
-
1
;
if
(
closer
)
while
(
scope
.
type
==
"
coffee
"
&&
scope
.
prev
)
scope
=
scope
.
prev
;
var
closes
=
closer
&&
scope
.
type
===
text
.
charAt
(
0
);
if
(
scope
.
align
)
return
scope
.
alignOffset
-
(
closes
?
1
:
0
);
else
return
(
closes
?
scope
.
prev
:
scope
).
offset
;
},
lineComment
:
"
#
"
,
fold
:
"
indent
"
};
return
external
;
});
// IANA registered media type
// https://www.iana.org/assignments/media-types/
CodeMirror
.
defineMIME
(
"
application/vnd.coffeescript
"
,
"
coffeescript
"
);
CodeMirror
.
defineMIME
(
"
text/x-coffeescript
"
,
"
coffeescript
"
);
CodeMirror
.
defineMIME
(
"
text/coffeescript
"
,
"
coffeescript
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/coffeescript/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: CoffeeScript mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"coffeescript.js"
></script>
<style>
.CodeMirror
{
border-top
:
1px
solid
silver
;
border-bottom
:
1px
solid
silver
;}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
CoffeeScript
</a>
</ul>
</div>
<article>
<h2>
CoffeeScript mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
# CoffeeScript mode for CodeMirror
# Copyright (c) 2011 Jeff Pickhardt, released under
# the MIT License.
#
# Modified from the Python CodeMirror mode, which also is
# under the MIT License Copyright (c) 2010 Timothy Farrell.
#
# The following script, Underscore.coffee, is used to
# demonstrate CoffeeScript mode for CodeMirror.
#
# To download CoffeeScript mode for CodeMirror, go to:
# https://github.com/pickhardt/coffeescript-codemirror-mode
# **Underscore.coffee
# (c) 2011 Jeremy Ashkenas, DocumentCloud Inc.**
# Underscore is freely distributable under the terms of the
# [MIT license](http://en.wikipedia.org/wiki/MIT_License).
# Portions of Underscore are inspired by or borrowed from
# [Prototype.js](http://prototypejs.org/api), Oliver Steele's
# [Functional](http://osteele.com), and John Resig's
# [Micro-Templating](http://ejohn.org).
# For all details and documentation:
# http://documentcloud.github.com/underscore/
# Baseline setup
# --------------
# Establish the root object, `window` in the browser, or `global` on the server.
root = this
# Save the previous value of the `_` variable.
previousUnderscore = root._
### Multiline
comment
###
# Establish the object that gets thrown to break out of a loop iteration.
# `StopIteration` is SOP on Mozilla.
breaker = if typeof(StopIteration) is 'undefined' then '__break__' else StopIteration
#### Docco style single line comment (title)
# Helper function to escape **RegExp** contents, because JS doesn't have one.
escapeRegExp = (string) -> string.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1')
# Save bytes in the minified (but not gzipped) version:
ArrayProto = Array.prototype
ObjProto = Object.prototype
# Create quick reference variables for speed access to core prototypes.
slice = ArrayProto.slice
unshift = ArrayProto.unshift
toString = ObjProto.toString
hasOwnProperty = ObjProto.hasOwnProperty
propertyIsEnumerable = ObjProto.propertyIsEnumerable
# All **ECMA5** native implementations we hope to use are declared here.
nativeForEach = ArrayProto.forEach
nativeMap = ArrayProto.map
nativeReduce = ArrayProto.reduce
nativeReduceRight = ArrayProto.reduceRight
nativeFilter = ArrayProto.filter
nativeEvery = ArrayProto.every
nativeSome = ArrayProto.some
nativeIndexOf = ArrayProto.indexOf
nativeLastIndexOf = ArrayProto.lastIndexOf
nativeIsArray = Array.isArray
nativeKeys = Object.keys
# Create a safe reference to the Underscore object for use below.
_ = (obj) -> new wrapper(obj)
# Export the Underscore object for **CommonJS**.
if typeof(exports) != 'undefined' then exports._ = _
# Export Underscore to global scope.
root._ = _
# Current version.
_.VERSION = '1.1.0'
# Collection Functions
# --------------------
# The cornerstone, an **each** implementation.
# Handles objects implementing **forEach**, arrays, and raw objects.
_.each = (obj, iterator, context) ->
try
if nativeForEach and obj.forEach is nativeForEach
obj.forEach iterator, context
else if _.isNumber obj.length
iterator.call context, obj[i], i, obj for i in [0...obj.length]
else
iterator.call context, val, key, obj for own key, val of obj
catch e
throw e if e isnt breaker
obj
# Return the results of applying the iterator to each element. Use JavaScript
# 1.6's version of **map**, if possible.
_.map = (obj, iterator, context) ->
return obj.map(iterator, context) if nativeMap and obj.map is nativeMap
results = []
_.each obj, (value, index, list) ->
results.push iterator.call context, value, index, list
results
# **Reduce** builds up a single result from a list of values. Also known as
# **inject**, or **foldl**. Uses JavaScript 1.8's version of **reduce**, if possible.
_.reduce = (obj, iterator, memo, context) ->
if nativeReduce and obj.reduce is nativeReduce
iterator = _.bind iterator, context if context
return obj.reduce iterator, memo
_.each obj, (value, index, list) ->
memo = iterator.call context, memo, value, index, list
memo
# The right-associative version of **reduce**, also known as **foldr**. Uses
# JavaScript 1.8's version of **reduceRight**, if available.
_.reduceRight = (obj, iterator, memo, context) ->
if nativeReduceRight and obj.reduceRight is nativeReduceRight
iterator = _.bind iterator, context if context
return obj.reduceRight iterator, memo
reversed = _.clone(_.toArray(obj)).reverse()
_.reduce reversed, iterator, memo, context
# Return the first value which passes a truth test.
_.detect = (obj, iterator, context) ->
result = null
_.each obj, (value, index, list) ->
if iterator.call context, value, index, list
result = value
_.breakLoop()
result
# Return all the elements that pass a truth test. Use JavaScript 1.6's
# **filter**, if it exists.
_.filter = (obj, iterator, context) ->
return obj.filter iterator, context if nativeFilter and obj.filter is nativeFilter
results = []
_.each obj, (value, index, list) ->
results.push value if iterator.call context, value, index, list
results
# Return all the elements for which a truth test fails.
_.reject = (obj, iterator, context) ->
results = []
_.each obj, (value, index, list) ->
results.push value if not iterator.call context, value, index, list
results
# Determine whether all of the elements match a truth test. Delegate to
# JavaScript 1.6's **every**, if it is present.
_.every = (obj, iterator, context) ->
iterator ||= _.identity
return obj.every iterator, context if nativeEvery and obj.every is nativeEvery
result = true
_.each obj, (value, index, list) ->
_.breakLoop() unless (result = result and iterator.call(context, value, index, list))
result
# Determine if at least one element in the object matches a truth test. Use
# JavaScript 1.6's **some**, if it exists.
_.some = (obj, iterator, context) ->
iterator ||= _.identity
return obj.some iterator, context if nativeSome and obj.some is nativeSome
result = false
_.each obj, (value, index, list) ->
_.breakLoop() if (result = iterator.call(context, value, index, list))
result
# Determine if a given value is included in the array or object,
# based on `===`.
_.include = (obj, target) ->
return _.indexOf(obj, target) isnt -1 if nativeIndexOf and obj.indexOf is nativeIndexOf
return true for own key, val of obj when val is target
false
# Invoke a method with arguments on every item in a collection.
_.invoke = (obj, method) ->
args = _.rest arguments, 2
(if method then val[method] else val).apply(val, args) for val in obj
# Convenience version of a common use case of **map**: fetching a property.
_.pluck = (obj, key) ->
_.map(obj, (val) -> val[key])
# Return the maximum item or (item-based computation).
_.max = (obj, iterator, context) ->
return Math.max.apply(Math, obj) if not iterator and _.isArray(obj)
result = computed: -Infinity
_.each obj, (value, index, list) ->
computed = if iterator then iterator.call(context, value, index, list) else value
computed >= result.computed and (result = {value: value, computed: computed})
result.value
# Return the minimum element (or element-based computation).
_.min = (obj, iterator, context) ->
return Math.min.apply(Math, obj) if not iterator and _.isArray(obj)
result = computed: Infinity
_.each obj, (value, index, list) ->
computed = if iterator then iterator.call(context, value, index, list) else value
computed
<
result.computed
and
(result =
{value:
value
,
computed:
computed
})
result.value
#
Sort
the
object
'
s
values
by
a
criterion
produced
by
an
iterator.
_.sortBy =
(obj,
iterator
,
context
)
-
>
_.pluck(((_.map obj, (value, index, list) ->
{value: value, criteria: iterator.call(context, value, index, list)}
).sort((left, right) ->
a = left.criteria; b = right.criteria
if a
<
b
then
-1
else
if
a
>
b then 1 else 0
)), 'value')
# Use a comparator function to figure out at what index an object should
# be inserted so as to maintain order. Uses binary search.
_.sortedIndex = (array, obj, iterator) ->
iterator ||= _.identity
low = 0
high = array.length
while low
<
high
mid =
(low
+
high
)
>
> 1
if iterator(array[mid])
<
iterator
(
obj
)
then
low =
mid
+
1
else
high =
mid
low
#
Convert
anything
iterable
into
a
real
,
live
array.
_.toArray =
(iterable)
-
>
return [] if (!iterable)
return iterable.toArray() if (iterable.toArray)
return iterable if (_.isArray(iterable))
return slice.call(iterable) if (_.isArguments(iterable))
_.values(iterable)
# Return the number of elements in an object.
_.size = (obj) -> _.toArray(obj).length
# Array Functions
# ---------------
# Get the first element of an array. Passing `n` will return the first N
# values in the array. Aliased as **head**. The `guard` check allows it to work
# with **map**.
_.first = (array, n, guard) ->
if n and not guard then slice.call(array, 0, n) else array[0]
# Returns everything but the first entry of the array. Aliased as **tail**.
# Especially useful on the arguments object. Passing an `index` will return
# the rest of the values in the array from that index onward. The `guard`
# check allows it to work with **map**.
_.rest = (array, index, guard) ->
slice.call(array, if _.isUndefined(index) or guard then 1 else index)
# Get the last element of an array.
_.last = (array) -> array[array.length - 1]
# Trim out all falsy values from an array.
_.compact = (array) -> item for item in array when item
# Return a completely flattened version of an array.
_.flatten = (array) ->
_.reduce array, (memo, value) ->
return memo.concat(_.flatten(value)) if _.isArray value
memo.push value
memo
, []
# Return a version of the array that does not contain the specified value(s).
_.without = (array) ->
values = _.rest arguments
val for val in _.toArray(array) when not _.include values, val
# Produce a duplicate-free version of the array. If the array has already
# been sorted, you have the option of using a faster algorithm.
_.uniq = (array, isSorted) ->
memo = []
for el, i in _.toArray array
memo.push el if i is 0 || (if isSorted is true then _.last(memo) isnt el else not _.include(memo, el))
memo
# Produce an array that contains every item shared between all the
# passed-in arrays.
_.intersect = (array) ->
rest = _.rest arguments
_.select _.uniq(array), (item) ->
_.all rest, (other) ->
_.indexOf(other, item) >= 0
# Zip together multiple lists into a single array -- elements that share
# an index go together.
_.zip = ->
length = _.max _.pluck arguments, 'length'
results = new Array length
for i in [0...length]
results[i] = _.pluck arguments, String i
results
# If the browser doesn't supply us with **indexOf** (I'm looking at you, MSIE),
# we need this function. Return the position of the first occurrence of an
# item in an array, or -1 if the item is not included in the array.
_.indexOf = (array, item) ->
return array.indexOf item if nativeIndexOf and array.indexOf is nativeIndexOf
i = 0; l = array.length
while l - i
if array[i] is item then return i else i++
-1
# Provide JavaScript 1.6's **lastIndexOf**, delegating to the native function,
# if possible.
_.lastIndexOf = (array, item) ->
return array.lastIndexOf(item) if nativeLastIndexOf and array.lastIndexOf is nativeLastIndexOf
i = array.length
while i
if array[i] is item then return i else i--
-1
# Generate an integer Array containing an arithmetic progression. A port of
# [the native Python **range** function](http://docs.python.org/library/functions.html#range).
_.range = (start, stop, step) ->
a = arguments
solo = a.length
<
=
1
i =
start
=
if
solo
then
0
else
a
[0]
stop =
if
solo
then
a
[0]
else
a
[1]
step =
a[2]
or
1
len =
Math.ceil((stop
-
start
)
/
step
)
return
[]
if
len
<=
0
range =
new
Array
len
idx =
0
loop
return
range
if
(
if
step
>
0 then i - stop else stop - i) >= 0
range[idx] = i
idx++
i+= step
# Function Functions
# ------------------
# Create a function bound to a given object (assigning `this`, and arguments,
# optionally). Binding with arguments is also known as **curry**.
_.bind = (func, obj) ->
args = _.rest arguments, 2
-> func.apply obj or root, args.concat arguments
# Bind all of an object's methods to that object. Useful for ensuring that
# all callbacks defined on an object belong to it.
_.bindAll = (obj) ->
funcs = if arguments.length > 1 then _.rest(arguments) else _.functions(obj)
_.each funcs, (f) -> obj[f] = _.bind obj[f], obj
obj
# Delays a function for the given number of milliseconds, and then calls
# it with the arguments supplied.
_.delay = (func, wait) ->
args = _.rest arguments, 2
setTimeout((-> func.apply(func, args)), wait)
# Memoize an expensive function by storing its results.
_.memoize = (func, hasher) ->
memo = {}
hasher or= _.identity
->
key = hasher.apply this, arguments
return memo[key] if key of memo
memo[key] = func.apply this, arguments
# Defers a function, scheduling it to run after the current call stack has
# cleared.
_.defer = (func) ->
_.delay.apply _, [func, 1].concat _.rest arguments
# Returns the first function passed as an argument to the second,
# allowing you to adjust arguments, run code before and after, and
# conditionally execute the original function.
_.wrap = (func, wrapper) ->
-> wrapper.apply wrapper, [func].concat arguments
# Returns a function that is the composition of a list of functions, each
# consuming the return value of the function that follows.
_.compose = ->
funcs = arguments
->
args = arguments
for i in [funcs.length - 1..0] by -1
args = [funcs[i].apply(this, args)]
args[0]
# Object Functions
# ----------------
# Retrieve the names of an object's properties.
_.keys = nativeKeys or (obj) ->
return _.range 0, obj.length if _.isArray(obj)
key for key, val of obj
# Retrieve the values of an object's properties.
_.values = (obj) ->
_.map obj, _.identity
# Return a sorted list of the function names available in Underscore.
_.functions = (obj) ->
_.filter(_.keys(obj), (key) -> _.isFunction(obj[key])).sort()
# Extend a given object with all of the properties in a source object.
_.extend = (obj) ->
for source in _.rest(arguments)
obj[key] = val for key, val of source
obj
# Create a (shallow-cloned) duplicate of an object.
_.clone = (obj) ->
return obj.slice 0 if _.isArray obj
_.extend {}, obj
# Invokes interceptor with the obj, and then returns obj.
# The primary purpose of this method is to "tap into" a method chain,
# in order to perform operations on intermediate results within
the chain.
_.tap = (obj, interceptor) ->
interceptor obj
obj
# Perform a deep comparison to check if two objects are equal.
_.isEqual = (a, b) ->
# Check object identity.
return true if a is b
# Different types?
atype = typeof(a); btype = typeof(b)
return false if atype isnt btype
# Basic equality test (watch out for coercions).
return true if `a == b`
# One is falsy and the other truthy.
return false if (!a and b) or (a and !b)
# One of them implements an `isEqual()`?
return a.isEqual(b) if a.isEqual
# Check dates' integer values.
return a.getTime() is b.getTime() if _.isDate(a) and _.isDate(b)
# Both are NaN?
return false if _.isNaN(a) and _.isNaN(b)
# Compare regular expressions.
if _.isRegExp(a) and _.isRegExp(b)
return a.source is b.source and
a.global is b.global and
a.ignoreCase is b.ignoreCase and
a.multiline is b.multiline
# If a is not an object by this point, we can't handle it.
return false if atype isnt 'object'
# Check for different array lengths before comparing contents.
return false if a.length and (a.length isnt b.length)
# Nothing else worked, deep compare the contents.
aKeys = _.keys(a); bKeys = _.keys(b)
# Different object sizes?
return false if aKeys.length isnt bKeys.length
# Recursive comparison of contents.
return false for key, val of a when !(key of b) or !_.isEqual(val, b[key])
true
# Is a given array or object empty?
_.isEmpty = (obj) ->
return obj.length is 0 if _.isArray(obj) or _.isString(obj)
return false for own key of obj
true
# Is a given value a DOM element?
_.isElement = (obj) -> obj and obj.nodeType is 1
# Is a given value an array?
_.isArray = nativeIsArray or (obj) -> !!(obj and obj.concat and obj.unshift and not obj.callee)
# Is a given variable an arguments object?
_.isArguments = (obj) -> obj and obj.callee
# Is the given value a function?
_.isFunction = (obj) -> !!(obj and obj.constructor and obj.call and obj.apply)
# Is the given value a string?
_.isString = (obj) -> !!(obj is '' or (obj and obj.charCodeAt and obj.substr))
# Is a given value a number?
_.isNumber = (obj) -> (obj is +obj) or toString.call(obj) is '[object Number]'
# Is a given value a boolean?
_.isBoolean = (obj) -> obj is true or obj is false
# Is a given value a Date?
_.isDate = (obj) -> !!(obj and obj.getTimezoneOffset and obj.setUTCFullYear)
# Is the given value a regular expression?
_.isRegExp = (obj) -> !!(obj and obj.exec and (obj.ignoreCase or obj.ignoreCase is false))
# Is the given value NaN -- this one is interesting. `NaN != NaN`, and
# `isNaN(undefined) == true`, so we make sure it's a number first.
_.isNaN = (obj) -> _.isNumber(obj) and window.isNaN(obj)
# Is a given value equal to null?
_.isNull = (obj) -> obj is null
# Is a given variable undefined?
_.isUndefined = (obj) -> typeof obj is 'undefined'
# Utility Functions
# -----------------
# Run Underscore.js in noConflict mode, returning the `_` variable to its
# previous owner. Returns a reference to the Underscore object.
_.noConflict = ->
root._ = previousUnderscore
this
# Keep the identity function around for default iterators.
_.identity = (value) -> value
# Run a function `n` times.
_.times = (n, iterator, context) ->
iterator.call context, i for i in [0...n]
# Break out of the middle of an iteration.
_.breakLoop = -> throw breaker
# Add your own custom functions to the Underscore object, ensuring that
# they're correctly added to the OOP wrapper as well.
_.mixin = (obj) ->
for name in _.functions(obj)
addToWrapper name, _[name] = obj[name]
# Generate a unique integer id (unique within the entire client session).
# Useful for temporary DOM ids.
idCounter = 0
_.uniqueId = (prefix) ->
(prefix or '') + idCounter++
# By default, Underscore uses **ERB**-style template delimiters, change the
# following template settings to use alternative delimiters.
_.templateSettings = {
start: '
<
%'
end:
'%
>
'
interpolate: /
<
%=(.+?)%
>
/g
}
# JavaScript templating a-la **ERB**, pilfered from John Resig's
# *Secrets of the JavaScript Ninja*, page 83.
# Single-quote fix from Rick Strahl.
# With alterations for arbitrary delimiters, and to preserve whitespace.
_.template = (str, data) ->
c = _.templateSettings
endMatch = new RegExp("'(?=[^"+c.end.substr(0, 1)+"]*"+escapeRegExp(c.end)+")","g")
fn = new Function 'obj',
'var p=[],print=function(){p.push.apply(p,arguments);};' +
'with(obj||{}){p.push(\'' +
str.replace(/\r/g, '\\r')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
.replace(endMatch,"���")
.split("'").join("\\'")
.split("���").join("'")
.replace(c.interpolate, "',$1,'")
.split(c.start).join("');")
.split(c.end).join("p.push('") +
"');}return p.join('');"
if data then fn(data) else fn
# Aliases
# -------
_.forEach = _.each
_.foldl = _.inject = _.reduce
_.foldr = _.reduceRight
_.select = _.filter
_.all = _.every
_.any = _.some
_.contains = _.include
_.head = _.first
_.tail = _.rest
_.methods = _.functions
# Setup the OOP Wrapper
# ---------------------
# If Underscore is called as a function, it returns a wrapped object that
# can be used OO-style. This wrapper holds altered versions of all the
# underscore functions. Wrapped objects may be chained.
wrapper = (obj) ->
this._wrapped = obj
this
# Helper function to continue chaining intermediate results.
result = (obj, chain) ->
if chain then _(obj).chain() else obj
# A method to easily add functions to the OOP wrapper.
addToWrapper = (name, func) ->
wrapper.prototype[name] = ->
args = _.toArray arguments
unshift.call args, this._wrapped
result func.apply(_, args), this._chain
# Add all ofthe Underscore functions to the wrapper object.
_.mixin _
# Add all mutator Array functions to the wrapper.
_.each ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], (name) ->
method = Array.prototype[name]
wrapper.prototype[name] = ->
method.apply(this._wrapped, arguments)
result(this._wrapped, this._chain)
# Add all accessor Array functions to the wrapper.
_.each ['concat', 'join', 'slice'], (name) ->
method = Array.prototype[name]
wrapper.prototype[name] = ->
result(method.apply(this._wrapped, arguments), this._chain)
# Start chaining a wrapped Underscore object.
wrapper::chain = ->
this._chain = true
this
# Extracts the result from a wrapped and chained object.
wrapper::value = -> this._wrapped
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
application/vnd.coffeescript
</code>
,
<code>
text/coffeescript
</code>
,
<code>
text/x-coffeescript
</code>
.
</p>
<p>
The CoffeeScript mode was written by Jeff Pickhardt.
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/commonlisp/commonlisp.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
commonlisp
"
,
function
(
config
)
{
var
specialForm
=
/^
(
block|let*|return-from|catch|load-time-value|setq|eval-when|locally|symbol-macrolet|flet|macrolet|tagbody|function|multiple-value-call|the|go|multiple-value-prog1|throw|if|progn|unwind-protect|labels|progv|let|quote
)
$/
;
var
assumeBody
=
/^with|^def|^do|^prog|case$|^cond$|bind$|when$|unless$/
;
var
numLiteral
=
/^
(?:[
+
\-]?(?:\d
+|
\d
*
\.\d
+
)(?:[
efd
][
+
\-]?\d
+
)?
|
[
+
\-]?\d
+
(?:\/[
+
\-]?\d
+
)?
|#b
[
+
\-]?[
01
]
+|#o
[
+
\-]?[
0-7
]
+|#x
[
+
\-]?[\d
a-f
]
+
)
/
;
var
symbol
=
/
[^\s
'`,@()
\[\]
";
]
/
;
var
type
;
function
readSym
(
stream
)
{
var
ch
;
while
(
ch
=
stream
.
next
())
{
if
(
ch
==
"
\\
"
)
stream
.
next
();
else
if
(
!
symbol
.
test
(
ch
))
{
stream
.
backUp
(
1
);
break
;
}
}
return
stream
.
current
();
}
function
base
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
{
type
=
"
ws
"
;
return
null
;}
if
(
stream
.
match
(
numLiteral
))
return
"
number
"
;
var
ch
=
stream
.
next
();
if
(
ch
==
"
\\
"
)
ch
=
stream
.
next
();
if
(
ch
==
'
"
'
)
return
(
state
.
tokenize
=
inString
)(
stream
,
state
);
else
if
(
ch
==
"
(
"
)
{
type
=
"
open
"
;
return
"
bracket
"
;
}
else
if
(
ch
==
"
)
"
||
ch
==
"
]
"
)
{
type
=
"
close
"
;
return
"
bracket
"
;
}
else
if
(
ch
==
"
;
"
)
{
stream
.
skipToEnd
();
type
=
"
ws
"
;
return
"
comment
"
;
}
else
if
(
/
[
'`,@
]
/
.
test
(
ch
))
return
null
;
else
if
(
ch
==
"
|
"
)
{
if
(
stream
.
skipTo
(
"
|
"
))
{
stream
.
next
();
return
"
symbol
"
;
}
else
{
stream
.
skipToEnd
();
return
"
error
"
;
}
}
else
if
(
ch
==
"
#
"
)
{
var
ch
=
stream
.
next
();
if
(
ch
==
"
(
"
)
{
type
=
"
open
"
;
return
"
bracket
"
;
}
else
if
(
/
[
+
\-
=
\.
'
]
/
.
test
(
ch
))
return
null
;
else
if
(
/
\d
/
.
test
(
ch
)
&&
stream
.
match
(
/^
\d
*#/
))
return
null
;
else
if
(
ch
==
"
|
"
)
return
(
state
.
tokenize
=
inComment
)(
stream
,
state
);
else
if
(
ch
==
"
:
"
)
{
readSym
(
stream
);
return
"
meta
"
;
}
else
if
(
ch
==
"
\\
"
)
{
stream
.
next
();
readSym
(
stream
);
return
"
string-2
"
}
else
return
"
error
"
;
}
else
{
var
name
=
readSym
(
stream
);
if
(
name
==
"
.
"
)
return
null
;
type
=
"
symbol
"
;
if
(
name
==
"
nil
"
||
name
==
"
t
"
||
name
.
charAt
(
0
)
==
"
:
"
)
return
"
atom
"
;
if
(
state
.
lastType
==
"
open
"
&&
(
specialForm
.
test
(
name
)
||
assumeBody
.
test
(
name
)))
return
"
keyword
"
;
if
(
name
.
charAt
(
0
)
==
"
&
"
)
return
"
variable-2
"
;
return
"
variable
"
;
}
}
function
inString
(
stream
,
state
)
{
var
escaped
=
false
,
next
;
while
(
next
=
stream
.
next
())
{
if
(
next
==
'
"
'
&&
!
escaped
)
{
state
.
tokenize
=
base
;
break
;
}
escaped
=
!
escaped
&&
next
==
"
\\
"
;
}
return
"
string
"
;
}
function
inComment
(
stream
,
state
)
{
var
next
,
last
;
while
(
next
=
stream
.
next
())
{
if
(
next
==
"
#
"
&&
last
==
"
|
"
)
{
state
.
tokenize
=
base
;
break
;
}
last
=
next
;
}
type
=
"
ws
"
;
return
"
comment
"
;
}
return
{
startState
:
function
()
{
return
{
ctx
:
{
prev
:
null
,
start
:
0
,
indentTo
:
0
},
lastType
:
null
,
tokenize
:
base
};
},
token
:
function
(
stream
,
state
)
{
if
(
stream
.
sol
()
&&
typeof
state
.
ctx
.
indentTo
!=
"
number
"
)
state
.
ctx
.
indentTo
=
state
.
ctx
.
start
+
1
;
type
=
null
;
var
style
=
state
.
tokenize
(
stream
,
state
);
if
(
type
!=
"
ws
"
)
{
if
(
state
.
ctx
.
indentTo
==
null
)
{
if
(
type
==
"
symbol
"
&&
assumeBody
.
test
(
stream
.
current
()))
state
.
ctx
.
indentTo
=
state
.
ctx
.
start
+
config
.
indentUnit
;
else
state
.
ctx
.
indentTo
=
"
next
"
;
}
else
if
(
state
.
ctx
.
indentTo
==
"
next
"
)
{
state
.
ctx
.
indentTo
=
stream
.
column
();
}
state
.
lastType
=
type
;
}
if
(
type
==
"
open
"
)
state
.
ctx
=
{
prev
:
state
.
ctx
,
start
:
stream
.
column
(),
indentTo
:
null
};
else
if
(
type
==
"
close
"
)
state
.
ctx
=
state
.
ctx
.
prev
||
state
.
ctx
;
return
style
;
},
indent
:
function
(
state
,
_textAfter
)
{
var
i
=
state
.
ctx
.
indentTo
;
return
typeof
i
==
"
number
"
?
i
:
state
.
ctx
.
start
+
1
;
},
closeBrackets
:
{
pairs
:
"
()[]{}
\"\"
"
},
lineComment
:
"
;;
"
,
blockCommentStart
:
"
#|
"
,
blockCommentEnd
:
"
|#
"
};
});
CodeMirror
.
defineMIME
(
"
text/x-common-lisp
"
,
"
commonlisp
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/commonlisp/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Common Lisp mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"commonlisp.js"
></script>
<style>
.CodeMirror
{
background
:
#f8f8f8
;}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
Common Lisp
</a>
</ul>
</div>
<article>
<h2>
Common Lisp mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
(in-package :cl-postgres)
;; These are used to synthesize reader and writer names for integer
;; reading/writing functions when the amount of bytes and the
;; signedness is known. Both the macro that creates the functions and
;; some macros that use them create names this way.
(eval-when (:compile-toplevel :load-toplevel :execute)
(defun integer-reader-name (bytes signed)
(intern (with-standard-io-syntax
(format nil "~a~a~a~a" '#:read- (if signed "" '#:u) '#:int bytes))))
(defun integer-writer-name (bytes signed)
(intern (with-standard-io-syntax
(format nil "~a~a~a~a" '#:write- (if signed "" '#:u) '#:int bytes)))))
(defmacro integer-reader (bytes)
"Create a function to read integers from a binary stream."
(let ((bits (* bytes 8)))
(labels ((return-form (signed)
(if signed
`(if (logbitp ,(1- bits) result)
(dpb result (byte ,(1- bits) 0) -1)
result)
`result))
(generate-reader (signed)
`(defun ,(integer-reader-name bytes signed) (socket)
(declare (type stream socket)
#.*optimize*)
,(if (= bytes 1)
`(let ((result (the (unsigned-byte 8) (read-byte socket))))
(declare (type (unsigned-byte 8) result))
,(return-form signed))
`(let ((result 0))
(declare (type (unsigned-byte ,bits) result))
,@(loop :for byte :from (1- bytes) :downto 0
:collect `(setf (ldb (byte 8 ,(* 8 byte)) result)
(the (unsigned-byte 8) (read-byte socket))))
,(return-form signed))))))
`(progn
;; This causes weird errors on SBCL in some circumstances. Disabled for now.
;; (declaim (inline ,(integer-reader-name bytes t)
;; ,(integer-reader-name bytes nil)))
(declaim (ftype (function (t) (signed-byte ,bits))
,(integer-reader-name bytes t)))
,(generate-reader t)
(declaim (ftype (function (t) (unsigned-byte ,bits))
,(integer-reader-name bytes nil)))
,(generate-reader nil)))))
(defmacro integer-writer (bytes)
"Create a function to write integers to a binary stream."
(let ((bits (* 8 bytes)))
`(progn
(declaim (inline ,(integer-writer-name bytes t)
,(integer-writer-name bytes nil)))
(defun ,(integer-writer-name bytes nil) (socket value)
(declare (type stream socket)
(type (unsigned-byte ,bits) value)
#.*optimize*)
,@(if (= bytes 1)
`((write-byte value socket))
(loop :for byte :from (1- bytes) :downto 0
:collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
socket)))
(values))
(defun ,(integer-writer-name bytes t) (socket value)
(declare (type stream socket)
(type (signed-byte ,bits) value)
#.*optimize*)
,@(if (= bytes 1)
`((write-byte (ldb (byte 8 0) value) socket))
(loop :for byte :from (1- bytes) :downto 0
:collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
socket)))
(values)))))
;; All the instances of the above that we need.
(integer-reader 1)
(integer-reader 2)
(integer-reader 4)
(integer-reader 8)
(integer-writer 1)
(integer-writer 2)
(integer-writer 4)
(defun write-bytes (socket bytes)
"Write a byte-array to a stream."
(declare (type stream socket)
(type (simple-array (unsigned-byte 8)) bytes)
#.*optimize*)
(write-sequence bytes socket))
(defun write-str (socket string)
"Write a null-terminated string to a stream \(encoding it when UTF-8
support is enabled.)."
(declare (type stream socket)
(type string string)
#.*optimize*)
(enc-write-string string socket)
(write-uint1 socket 0))
(declaim (ftype (function (t unsigned-byte)
(simple-array (unsigned-byte 8) (*)))
read-bytes))
(defun read-bytes (socket length)
"Read a byte array of the given length from a stream."
(declare (type stream socket)
(type fixnum length)
#.*optimize*)
(let ((result (make-array length :element-type '(unsigned-byte 8))))
(read-sequence result socket)
result))
(declaim (ftype (function (t) string) read-str))
(defun read-str (socket)
"Read a null-terminated string from a stream. Takes care of encoding
when UTF-8 support is enabled."
(declare (type stream socket)
#.*optimize*)
(enc-read-string socket :null-terminated t))
(defun skip-bytes (socket length)
"Skip a given number of bytes in a binary stream."
(declare (type stream socket)
(type (unsigned-byte 32) length)
#.*optimize*)
(dotimes (i length)
(read-byte socket)))
(defun skip-str (socket)
"Skip a null-terminated string."
(declare (type stream socket)
#.*optimize*)
(loop :for char :of-type fixnum = (read-byte socket)
:until (zerop char)))
(defun ensure-socket-is-closed (socket
&
key abort)
(when (open-stream-p socket)
(handler-case
(close socket :abort abort)
(error (error)
(warn "Ignoring the error which happened while trying to close PostgreSQL socket: ~A" error)))))
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
lineNumbers
:
true
});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-common-lisp
</code>
.
</p>
</article>
src/main/webapp/static/plugins/codemirror/5.48.4/mode/crystal/crystal.js
0 → 100644
View file @
53f587bc
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: https://codemirror.net/LICENSE
(
function
(
mod
)
{
if
(
typeof
exports
==
"
object
"
&&
typeof
module
==
"
object
"
)
// CommonJS
mod
(
require
(
"
../../lib/codemirror
"
));
else
if
(
typeof
define
==
"
function
"
&&
define
.
amd
)
// AMD
define
([
"
../../lib/codemirror
"
],
mod
);
else
// Plain browser env
mod
(
CodeMirror
);
})(
function
(
CodeMirror
)
{
"
use strict
"
;
CodeMirror
.
defineMode
(
"
crystal
"
,
function
(
config
)
{
function
wordRegExp
(
words
,
end
)
{
return
new
RegExp
((
end
?
""
:
"
^
"
)
+
"
(?:
"
+
words
.
join
(
"
|
"
)
+
"
)
"
+
(
end
?
"
$
"
:
"
\\
b
"
));
}
function
chain
(
tokenize
,
stream
,
state
)
{
state
.
tokenize
.
push
(
tokenize
);
return
tokenize
(
stream
,
state
);
}
var
operators
=
/^
(?:[
-+
/
%|&^
]
|
\*\*?
|
[
<>
]{2})
/
;
var
conditionalOperators
=
/^
(?:[
=!
]
~|===|<=>|
[
<>=!
]
=
?
|
[
|&
]{2}
|~
)
/
;
var
indexingOperators
=
/^
(?:\[\][
?=
]?)
/
;
var
anotherOperators
=
/^
(?:\.(?:\.{2})?
|->|
[
?:
])
/
;
var
idents
=
/^
[
a-z_
\u
009F-
\u
FFFF
][
a-zA-Z0-9_
\u
009F-
\u
FFFF
]
*/
;
var
types
=
/^
[
A-Z_
\u
009F-
\u
FFFF
][
a-zA-Z0-9_
\u
009F-
\u
FFFF
]
*/
;
var
keywords
=
wordRegExp
([
"
abstract
"
,
"
alias
"
,
"
as
"
,
"
asm
"
,
"
begin
"
,
"
break
"
,
"
case
"
,
"
class
"
,
"
def
"
,
"
do
"
,
"
else
"
,
"
elsif
"
,
"
end
"
,
"
ensure
"
,
"
enum
"
,
"
extend
"
,
"
for
"
,
"
fun
"
,
"
if
"
,
"
include
"
,
"
instance_sizeof
"
,
"
lib
"
,
"
macro
"
,
"
module
"
,
"
next
"
,
"
of
"
,
"
out
"
,
"
pointerof
"
,
"
private
"
,
"
protected
"
,
"
rescue
"
,
"
return
"
,
"
require
"
,
"
select
"
,
"
sizeof
"
,
"
struct
"
,
"
super
"
,
"
then
"
,
"
type
"
,
"
typeof
"
,
"
uninitialized
"
,
"
union
"
,
"
unless
"
,
"
until
"
,
"
when
"
,
"
while
"
,
"
with
"
,
"
yield
"
,
"
__DIR__
"
,
"
__END_LINE__
"
,
"
__FILE__
"
,
"
__LINE__
"
]);
var
atomWords
=
wordRegExp
([
"
true
"
,
"
false
"
,
"
nil
"
,
"
self
"
]);
var
indentKeywordsArray
=
[
"
def
"
,
"
fun
"
,
"
macro
"
,
"
class
"
,
"
module
"
,
"
struct
"
,
"
lib
"
,
"
enum
"
,
"
union
"
,
"
do
"
,
"
for
"
];
var
indentKeywords
=
wordRegExp
(
indentKeywordsArray
);
var
indentExpressionKeywordsArray
=
[
"
if
"
,
"
unless
"
,
"
case
"
,
"
while
"
,
"
until
"
,
"
begin
"
,
"
then
"
];
var
indentExpressionKeywords
=
wordRegExp
(
indentExpressionKeywordsArray
);
var
dedentKeywordsArray
=
[
"
end
"
,
"
else
"
,
"
elsif
"
,
"
rescue
"
,
"
ensure
"
];
var
dedentKeywords
=
wordRegExp
(
dedentKeywordsArray
);
var
dedentPunctualsArray
=
[
"
\\
)
"
,
"
\\
}
"
,
"
\\
]
"
];
var
dedentPunctuals
=
new
RegExp
(
"
^(?:
"
+
dedentPunctualsArray
.
join
(
"
|
"
)
+
"
)$
"
);
var
nextTokenizer
=
{
"
def
"
:
tokenFollowIdent
,
"
fun
"
:
tokenFollowIdent
,
"
macro
"
:
tokenMacroDef
,
"
class
"
:
tokenFollowType
,
"
module
"
:
tokenFollowType
,
"
struct
"
:
tokenFollowType
,
"
lib
"
:
tokenFollowType
,
"
enum
"
:
tokenFollowType
,
"
union
"
:
tokenFollowType
};
var
matching
=
{
"
[
"
:
"
]
"
,
"
{
"
:
"
}
"
,
"
(
"
:
"
)
"
,
"
<
"
:
"
>
"
};
function
tokenBase
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
{
return
null
;
}
// Macros
if
(
state
.
lastToken
!=
"
\\
"
&&
stream
.
match
(
"
{%
"
,
false
))
{
return
chain
(
tokenMacro
(
"
%
"
,
"
%
"
),
stream
,
state
);
}
if
(
state
.
lastToken
!=
"
\\
"
&&
stream
.
match
(
"
{{
"
,
false
))
{
return
chain
(
tokenMacro
(
"
{
"
,
"
}
"
),
stream
,
state
);
}
// Comments
if
(
stream
.
peek
()
==
"
#
"
)
{
stream
.
skipToEnd
();
return
"
comment
"
;
}
// Variables and keywords
var
matched
;
if
(
stream
.
match
(
idents
))
{
stream
.
eat
(
/
[
?!
]
/
);
matched
=
stream
.
current
();
if
(
stream
.
eat
(
"
:
"
))
{
return
"
atom
"
;
}
else
if
(
state
.
lastToken
==
"
.
"
)
{
return
"
property
"
;
}
else
if
(
keywords
.
test
(
matched
))
{
if
(
indentKeywords
.
test
(
matched
))
{
if
(
!
(
matched
==
"
fun
"
&&
state
.
blocks
.
indexOf
(
"
lib
"
)
>=
0
)
&&
!
(
matched
==
"
def
"
&&
state
.
lastToken
==
"
abstract
"
))
{
state
.
blocks
.
push
(
matched
);
state
.
currentIndent
+=
1
;
}
}
else
if
((
state
.
lastStyle
==
"
operator
"
||
!
state
.
lastStyle
)
&&
indentExpressionKeywords
.
test
(
matched
))
{
state
.
blocks
.
push
(
matched
);
state
.
currentIndent
+=
1
;
}
else
if
(
matched
==
"
end
"
)
{
state
.
blocks
.
pop
();
state
.
currentIndent
-=
1
;
}
if
(
nextTokenizer
.
hasOwnProperty
(
matched
))
{
state
.
tokenize
.
push
(
nextTokenizer
[
matched
]);
}
return
"
keyword
"
;
}
else
if
(
atomWords
.
test
(
matched
))
{
return
"
atom
"
;
}
return
"
variable
"
;
}
// Class variables and instance variables
// or attributes
if
(
stream
.
eat
(
"
@
"
))
{
if
(
stream
.
peek
()
==
"
[
"
)
{
return
chain
(
tokenNest
(
"
[
"
,
"
]
"
,
"
meta
"
),
stream
,
state
);
}
stream
.
eat
(
"
@
"
);
stream
.
match
(
idents
)
||
stream
.
match
(
types
);
return
"
variable-2
"
;
}
// Constants and types
if
(
stream
.
match
(
types
))
{
return
"
tag
"
;
}
// Symbols or ':' operator
if
(
stream
.
eat
(
"
:
"
))
{
if
(
stream
.
eat
(
"
\"
"
))
{
return
chain
(
tokenQuote
(
"
\"
"
,
"
atom
"
,
false
),
stream
,
state
);
}
else
if
(
stream
.
match
(
idents
)
||
stream
.
match
(
types
)
||
stream
.
match
(
operators
)
||
stream
.
match
(
conditionalOperators
)
||
stream
.
match
(
indexingOperators
))
{
return
"
atom
"
;
}
stream
.
eat
(
"
:
"
);
return
"
operator
"
;
}
// Strings
if
(
stream
.
eat
(
"
\"
"
))
{
return
chain
(
tokenQuote
(
"
\"
"
,
"
string
"
,
true
),
stream
,
state
);
}
// Strings or regexps or macro variables or '%' operator
if
(
stream
.
peek
()
==
"
%
"
)
{
var
style
=
"
string
"
;
var
embed
=
true
;
var
delim
;
if
(
stream
.
match
(
"
%r
"
))
{
// Regexps
style
=
"
string-2
"
;
delim
=
stream
.
next
();
}
else
if
(
stream
.
match
(
"
%w
"
))
{
embed
=
false
;
delim
=
stream
.
next
();
}
else
if
(
stream
.
match
(
"
%q
"
))
{
embed
=
false
;
delim
=
stream
.
next
();
}
else
{
if
(
delim
=
stream
.
match
(
/^%
([^\w\s
=
])
/
))
{
delim
=
delim
[
1
];
}
else
if
(
stream
.
match
(
/^%
[
a-zA-Z0-9_
\u
009F-
\u
FFFF
]
*/
))
{
// Macro variables
return
"
meta
"
;
}
else
{
// '%' operator
return
"
operator
"
;
}
}
if
(
matching
.
hasOwnProperty
(
delim
))
{
delim
=
matching
[
delim
];
}
return
chain
(
tokenQuote
(
delim
,
style
,
embed
),
stream
,
state
);
}
// Here Docs
if
(
matched
=
stream
.
match
(
/^<<-
(
'
?)([
A-Z
]\w
*
)\1
/
))
{
return
chain
(
tokenHereDoc
(
matched
[
2
],
!
matched
[
1
]),
stream
,
state
)
}
// Characters
if
(
stream
.
eat
(
"
'
"
))
{
stream
.
match
(
/^
(?:[^
'
]
|
\\(?:[
befnrtv0'"
]
|
[
0-7
]{3}
|u
(?:[
0-9a-fA-F
]{4}
|
\{[
0-9a-fA-F
]{1,6}\})))
/
);
stream
.
eat
(
"
'
"
);
return
"
atom
"
;
}
// Numbers
if
(
stream
.
eat
(
"
0
"
))
{
if
(
stream
.
eat
(
"
x
"
))
{
stream
.
match
(
/^
[
0-9a-fA-F
]
+/
);
}
else
if
(
stream
.
eat
(
"
o
"
))
{
stream
.
match
(
/^
[
0-7
]
+/
);
}
else
if
(
stream
.
eat
(
"
b
"
))
{
stream
.
match
(
/^
[
01
]
+/
);
}
return
"
number
"
;
}
if
(
stream
.
eat
(
/^
\d
/
))
{
stream
.
match
(
/^
\d
*
(?:\.\d
+
)?(?:[
eE
][
+-
]?\d
+
)?
/
);
return
"
number
"
;
}
// Operators
if
(
stream
.
match
(
operators
))
{
stream
.
eat
(
"
=
"
);
// Operators can follow assign symbol.
return
"
operator
"
;
}
if
(
stream
.
match
(
conditionalOperators
)
||
stream
.
match
(
anotherOperators
))
{
return
"
operator
"
;
}
// Parens and braces
if
(
matched
=
stream
.
match
(
/
[
({[
]
/
,
false
))
{
matched
=
matched
[
0
];
return
chain
(
tokenNest
(
matched
,
matching
[
matched
],
null
),
stream
,
state
);
}
// Escapes
if
(
stream
.
eat
(
"
\\
"
))
{
stream
.
next
();
return
"
meta
"
;
}
stream
.
next
();
return
null
;
}
function
tokenNest
(
begin
,
end
,
style
,
started
)
{
return
function
(
stream
,
state
)
{
if
(
!
started
&&
stream
.
match
(
begin
))
{
state
.
tokenize
[
state
.
tokenize
.
length
-
1
]
=
tokenNest
(
begin
,
end
,
style
,
true
);
state
.
currentIndent
+=
1
;
return
style
;
}
var
nextStyle
=
tokenBase
(
stream
,
state
);
if
(
stream
.
current
()
===
end
)
{
state
.
tokenize
.
pop
();
state
.
currentIndent
-=
1
;
nextStyle
=
style
;
}
return
nextStyle
;
};
}
function
tokenMacro
(
begin
,
end
,
started
)
{
return
function
(
stream
,
state
)
{
if
(
!
started
&&
stream
.
match
(
"
{
"
+
begin
))
{
state
.
currentIndent
+=
1
;
state
.
tokenize
[
state
.
tokenize
.
length
-
1
]
=
tokenMacro
(
begin
,
end
,
true
);
return
"
meta
"
;
}
if
(
stream
.
match
(
end
+
"
}
"
))
{
state
.
currentIndent
-=
1
;
state
.
tokenize
.
pop
();
return
"
meta
"
;
}
return
tokenBase
(
stream
,
state
);
};
}
function
tokenMacroDef
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
{
return
null
;
}
var
matched
;
if
(
matched
=
stream
.
match
(
idents
))
{
if
(
matched
==
"
def
"
)
{
return
"
keyword
"
;
}
stream
.
eat
(
/
[
?!
]
/
);
}
state
.
tokenize
.
pop
();
return
"
def
"
;
}
function
tokenFollowIdent
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
{
return
null
;
}
if
(
stream
.
match
(
idents
))
{
stream
.
eat
(
/
[
!?
]
/
);
}
else
{
stream
.
match
(
operators
)
||
stream
.
match
(
conditionalOperators
)
||
stream
.
match
(
indexingOperators
);
}
state
.
tokenize
.
pop
();
return
"
def
"
;
}
function
tokenFollowType
(
stream
,
state
)
{
if
(
stream
.
eatSpace
())
{
return
null
;
}
stream
.
match
(
types
);
state
.
tokenize
.
pop
();
return
"
def
"
;
}
function
tokenQuote
(
end
,
style
,
embed
)
{
return
function
(
stream
,
state
)
{
var
escaped
=
false
;
while
(
stream
.
peek
())
{
if
(
!
escaped
)
{
if
(
stream
.
match
(
"
{%
"
,
false
))
{
state
.
tokenize
.
push
(
tokenMacro
(
"
%
"
,
"
%
"
));
return
style
;
}
if
(
stream
.
match
(
"
{{
"
,
false
))
{
state
.
tokenize
.
push
(
tokenMacro
(
"
{
"
,
"
}
"
));
return
style
;
}
if
(
embed
&&
stream
.
match
(
"
#{
"
,
false
))
{
state
.
tokenize
.
push
(
tokenNest
(
"
#{
"
,
"
}
"
,
"
meta
"
));
return
style
;
}
var
ch
=
stream
.
next
();
if
(
ch
==
end
)
{
state
.
tokenize
.
pop
();
return
style
;
}
escaped
=
embed
&&
ch
==
"
\\
"
;
}
else
{
stream
.
next
();
escaped
=
false
;
}
}
return
style
;
};
}
function
tokenHereDoc
(
phrase
,
embed
)
{
return
function
(
stream
,
state
)
{
if
(
stream
.
sol
())
{
stream
.
eatSpace
()
if
(
stream
.
match
(
phrase
))
{
state
.
tokenize
.
pop
();
return
"
string
"
;
}
}
var
escaped
=
false
;
while
(
stream
.
peek
())
{
if
(
!
escaped
)
{
if
(
stream
.
match
(
"
{%
"
,
false
))
{
state
.
tokenize
.
push
(
tokenMacro
(
"
%
"
,
"
%
"
));
return
"
string
"
;
}
if
(
stream
.
match
(
"
{{
"
,
false
))
{
state
.
tokenize
.
push
(
tokenMacro
(
"
{
"
,
"
}
"
));
return
"
string
"
;
}
if
(
embed
&&
stream
.
match
(
"
#{
"
,
false
))
{
state
.
tokenize
.
push
(
tokenNest
(
"
#{
"
,
"
}
"
,
"
meta
"
));
return
"
string
"
;
}
escaped
=
embed
&&
stream
.
next
()
==
"
\\
"
;
}
else
{
stream
.
next
();
escaped
=
false
;
}
}
return
"
string
"
;
}
}
return
{
startState
:
function
()
{
return
{
tokenize
:
[
tokenBase
],
currentIndent
:
0
,
lastToken
:
null
,
lastStyle
:
null
,
blocks
:
[]
};
},
token
:
function
(
stream
,
state
)
{
var
style
=
state
.
tokenize
[
state
.
tokenize
.
length
-
1
](
stream
,
state
);
var
token
=
stream
.
current
();
if
(
style
&&
style
!=
"
comment
"
)
{
state
.
lastToken
=
token
;
state
.
lastStyle
=
style
;
}
return
style
;
},
indent
:
function
(
state
,
textAfter
)
{
textAfter
=
textAfter
.
replace
(
/^
\s
*
(?:\{
%
)?\s
*|
\s
*
(?:
%
\})?\s
*$/g
,
""
);
if
(
dedentKeywords
.
test
(
textAfter
)
||
dedentPunctuals
.
test
(
textAfter
))
{
return
config
.
indentUnit
*
(
state
.
currentIndent
-
1
);
}
return
config
.
indentUnit
*
state
.
currentIndent
;
},
fold
:
"
indent
"
,
electricInput
:
wordRegExp
(
dedentPunctualsArray
.
concat
(
dedentKeywordsArray
),
true
),
lineComment
:
'
#
'
};
});
CodeMirror
.
defineMIME
(
"
text/x-crystal
"
,
"
crystal
"
);
});
src/main/webapp/static/plugins/codemirror/5.48.4/mode/crystal/index.html
0 → 100644
View file @
53f587bc
<!doctype html>
<title>
CodeMirror: Crystal mode
</title>
<meta
charset=
"utf-8"
/>
<link
rel=
stylesheet
href=
"../../doc/docs.css"
>
<link
rel=
"stylesheet"
href=
"../../lib/codemirror.css"
>
<script
src=
"../../lib/codemirror.js"
></script>
<script
src=
"../../addon/edit/matchbrackets.js"
></script>
<script
src=
"crystal.js"
></script>
<style>
.CodeMirror
{
border-top
:
1px
solid
black
;
border-bottom
:
1px
solid
black
;}
.cm-s-default
span
.cm-arrow
{
color
:
red
;
}
</style>
<div
id=
nav
>
<a
href=
"https://codemirror.net"
><h1>
CodeMirror
</h1><img
id=
logo
src=
"../../doc/logo.png"
></a>
<ul>
<li><a
href=
"../../index.html"
>
Home
</a>
<li><a
href=
"../../doc/manual.html"
>
Manual
</a>
<li><a
href=
"https://github.com/codemirror/codemirror"
>
Code
</a>
</ul>
<ul>
<li><a
href=
"../index.html"
>
Language modes
</a>
<li><a
class=
active
href=
"#"
>
Crystal
</a>
</ul>
</div>
<article>
<h2>
Crystal mode
</h2>
<form><textarea
id=
"code"
name=
"code"
>
# Features of Crystal
# - Ruby-inspired syntax.
# - Statically type-checked but without having to specify the type of variables or method arguments.
# - Be able to call C code by writing bindings to it in Crystal.
# - Have compile-time evaluation and generation of code, to avoid boilerplate code.
# - Compile to efficient native code.
# A very basic HTTP server
require "http/server"
server = HTTP::Server.new(8080) do |request|
HTTP::Response.ok "text/plain", "Hello world, got #{request.path}!"
end
puts "Listening on http://0.0.0.0:8080"
server.listen
module Foo
abstract def abstract_method : String
@[AlwaysInline]
def with_foofoo
with Foo.new(self) yield
end
struct Foo
def initialize(@foo : ::Foo)
end
def hello_world
@foo.abstract_method
end
end
end
class Bar
include Foo
@@foobar = 12345
def initialize(@bar : Int32)
end
macro alias_method(name, method)
def {{ name }}(*args)
{{ method }}(*args)
end
end
def a_method
"Hello, World"
end
alias_method abstract_method, a_method
def show_instance_vars : Nil
{% for var in @type.instance_vars %}
puts "@{{ var }} = #{ @{{ var }} }"
{% end %}
end
end
class Baz
<
Bar; end
lib LibC
fun c_puts = "puts"(str : Char*) : Int
end
baz = Baz.new(100)
baz.show_instance_vars
baz.with_foofoo do
LibC.c_puts hello_world
end
</textarea></form>
<script>
var
editor
=
CodeMirror
.
fromTextArea
(
document
.
getElementById
(
"
code
"
),
{
mode
:
"
text/x-crystal
"
,
matchBrackets
:
true
,
indentUnit
:
2
});
</script>
<p><strong>
MIME types defined:
</strong>
<code>
text/x-crystal
</code>
.
</p>
</article>
Prev
1
2
3
4
5
6
7
8
9
…
14
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment