Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1170254
clike.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Sep 27, 12:44 AM
Size
11 KB
Mime Type
text/plain
Expires
Mon, Sep 29, 12:44 AM (1 d, 14 h)
Engine
blob
Format
Raw Data
Handle
758273
Attached To
rINP In-Portal
clike.js
View Options
CodeMirror
.
defineMode
(
"clike"
,
function
(
config
,
parserConfig
)
{
var
indentUnit
=
config
.
indentUnit
,
statementIndentUnit
=
parserConfig
.
statementIndentUnit
||
indentUnit
,
dontAlignCalls
=
parserConfig
.
dontAlignCalls
,
keywords
=
parserConfig
.
keywords
||
{},
builtin
=
parserConfig
.
builtin
||
{},
blockKeywords
=
parserConfig
.
blockKeywords
||
{},
atoms
=
parserConfig
.
atoms
||
{},
hooks
=
parserConfig
.
hooks
||
{},
multiLineStrings
=
parserConfig
.
multiLineStrings
;
var
isOperatorChar
=
/[+\-*&%=<>!?|\/]/
;
var
curPunc
;
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
(
/[\[\]{}\(\),;\:\.]/
.
test
(
ch
))
{
curPunc
=
ch
;
return
null
;
}
if
(
/\d/
.
test
(
ch
))
{
stream
.
eatWhile
(
/[\w\.]/
);
return
"number"
;
}
if
(
ch
==
"/"
)
{
if
(
stream
.
eat
(
"*"
))
{
state
.
tokenize
=
tokenComment
;
return
tokenComment
(
stream
,
state
);
}
if
(
stream
.
eat
(
"/"
))
{
stream
.
skipToEnd
();
return
"comment"
;
}
}
if
(
isOperatorChar
.
test
(
ch
))
{
stream
.
eatWhile
(
isOperatorChar
);
return
"operator"
;
}
stream
.
eatWhile
(
/[\w\$_]/
);
var
cur
=
stream
.
current
();
if
(
keywords
.
propertyIsEnumerable
(
cur
))
{
if
(
blockKeywords
.
propertyIsEnumerable
(
cur
))
curPunc
=
"newstatement"
;
return
"keyword"
;
}
if
(
builtin
.
propertyIsEnumerable
(
cur
))
{
if
(
blockKeywords
.
propertyIsEnumerable
(
cur
))
curPunc
=
"newstatement"
;
return
"builtin"
;
}
if
(
atoms
.
propertyIsEnumerable
(
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
Context
(
indented
,
column
,
type
,
align
,
prev
)
{
this
.
indented
=
indented
;
this
.
column
=
column
;
this
.
type
=
type
;
this
.
align
=
align
;
this
.
prev
=
prev
;
}
function
pushContext
(
state
,
col
,
type
)
{
var
indent
=
state
.
indented
;
if
(
state
.
context
&&
state
.
context
.
type
==
"statement"
)
indent
=
state
.
context
.
indented
;
return
state
.
context
=
new
Context
(
indent
,
col
,
type
,
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
;
}
// Interface
return
{
startState
:
function
(
basecolumn
)
{
return
{
tokenize
:
null
,
context
:
new
Context
((
basecolumn
||
0
)
-
indentUnit
,
0
,
"top"
,
false
),
indented
:
0
,
startOfLine
:
true
};
},
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
())
return
null
;
curPunc
=
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
==
","
)
&&
ctx
.
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
(((
ctx
.
type
==
"}"
||
ctx
.
type
==
"top"
)
&&
curPunc
!=
';'
)
||
(
ctx
.
type
==
"statement"
&&
curPunc
==
"newstatement"
))
pushContext
(
state
,
stream
.
column
(),
"statement"
);
state
.
startOfLine
=
false
;
return
style
;
},
indent
:
function
(
state
,
textAfter
)
{
if
(
state
.
tokenize
!=
tokenBase
&&
state
.
tokenize
!=
null
)
return
CodeMirror
.
Pass
;
var
ctx
=
state
.
context
,
firstChar
=
textAfter
&&
textAfter
.
charAt
(
0
);
if
(
ctx
.
type
==
"statement"
&&
firstChar
==
"}"
)
ctx
=
ctx
.
prev
;
var
closing
=
firstChar
==
ctx
.
type
;
if
(
ctx
.
type
==
"statement"
)
return
ctx
.
indented
+
(
firstChar
==
"{"
?
0
:
statementIndentUnit
);
else
if
(
dontAlignCalls
&&
ctx
.
type
==
")"
&&
!
closing
)
return
ctx
.
indented
+
statementIndentUnit
;
else
if
(
ctx
.
align
)
return
ctx
.
column
+
(
closing
?
0
:
1
);
else
return
ctx
.
indented
+
(
closing
?
0
:
indentUnit
);
},
electricChars
:
"{}"
};
});
(
function
()
{
function
words
(
str
)
{
var
obj
=
{},
words
=
str
.
split
(
" "
);
for
(
var
i
=
0
;
i
<
words
.
length
;
++
i
)
obj
[
words
[
i
]]
=
true
;
return
obj
;
}
var
cKeywords
=
"auto if break int case long char register continue return default short do sizeof "
+
"double static else struct entry switch extern typedef float union for unsigned "
+
"goto while enum void const signed volatile"
;
function
cppHook
(
stream
,
state
)
{
if
(
!
state
.
startOfLine
)
return
false
;
for
(;;)
{
if
(
stream
.
skipTo
(
"\\"
))
{
stream
.
next
();
if
(
stream
.
eol
())
{
state
.
tokenize
=
cppHook
;
break
;
}
}
else
{
stream
.
skipToEnd
();
state
.
tokenize
=
null
;
break
;
}
}
return
"meta"
;
}
// 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"
;
}
function
mimes
(
ms
,
mode
)
{
for
(
var
i
=
0
;
i
<
ms
.
length
;
++
i
)
CodeMirror
.
defineMIME
(
ms
[
i
],
mode
);
}
mimes
([
"text/x-csrc"
,
"text/x-c"
,
"text/x-chdr"
],
{
name
:
"clike"
,
keywords
:
words
(
cKeywords
),
blockKeywords
:
words
(
"case do else for if switch while struct"
),
atoms
:
words
(
"null"
),
hooks
:
{
"#"
:
cppHook
}
});
mimes
([
"text/x-c++src"
,
"text/x-c++hdr"
],
{
name
:
"clike"
,
keywords
:
words
(
cKeywords
+
" asm dynamic_cast namespace reinterpret_cast try bool explicit new "
+
"static_cast typeid catch operator template typename class friend private "
+
"this using const_cast inline public throw virtual delete mutable protected "
+
"wchar_t"
),
blockKeywords
:
words
(
"catch class do else finally for if struct switch try while"
),
atoms
:
words
(
"true false null"
),
hooks
:
{
"#"
:
cppHook
}
});
CodeMirror
.
defineMIME
(
"text/x-java"
,
{
name
:
"clike"
,
keywords
:
words
(
"abstract assert boolean break byte case catch char class const continue default "
+
"do double else enum extends final finally float for goto if implements import "
+
"instanceof int interface long native new package private protected public "
+
"return short static strictfp super switch synchronized this throw throws transient "
+
"try void volatile while"
),
blockKeywords
:
words
(
"catch class do else finally for if switch try while"
),
atoms
:
words
(
"true false null"
),
hooks
:
{
"@"
:
function
(
stream
)
{
stream
.
eatWhile
(
/[\w\$_]/
);
return
"meta"
;
}
}
});
CodeMirror
.
defineMIME
(
"text/x-csharp"
,
{
name
:
"clike"
,
keywords
:
words
(
"abstract as 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"
),
blockKeywords
:
words
(
"catch class do else finally for foreach if struct switch try while"
),
builtin
:
words
(
"Boolean Byte Char DateTime DateTimeOffset Decimal Double"
+
" Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32"
+
" UInt64 bool byte char decimal double short int long object"
+
" sbyte float string ushort uint ulong"
),
atoms
:
words
(
"true false null"
),
hooks
:
{
"@"
:
function
(
stream
,
state
)
{
if
(
stream
.
eat
(
'"'
))
{
state
.
tokenize
=
tokenAtString
;
return
tokenAtString
(
stream
,
state
);
}
stream
.
eatWhile
(
/[\w\$_]/
);
return
"meta"
;
}
}
});
CodeMirror
.
defineMIME
(
"text/x-scala"
,
{
name
:
"clike"
,
keywords
:
words
(
/* scala */
"abstract case catch class def do else extends false final finally for forSome if "
+
"implicit import lazy match new null object override package private protected return "
+
"sealed super this throw trait try trye type val var while with yield _ : = => <- <: "
+
"<% >: # @ "
+
/* package scala */
"assert assume require print println printf readLine readBoolean readByte readShort "
+
"readChar readInt readLong readFloat readDouble "
+
"AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either "
+
"Enumeration Equiv Error Exception Fractional Function IndexedSeq 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"
),
blockKeywords
:
words
(
"catch class do else finally for forSome if match switch try while"
),
atoms
:
words
(
"true false null"
),
hooks
:
{
"@"
:
function
(
stream
)
{
stream
.
eatWhile
(
/[\w\$_]/
);
return
"meta"
;
}
}
});
}());
Event Timeline
Log In to Comment