diff --git a/components.js b/components.js index f05c6088d2..33a326eea9 100644 --- a/components.js +++ b/components.js @@ -309,6 +309,10 @@ var components = { "title": "Python", "owner": "multipetros" }, + "q": { + "title": "Q", + "owner": "Golmote" + }, "qore": { "title": "Qore", "require": ["clike"], diff --git a/components/prism-q.js b/components/prism-q.js new file mode 100644 index 0000000000..6341c0337f --- /dev/null +++ b/components/prism-q.js @@ -0,0 +1,44 @@ +Prism.languages.q = { + 'string': /"(?:\\.|[^"\\\r\n])*"/, + 'comment': [ + // From http://code.kx.com/wiki/Reference/Slash: + // When / is following a space (or a right parenthesis, bracket, or brace), it is ignored with the rest of the line. + { + + pattern: /([\t )\]}])\/.*/, + lookbehind: true + }, + // From http://code.kx.com/wiki/Reference/Slash: + // A line which has / as its first character and contains at least one other non-whitespace character is a whole-line comment and is ignored entirely. + // A / on a line by itself begins a multiline comment which is terminated by the next \ on a line by itself. + // If a / is not matched by a \, the multiline comment is unterminated and continues to end of file. + // The / and \ must be the first char on the line, but may be followed by any amount of whitespace. + { + pattern: /(^|\r?\n|\r)\/[\t ]*(?:(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?(?:\\(?=[\t ]*(?:\r?\n|\r))|$)|\S.*)/, + lookbehind: true + }, + // From http://code.kx.com/wiki/Reference/Slash: + // A \ on a line by itself with no preceding matching / will comment to end of file. + /^\\[\t ]*(?:\r?\n|\r)[\s\S]+/m, + + /^#!.+/m + ], + 'symbol': /`(?::\S+|[\w.]*)/, + 'datetime': { + pattern: /0N[mdzuvt]|0W[dtz]|\d{4}\.\d\d(?:m|\.\d\d(?:T(?:\d\d(?::\d\d(?::\d\d(?:[.:]\d\d\d)?)?)?)?)?[dz]?)|\d\d:\d\d(?::\d\d(?:[.:]\d\d\d)?)?[uvt]?/, + alias: 'number' + }, + // The negative look-ahead prevents bad highlighting + // of verbs 0: and 1: + 'number': /\b-?(?![01]:)(?:0[wn]|0W[hj]?|0N[hje]?|0x[\da-fA-F]+|\d+\.?\d*(?:e[+-]?\d+)?[hjfeb]?)/, + 'keyword': /\\\w+\b|\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\b/, + 'adverb': { + pattern: /['\/\\]:?|\beach\b/, + alias: 'function' + }, + 'verb': { + pattern: /(?:\B\.\B|\b[01]:|<[=>]?|>=?|[:+\-*%,!?_~=|$@^]):?/, + alias: 'operator' + }, + 'punctuation': /[(){}\[\];.]/ +}; \ No newline at end of file diff --git a/components/prism-q.min.js b/components/prism-q.min.js new file mode 100644 index 0000000000..92df717918 --- /dev/null +++ b/components/prism-q.min.js @@ -0,0 +1 @@ +Prism.languages.q={string:/"(?:\\.|[^"\\\r\n])*"/,comment:[{pattern:/([\t )\]}])\/.*/,lookbehind:!0},{pattern:/(^|\r?\n|\r)\/[\t ]*(?:(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?(?:\\(?=[\t ]*(?:\r?\n|\r))|$)|\S.*)/,lookbehind:!0},/^\\[\t ]*(?:\r?\n|\r)[\s\S]+/m,/^#!.+/m],symbol:/`(?::\S+|[\w.]*)/,datetime:{pattern:/0N[mdzuvt]|0W[dtz]|\d{4}\.\d\d(?:m|\.\d\d(?:T(?:\d\d(?::\d\d(?::\d\d(?:[.:]\d\d\d)?)?)?)?)?[dz]?)|\d\d:\d\d(?::\d\d(?:[.:]\d\d\d)?)?[uvt]?/,alias:"number"},number:/\b-?(?![01]:)(?:0[wn]|0W[hj]?|0N[hje]?|0x[\da-fA-F]+|\d+\.?\d*(?:e[+-]?\d+)?[hjfeb]?)/,keyword:/\\\w+\b|\b(?:abs|acos|aj0?|all|and|any|asc|asin|asof|atan|attr|avgs?|binr?|by|ceiling|cols|cor|cos|count|cov|cross|csv|cut|delete|deltas|desc|dev|differ|distinct|div|do|dsave|ej|enlist|eval|except|exec|exit|exp|fby|fills|first|fkeys|flip|floor|from|get|getenv|group|gtime|hclose|hcount|hdel|hopen|hsym|iasc|identity|idesc|if|ij|in|insert|inter|inv|keys?|last|like|list|ljf?|load|log|lower|lsq|ltime|ltrim|mavg|maxs?|mcount|md5|mdev|med|meta|mins?|mmax|mmin|mmu|mod|msum|neg|next|not|null|or|over|parse|peach|pj|plist|prds?|prev|prior|rand|rank|ratios|raze|read0|read1|reciprocal|reval|reverse|rload|rotate|rsave|rtrim|save|scan|scov|sdev|select|set|setenv|show|signum|sin|sqrt|ssr?|string|sublist|sums?|sv|svar|system|tables|tan|til|trim|txf|type|uj|ungroup|union|update|upper|upsert|value|var|views?|vs|wavg|where|while|within|wj1?|wsum|ww|xasc|xbar|xcols?|xdesc|xexp|xgroup|xkey|xlog|xprev|xrank)\b/,adverb:{pattern:/['\/\\]:?|\beach\b/,alias:"function"},verb:{pattern:/(?:\B\.\B|\b[01]:|<[=>]?|>=?|[:+\-*%,!?_~=|$@^]):?/,alias:"operator"},punctuation:/[(){}\[\];.]/}; \ No newline at end of file diff --git a/examples/prism-q.html b/examples/prism-q.html new file mode 100644 index 0000000000..a22d557c96 --- /dev/null +++ b/examples/prism-q.html @@ -0,0 +1,118 @@ +
To use this language, use the class "language-q".
+ +foo / This is a comment
+/ This is a comment too
+
+/
+Some multi-line
+comment here
+\
+
+\
+This comment will
+continue until the
+end of code
+
+"q"
+"\""
+"\\"
+"\142"
+"foo bar baz"
+
+`
+`q
+`zaphod
+`:198.162.0.2:5042
+`:www.yourco.com:5042
+`.new
+
+42
+b:-123h
+c:1234567890j
+pi:3.14159265
+float1:1f
+r:1.4142e
+2.0
+4.00e
+f:1.23456789e-10
+r:1.2345678e-10e
+bit:0b
+byte:0x2a
+a:42
+bit:1b
+
+0w 0n 0W 0Wh 0Wj
+
+d:2006.07.04
+t:09:04:59.000
+dt:2006.07.04T09:04:59.000
+mon:2006.07m
+mm:09:04
+sec:09:04:59
+d:2006.07.04
+
+0Nm 0Nd 0Nz 0Nu 0Nv 0Wd 0Wt 0Wz
+
+99+L
+x<42|x>98
+(x<42)|x>98
+42~(4 2;(1 0))
+(4 2)~(4; 2*1)
+
+" ," ,/: ("Now";"is";"the";"time")
+L1,/:\:L2
+0+/10 20 30
+(1#) each 1001 1002 1004 1003
+
+string 42
+L1 cross L2
+type c
+select from t where price=(max;price) fby ([]sym;ex)
+ungroup `p xgroup sp
+`instrument insert (`g; `$"Google"; `$"Internet")
+
+/ Example from http://code.kx.com/wiki/Cookbook/CorporateActions
+getCAs:{[caTypes]
+ / handles multiplie corporate actions on one date
+ t:0!select factor:prd factor by date-1,sym from ca where caType in caTypes;
+ t,:update date:1901.01.01,factor:1.0 from ([]sym:distinct t`sym);
+ t:`date xasc t;
+ t:update factor:reverse prds reverse 1 rotate factor by sym from t;
+ :update `g#sym from 0!t;
+ };
+
+adjust:{[t;caTypes]
+ t:0!t;
+ factors:enlist 1.0^aj[`sym`date;([] date:t`date;sym:t`sym);getCAs caTypes]`factor;
+ mc:c where (lower c:cols t) like "*price"; / find columns to multiply
+ dc:c where lower[c] like "*size"; / find columns to divide
+ :![t;();0b;(mc,dc)!((*),/:mc,\:factors),((%),/:dc,\:factors)]; / multiply or divide out the columns
+ };
+
+/ get the adjustment factors considering all corporate actions
+getCAs exec distinct caType from ca
+
+adjust[t;`dividend] / adjust trades for dividends only
+
+There are certain edge cases where Prism will fail. + There are always such cases in every regex-based syntax highlighter. + However, Prism dares to be open and honest about them. + If a failure is listed here, it doesn’t mean it will never be fixed. This is more of a “known bugs” list, just with a certain type of bug. +
+ +/ This "comment" is broken
+
+\d .
\ No newline at end of file
diff --git a/tests/languages/q/adverb_feature.test b/tests/languages/q/adverb_feature.test
new file mode 100644
index 0000000000..a3fc6e318d
--- /dev/null
+++ b/tests/languages/q/adverb_feature.test
@@ -0,0 +1,17 @@
+' ':
++/ +/:
+\ \:
+each
+
+----------------------------------------------------
+
+[
+ ["adverb", "'"], ["adverb", "':"],
+ ["verb", "+"], ["adverb", "/"], ["verb", "+"], ["adverb", "/:"],
+ ["adverb", "\\"], ["adverb", "\\:"],
+ ["adverb", "each"]
+]
+
+----------------------------------------------------
+
+Checks for adverbs.
\ No newline at end of file
diff --git a/tests/languages/q/comment_feature.test b/tests/languages/q/comment_feature.test
new file mode 100644
index 0000000000..2f260e4e65
--- /dev/null
+++ b/tests/languages/q/comment_feature.test
@@ -0,0 +1,24 @@
+#!/usr/bin/env q
+/ Foobar
+
+/
+Foo
+bar
+\
+
+\
+Foo
+Bar
+
+----------------------------------------------------
+
+[
+ ["comment", "#!/usr/bin/env q"],
+ ["comment", "/ Foobar"],
+ ["comment", "/\r\nFoo\r\nbar\r\n\\"],
+ ["comment", "\\\r\nFoo\r\nBar"]
+]
+
+----------------------------------------------------
+
+Checks for comments.
\ No newline at end of file
diff --git a/tests/languages/q/datetime_feature.test b/tests/languages/q/datetime_feature.test
new file mode 100644
index 0000000000..92fe28c53f
--- /dev/null
+++ b/tests/languages/q/datetime_feature.test
@@ -0,0 +1,39 @@
+0Nm 0Nd 0Nz 0Nu 0Nv 0Nt
+0Wd 0Wt 0Wz
+
+2015.09m
+2015.09.08
+2015.09.08d
+2015.09.08z
+2015.09.08T08:25:32
+2015.09.08T08:25:32.000
+08:25
+08:25u
+08:25v
+08:25t
+08:25:32
+08:25:32:000
+
+----------------------------------------------------
+
+[
+ ["datetime", "0Nm"], ["datetime", "0Nd"], ["datetime", "0Nz"], ["datetime", "0Nu"], ["datetime", "0Nv"], ["datetime", "0Nt"],
+ ["datetime", "0Wd"], ["datetime", "0Wt"], ["datetime", "0Wz"],
+
+ ["datetime", "2015.09m"],
+ ["datetime", "2015.09.08"],
+ ["datetime", "2015.09.08d"],
+ ["datetime", "2015.09.08z"],
+ ["datetime", "2015.09.08T08:25:32"],
+ ["datetime", "2015.09.08T08:25:32.000"],
+ ["datetime", "08:25"],
+ ["datetime", "08:25u"],
+ ["datetime", "08:25v"],
+ ["datetime", "08:25t"],
+ ["datetime", "08:25:32"],
+ ["datetime", "08:25:32:000"]
+]
+
+----------------------------------------------------
+
+Checks for dates, times and datetimes.
\ No newline at end of file
diff --git a/tests/languages/q/keyword_feature.test b/tests/languages/q/keyword_feature.test
new file mode 100644
index 0000000000..4851408e91
--- /dev/null
+++ b/tests/languages/q/keyword_feature.test
@@ -0,0 +1,371 @@
+\foo
+\foo_bar_42
+
+abs
+acos
+aj
+aj0
+all
+and
+any
+asc
+asin
+asof
+atan
+attr
+avg
+avgs
+bin
+binr
+by
+ceiling
+cols
+cor
+cos
+count
+cov
+cross
+csv
+cut
+delete
+deltas
+desc
+dev
+differ
+distinct
+div
+do
+dsave
+ej
+enlist
+eval
+except
+exec
+exit
+exp
+fby
+fills
+first
+fkeys
+flip
+floor
+from
+get
+getenv
+group
+gtime
+hclose
+hcount
+hdel
+hopen
+hsym
+iasc
+identity
+idesc
+if
+ij
+in
+insert
+inter
+inv
+key
+keys
+last
+like
+list
+lj
+ljf
+load
+log
+lower
+lsq
+ltime
+ltrim
+mavg
+max
+maxs
+mcount
+md5
+mdev
+med
+meta
+min
+mins
+mmax
+mmin
+mmu
+mod
+msum
+neg
+next
+not
+null
+or
+over
+parse
+peach
+pj
+plist
+prd
+prds
+prev
+prior
+rand
+rank
+ratios
+raze
+read0
+read1
+reciprocal
+reval
+reverse
+rload
+rotate
+rsave
+rtrim
+save
+scan
+scov
+sdev
+select
+set
+setenv
+show
+signum
+sin
+sqrt
+ss
+ssr
+string
+sublist
+sum
+sums
+sv
+svar
+system
+tables
+tan
+til
+trim
+txf
+type
+uj
+ungroup
+union
+update
+upper
+upsert
+value
+var
+view
+views
+vs
+wavg
+where
+while
+within
+wj
+wj1
+wsum
+ww
+xasc
+xbar
+xcol
+xcols
+xdesc
+xexp
+xgroup
+xkey
+xlog
+xprev
+xrank
+
+----------------------------------------------------
+
+[
+ ["keyword", "\\foo"],
+ ["keyword", "\\foo_bar_42"],
+
+ ["keyword", "abs"],
+ ["keyword", "acos"],
+ ["keyword", "aj"],
+ ["keyword", "aj0"],
+ ["keyword", "all"],
+ ["keyword", "and"],
+ ["keyword", "any"],
+ ["keyword", "asc"],
+ ["keyword", "asin"],
+ ["keyword", "asof"],
+ ["keyword", "atan"],
+ ["keyword", "attr"],
+ ["keyword", "avg"],
+ ["keyword", "avgs"],
+ ["keyword", "bin"],
+ ["keyword", "binr"],
+ ["keyword", "by"],
+ ["keyword", "ceiling"],
+ ["keyword", "cols"],
+ ["keyword", "cor"],
+ ["keyword", "cos"],
+ ["keyword", "count"],
+ ["keyword", "cov"],
+ ["keyword", "cross"],
+ ["keyword", "csv"],
+ ["keyword", "cut"],
+ ["keyword", "delete"],
+ ["keyword", "deltas"],
+ ["keyword", "desc"],
+ ["keyword", "dev"],
+ ["keyword", "differ"],
+ ["keyword", "distinct"],
+ ["keyword", "div"],
+ ["keyword", "do"],
+ ["keyword", "dsave"],
+ ["keyword", "ej"],
+ ["keyword", "enlist"],
+ ["keyword", "eval"],
+ ["keyword", "except"],
+ ["keyword", "exec"],
+ ["keyword", "exit"],
+ ["keyword", "exp"],
+ ["keyword", "fby"],
+ ["keyword", "fills"],
+ ["keyword", "first"],
+ ["keyword", "fkeys"],
+ ["keyword", "flip"],
+ ["keyword", "floor"],
+ ["keyword", "from"],
+ ["keyword", "get"],
+ ["keyword", "getenv"],
+ ["keyword", "group"],
+ ["keyword", "gtime"],
+ ["keyword", "hclose"],
+ ["keyword", "hcount"],
+ ["keyword", "hdel"],
+ ["keyword", "hopen"],
+ ["keyword", "hsym"],
+ ["keyword", "iasc"],
+ ["keyword", "identity"],
+ ["keyword", "idesc"],
+ ["keyword", "if"],
+ ["keyword", "ij"],
+ ["keyword", "in"],
+ ["keyword", "insert"],
+ ["keyword", "inter"],
+ ["keyword", "inv"],
+ ["keyword", "key"],
+ ["keyword", "keys"],
+ ["keyword", "last"],
+ ["keyword", "like"],
+ ["keyword", "list"],
+ ["keyword", "lj"],
+ ["keyword", "ljf"],
+ ["keyword", "load"],
+ ["keyword", "log"],
+ ["keyword", "lower"],
+ ["keyword", "lsq"],
+ ["keyword", "ltime"],
+ ["keyword", "ltrim"],
+ ["keyword", "mavg"],
+ ["keyword", "max"],
+ ["keyword", "maxs"],
+ ["keyword", "mcount"],
+ ["keyword", "md5"],
+ ["keyword", "mdev"],
+ ["keyword", "med"],
+ ["keyword", "meta"],
+ ["keyword", "min"],
+ ["keyword", "mins"],
+ ["keyword", "mmax"],
+ ["keyword", "mmin"],
+ ["keyword", "mmu"],
+ ["keyword", "mod"],
+ ["keyword", "msum"],
+ ["keyword", "neg"],
+ ["keyword", "next"],
+ ["keyword", "not"],
+ ["keyword", "null"],
+ ["keyword", "or"],
+ ["keyword", "over"],
+ ["keyword", "parse"],
+ ["keyword", "peach"],
+ ["keyword", "pj"],
+ ["keyword", "plist"],
+ ["keyword", "prd"],
+ ["keyword", "prds"],
+ ["keyword", "prev"],
+ ["keyword", "prior"],
+ ["keyword", "rand"],
+ ["keyword", "rank"],
+ ["keyword", "ratios"],
+ ["keyword", "raze"],
+ ["keyword", "read0"],
+ ["keyword", "read1"],
+ ["keyword", "reciprocal"],
+ ["keyword", "reval"],
+ ["keyword", "reverse"],
+ ["keyword", "rload"],
+ ["keyword", "rotate"],
+ ["keyword", "rsave"],
+ ["keyword", "rtrim"],
+ ["keyword", "save"],
+ ["keyword", "scan"],
+ ["keyword", "scov"],
+ ["keyword", "sdev"],
+ ["keyword", "select"],
+ ["keyword", "set"],
+ ["keyword", "setenv"],
+ ["keyword", "show"],
+ ["keyword", "signum"],
+ ["keyword", "sin"],
+ ["keyword", "sqrt"],
+ ["keyword", "ss"],
+ ["keyword", "ssr"],
+ ["keyword", "string"],
+ ["keyword", "sublist"],
+ ["keyword", "sum"],
+ ["keyword", "sums"],
+ ["keyword", "sv"],
+ ["keyword", "svar"],
+ ["keyword", "system"],
+ ["keyword", "tables"],
+ ["keyword", "tan"],
+ ["keyword", "til"],
+ ["keyword", "trim"],
+ ["keyword", "txf"],
+ ["keyword", "type"],
+ ["keyword", "uj"],
+ ["keyword", "ungroup"],
+ ["keyword", "union"],
+ ["keyword", "update"],
+ ["keyword", "upper"],
+ ["keyword", "upsert"],
+ ["keyword", "value"],
+ ["keyword", "var"],
+ ["keyword", "view"],
+ ["keyword", "views"],
+ ["keyword", "vs"],
+ ["keyword", "wavg"],
+ ["keyword", "where"],
+ ["keyword", "while"],
+ ["keyword", "within"],
+ ["keyword", "wj"],
+ ["keyword", "wj1"],
+ ["keyword", "wsum"],
+ ["keyword", "ww"],
+ ["keyword", "xasc"],
+ ["keyword", "xbar"],
+ ["keyword", "xcol"],
+ ["keyword", "xcols"],
+ ["keyword", "xdesc"],
+ ["keyword", "xexp"],
+ ["keyword", "xgroup"],
+ ["keyword", "xkey"],
+ ["keyword", "xlog"],
+ ["keyword", "xprev"],
+ ["keyword", "xrank"]
+]
+
+----------------------------------------------------
+
+Checks for keywords.
\ No newline at end of file
diff --git a/tests/languages/q/number_feature.test b/tests/languages/q/number_feature.test
new file mode 100644
index 0000000000..4ddf9e5eca
--- /dev/null
+++ b/tests/languages/q/number_feature.test
@@ -0,0 +1,33 @@
+0w 0n
+0W 0Wh 0Wj
+0N 0Nh 0Nj 0Ne
+
+0xBadFace
+42
+3.14159
+3e8
+0.4e-7
+3.12e+42
+42h 42j 42f
+4.00e 1b
+
+----------------------------------------------------
+
+[
+ ["number", "0w"], ["number", "0n"],
+ ["number", "0W"], ["number", "0Wh"], ["number", "0Wj"],
+ ["number", "0N"], ["number", "0Nh"], ["number", "0Nj"], ["number", "0Ne"],
+
+ ["number", "0xBadFace"],
+ ["number", "42"],
+ ["number", "3.14159"],
+ ["number", "3e8"],
+ ["number", "0.4e-7"],
+ ["number", "3.12e+42"],
+ ["number", "42h"], ["number", "42j"], ["number", "42f"],
+ ["number", "4.00e"], ["number", "1b"]
+]
+
+----------------------------------------------------
+
+Checks for numbers.
\ No newline at end of file
diff --git a/tests/languages/q/string_feature.test b/tests/languages/q/string_feature.test
new file mode 100644
index 0000000000..7a9309d9ef
--- /dev/null
+++ b/tests/languages/q/string_feature.test
@@ -0,0 +1,13 @@
+""
+"Fo\"obar"
+
+----------------------------------------------------
+
+[
+ ["string", "\"\""],
+ ["string", "\"Fo\\\"obar\""]
+]
+
+----------------------------------------------------
+
+Checks for strings.
\ No newline at end of file
diff --git a/tests/languages/q/symbol_feature.test b/tests/languages/q/symbol_feature.test
new file mode 100644
index 0000000000..0a86fb9c76
--- /dev/null
+++ b/tests/languages/q/symbol_feature.test
@@ -0,0 +1,17 @@
+`
+`foobar
+`:www.example.com:8888
+`.foo
+
+----------------------------------------------------
+
+[
+ ["symbol", "`"],
+ ["symbol", "`foobar"],
+ ["symbol", "`:www.example.com:8888"],
+ ["symbol", "`.foo"]
+]
+
+----------------------------------------------------
+
+Checks for symbols.
\ No newline at end of file
diff --git a/tests/languages/q/verb_feature.test b/tests/languages/q/verb_feature.test
new file mode 100644
index 0000000000..d8bbca6118
--- /dev/null
+++ b/tests/languages/q/verb_feature.test
@@ -0,0 +1,35 @@
+. .:
+0: 1:
+< <: <> <>: <= <=:
+> >: >= >=:
+: ::
++ +: - -:
+* *: % %:
+, ,: ! !:
+? ?: _ _:
+~ ~: = =:
+| |: $ $:
+& &: # #:
+@ @: ^ ^:
+
+----------------------------------------------------
+
+[
+ ["verb", "."], ["verb", ".:"],
+ ["verb", "0:"], ["verb", "1:"],
+ ["verb", "<"], ["verb", "<:"], ["verb", "<>"], ["verb", "<>:"], ["verb", "<="], ["verb", "<=:"],
+ ["verb", ">"], ["verb", ">:"], ["verb", ">="], ["verb", ">=:"],
+ ["verb", ":"], ["verb", "::"],
+ ["verb", "+"], ["verb", "+:"], ["verb", "-"], ["verb", "-:"],
+ ["verb", "*"], ["verb", "*:"], ["verb", "%"], ["verb", "%:"],
+ ["verb", ","], ["verb", ",:"], ["verb", "!"], ["verb", "!:"],
+ ["verb", "?"], ["verb", "?:"], ["verb", "_"], ["verb", "_:"],
+ ["verb", "~"], ["verb", "~:"], ["verb", "="], ["verb", "=:"],
+ ["verb", "|"], ["verb", "|:"], ["verb", "$"], ["verb", "$:"],
+ ["verb", "&"], ["verb", "&:"], ["verb", "#"], ["verb", "#:"],
+ ["verb", "@"], ["verb", "@:"], ["verb", "^"], ["verb", "^:"]
+]
+
+----------------------------------------------------
+
+Checks for verbs.
\ No newline at end of file