Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Monkey #621

Merged
merged 4 commits into from
Sep 7, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions components.js
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,10 @@ var components = {
"title": "Mizar",
"owner": "Golmote"
},
"monkey": {
"title": "Monkey",
"owner": "Golmote"
},
"nasm": {
"title": "NASM",
"owner": "rbmj"
Expand Down
25 changes: 25 additions & 0 deletions components/prism-monkey.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Prism.languages.monkey = {
'string': /"[^"\r\n]*"/,
'comment': [
/^#Rem\s+[\s\S]*?^#End/im,
/'.+/,
],
'preprocessor': {
pattern: /(^[ \t]*)#.+/m,
lookbehind: true,
alias: 'comment'
},
'function': /\w+(?=\()/,
'type-char': {
pattern: /(\w)[?%#$]/,
lookbehind: true,
alias: 'variable'
},
'number': {
pattern: /((?:\.\.)?)(?:(?:\b|\B-\.?|\B\.)\d+((?!\.\.)\.\d*)?|\$[\da-f]+)/i,
lookbehind: true
},
'keyword': /\b(?:Void|Strict|Public|Private|Property|Bool|Int|Float|String|Array|Object|Continue|Exit|Import|Extern|New|Self|Super|Try|Catch|Eachin|True|False|Extends|Abstract|Final|Select|Case|Default|Const|Local|Global|Field|Method|Function|Class|End|If|Then|Else|ElseIf|EndIf|While|Wend|Repeat|Until|Forever|For|To|Step|Next|Return|Module|Interface|Implements|Inline|Throw|Null)\b/i,
'operator': /\.\.|<[=>]?|>=?|:?=|(?:[+\-*\/&~|]|\b(?:Mod|Shl|Shr)\b)=?|\b(?:And|Not|Or)\b/i,
'punctuation': /[.,:;()\[\]]/
};
1 change: 1 addition & 0 deletions components/prism-monkey.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 90 additions & 0 deletions examples/prism-monkey.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<h1>Monkey</h1>
<p>To use this language, use the class "language-monkey".</p>

<h2>Comments</h2>
<pre><code>' This is a comment

#Rem ' This is the start of a comment block
Some comment ' We are inside the comment block
#End</code></pre>

<h2>Strings</h2>
<pre><code>"Hello World"
"~qHello World~q"
"~tIndented~n"</code></pre>

<h2>Numbers</h2>
<pre><code>0
1234
$3D0DEAD
$CAFEBABE

.0
0.0
.5
0.5
1.0
1.5
1.00001
3.14159265</code></pre>

<h2>Variable types</h2>
<pre><code>Local myVariable:Bool = True
Local myVariable? = True
Local myVariable:Int = 1024
Local myVariable% = 1024
Local myVariable:Float = 3.141516
Local myVariable# = 3.141516
Local myVariable:String = "Hello world"
Local myVariable$ = "Hello world"</code></pre>

<h2>Full example</h2>
<pre><code>Import mojo

Class MyApp Extends App

Method OnCreate()

SetUpdateRate 60

End

Method OnRender()

Local date:=GetDate()

Local months:=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]

Local day:=("0"+date[2])[-2..]
Local month:=months[date[1]-1]
Local year:=date[0]
Local hour:=("0"+date[3])[-2..]
Local min:=("0"+date[4])[-2..]
Local sec:=("0"+date[5])[-2..] + "." + ("00"+date[6])[-3..]

Local now:=hour+":"+min+":"+sec+" "+day+" "+month+" "+year

Cls
DrawText now,DeviceWidth/2,DeviceHeight/2,.5,.5
End

End

Function Main()

New MyApp

End</code></pre>

<h2>Known failures</h2>
<p>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.
</p>

<h2>Two double quotes inside a comment</h2>
<pre><code>' This "comment" is broken
#Rem
This "comment" is broken
#End</code></pre>
15 changes: 15 additions & 0 deletions tests/languages/monkey/comment_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
' Foobar
#Rem Foo
Bar 'Baz
#End

----------------------------------------------------

[
["comment", "' Foobar"],
["comment", "#Rem Foo\r\nBar 'Baz\r\n#End"]
]

----------------------------------------------------

Checks for comments.
13 changes: 13 additions & 0 deletions tests/languages/monkey/function_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
foobar()
Foo_Bar_42()

----------------------------------------------------

[
["function", "foobar"], ["punctuation", "("], ["punctuation", ")"],
["function", "Foo_Bar_42"], ["punctuation", "("], ["punctuation", ")"]
]

----------------------------------------------------

Checks for functions.
125 changes: 125 additions & 0 deletions tests/languages/monkey/keyword_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
Void
Strict
Public
Private
Property
Bool
Int
Float
String
Array
Object
Continue
Exit
Import
Extern
New
Self
Super
Try
Catch
Eachin
True
False
Extends
Abstract
Final
Select
Case
Default
Const
Local
Global
Field
Method
Function
Class
End
If
Then
Else
ElseIf
EndIf
While
Wend
Repeat
Until
Forever
For
To
Step
Next
Return
Module
Interface
Implements
Inline
Throw
Null

----------------------------------------------------

[
["keyword", "Void"],
["keyword", "Strict"],
["keyword", "Public"],
["keyword", "Private"],
["keyword", "Property"],
["keyword", "Bool"],
["keyword", "Int"],
["keyword", "Float"],
["keyword", "String"],
["keyword", "Array"],
["keyword", "Object"],
["keyword", "Continue"],
["keyword", "Exit"],
["keyword", "Import"],
["keyword", "Extern"],
["keyword", "New"],
["keyword", "Self"],
["keyword", "Super"],
["keyword", "Try"],
["keyword", "Catch"],
["keyword", "Eachin"],
["keyword", "True"],
["keyword", "False"],
["keyword", "Extends"],
["keyword", "Abstract"],
["keyword", "Final"],
["keyword", "Select"],
["keyword", "Case"],
["keyword", "Default"],
["keyword", "Const"],
["keyword", "Local"],
["keyword", "Global"],
["keyword", "Field"],
["keyword", "Method"],
["keyword", "Function"],
["keyword", "Class"],
["keyword", "End"],
["keyword", "If"],
["keyword", "Then"],
["keyword", "Else"],
["keyword", "ElseIf"],
["keyword", "EndIf"],
["keyword", "While"],
["keyword", "Wend"],
["keyword", "Repeat"],
["keyword", "Until"],
["keyword", "Forever"],
["keyword", "For"],
["keyword", "To"],
["keyword", "Step"],
["keyword", "Next"],
["keyword", "Return"],
["keyword", "Module"],
["keyword", "Interface"],
["keyword", "Implements"],
["keyword", "Inline"],
["keyword", "Throw"],
["keyword", "Null"]
]

----------------------------------------------------

Checks for keywords.
19 changes: 19 additions & 0 deletions tests/languages/monkey/number_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
0
42
3.14159
.5
$BadFace

----------------------------------------------------

[
["number", "0"],
["number", "42"],
["number", "3.14159"],
["number", ".5"],
["number", "$BadFace"]
]

----------------------------------------------------

Checks for numbers.
41 changes: 41 additions & 0 deletions tests/languages/monkey/operator_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
..
< <> <=
> >=
=
:=
+ +=
- -=
* *=
/ /=
& &=
~ ~=
| |=
Mod Mod=
Shl Shl=
Shr Shr=
And Not Or

----------------------------------------------------

[
["operator", ".."],
["operator", "<"], ["operator", "<>"], ["operator", "<="],
["operator", ">"], ["operator", ">="],
["operator", "="],
["operator", ":="],
["operator", "+"], ["operator", "+="],
["operator", "-"], ["operator", "-="],
["operator", "*"], ["operator", "*="],
["operator", "/"], ["operator", "/="],
["operator", "&"], ["operator", "&="],
["operator", "~"], ["operator", "~="],
["operator", "|"], ["operator", "|="],
["operator", "Mod"], ["operator", "Mod="],
["operator", "Shl"], ["operator", "Shl="],
["operator", "Shr"], ["operator", "Shr="],
["operator", "And"], ["operator", "Not"], ["operator", "Or"]
]

----------------------------------------------------

Checks for operators.
15 changes: 15 additions & 0 deletions tests/languages/monkey/preprocessor_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#If HOST
#ElseIf
#Else

----------------------------------------------------

[
["preprocessor", "#If HOST"],
["preprocessor", "#ElseIf"],
["preprocessor", "#Else"]
]

----------------------------------------------------

Checks for preprocessor directives.
13 changes: 13 additions & 0 deletions tests/languages/monkey/string_feature.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
""
"Foo ~qBar~q"

----------------------------------------------------

[
["string", "\"\""],
["string", "\"Foo ~qBar~q\""]
]

----------------------------------------------------

Checks for strings.
Loading