Add support for BASIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
diff --git a/components.js b/components.js
index 919b3c1..b901eca 100644
--- a/components.js
+++ b/components.js
@@ -84,6 +84,10 @@ var components = {
"require": "clike",
"owner": "zeitgeist87"
},
+ "basic": {
+ "title": "BASIC",
+ "owner": "Golmote"
+ },
"brainfuck": {
"title": "Brainfuck",
"owner": "Golmote"
diff --git a/components/prism-basic.js b/components/prism-basic.js
new file mode 100644
index 0000000..4dbd300
--- /dev/null
+++ b/components/prism-basic.js
@@ -0,0 +1,13 @@
+Prism.languages.basic = {
+ 'string': /"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,
+ 'comment': {
+ pattern: /(?:!|REM\b).+/i,
+ inside: {
+ 'keyword': /^REM/i
+ }
+ },
+ 'number': /(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,
+ 'keyword': /\b(?:ABS|ACCESS|ACOS|AND|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CALL|CASE|CAUSE|CEIL|CHAIN|CHR|CLEAR|CLIP|CLOSE|CLS|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATA|DATE|DATUM|DEBUG|DECIMAL|DECLARE|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DIM|DISPLAY|DO|DOT|ELAPSED|ELSE|ELSEIF|END|EPS|ERASE|ERASABLE|EXIT|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FOR|FP|FUNCTION|GO|GOSUB|GOTO|GRAPH|HANDLER|IDN|IF|IMAGE|IN|INPUT|INT|INTERNAL|IP|IS|KEY|KEYED|LBOUND|LCASE|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LOOP|LTRIM|MARGIN|MAT|MAX|MAXNUM|MIN|MISSING|MOD|NAME|NATIVE|NEXT|NOT|NUL|NUMERIC|OF|OFF|ON|OPEN|OPTION|OR|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|READ|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RESTORE|RETRY|RETURN|REWRITE|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STEP|STOP|STR|STREAM|STRING|STYLE|SUB|TAB|TAN|TANH|TEMPLATE|TEXT|THEN|THERE|TIME|TIMEOUT|TO|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|UNTIL|USE|USING|VAL|VARIABLE|VIEWPORT|WHEN|WHILE|WINDOW|WITH|WRITE|ZER|ZONEWIDTH)(?:\$|\b)/i,
+ 'operator': /[<>]=?|<>|[+\-*\/^=&]/,
+ 'punctuation': /[,;:()]/
+};
\ No newline at end of file
diff --git a/components/prism-basic.min.js b/components/prism-basic.min.js
new file mode 100644
index 0000000..1f11876
--- /dev/null
+++ b/components/prism-basic.min.js
@@ -0,0 +1 @@
+Prism.languages.basic={string:/"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,comment:{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},number:/(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,keyword:/\b(?:ABS|ACCESS|ACOS|AND|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CALL|CASE|CAUSE|CEIL|CHAIN|CHR|CLEAR|CLIP|CLOSE|CLS|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATA|DATE|DATUM|DEBUG|DECIMAL|DECLARE|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DIM|DISPLAY|DO|DOT|ELAPSED|ELSE|ELSEIF|END|EPS|ERASE|ERASABLE|EXIT|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FOR|FP|FUNCTION|GO|GOSUB|GOTO|GRAPH|HANDLER|IDN|IF|IMAGE|IN|INPUT|INT|INTERNAL|IP|IS|KEY|KEYED|LBOUND|LCASE|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LOOP|LTRIM|MARGIN|MAT|MAX|MAXNUM|MIN|MISSING|MOD|NAME|NATIVE|NEXT|NOT|NUL|NUMERIC|OF|OFF|ON|OPEN|OPTION|OR|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|READ|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RESTORE|RETRY|RETURN|REWRITE|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STEP|STOP|STR|STREAM|STRING|STYLE|SUB|TAB|TAN|TANH|TEMPLATE|TEXT|THEN|THERE|TIME|TIMEOUT|TO|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|UNTIL|USE|USING|VAL|VARIABLE|VIEWPORT|WHEN|WHILE|WINDOW|WITH|WRITE|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/[<>]=?|<>|[+\-*\/^=&]/,punctuation:/[,;:()]/};
\ No newline at end of file
diff --git a/examples/prism-basic.html b/examples/prism-basic.html
new file mode 100644
index 0000000..434f9ef
--- /dev/null
+++ b/examples/prism-basic.html
@@ -0,0 +1,83 @@
+<h1>BASIC</h1>
+<p>To use this language, use the class "language-basic".</p>
+
+<p>Note: this component focuses on first and second-generation BASICs (such as MSX BASIC, GW-BASIC, SuperBASIC, QuickBASIC, PowerBASIC...).</p>
+
+<h2>Comments</h2>
+<pre><code>! This is a comment
+REM This is a remark</code></pre>
+
+<h2>Strings</h2>
+<pre><code>"This a string."
+"This is a string with ""quotes"" in it."</code></pre>
+
+<h2>Numbers</h2>
+<pre><code>42
+3.14159
+-42
+-3.14159
+.5
+10.
+2E10
+4.2E-14
+-3E+2</code></pre>
+
+<h2>Dartmouth Basic example</h2>
+<pre><code>5 LET S = 0
+10 MAT INPUT V
+20 LET N = NUM
+30 IF N = 0 THEN 99
+40 FOR I = 1 TO N
+45 LET S = S + V(I)
+50 NEXT I
+60 PRINT S/N
+70 GO TO 5
+99 END</code></pre>
+
+<h2>GW-BASIC example</h2>
+<pre><code>10 INPUT "What is your name: ", U$
+20 PRINT "Hello "; U$
+30 INPUT "How many stars do you want: ", N
+40 S$ = ""
+50 FOR I = 1 TO N
+60 S$ = S$ + "*"
+70 NEXT I
+80 PRINT S$
+90 INPUT "Do you want more stars? ", A$
+100 IF LEN(A$) = 0 THEN GOTO 90
+110 A$ = LEFT$(A$, 1)
+120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30
+130 PRINT "Goodbye "; U$
+140 END</code></pre>
+
+<h2>QuickBASIC example</h2>
+<pre><code>DECLARE SUB PrintSomeStars (StarCount!)
+REM QuickBASIC example
+INPUT "What is your name: ", UserName$
+PRINT "Hello "; UserName$
+DO
+ INPUT "How many stars do you want: ", NumStars
+ CALL PrintSomeStars(NumStars)
+ DO
+ INPUT "Do you want more stars? ", Answer$
+ LOOP UNTIL Answer$ <> ""
+ Answer$ = LEFT$(Answer$, 1)
+LOOP WHILE UCASE$(Answer$) = "Y"
+PRINT "Goodbye "; UserName$
+
+SUB PrintSomeStars (StarCount)
+ REM This procedure uses a local variable called Stars$
+ Stars$ = STRING$(StarCount, "*")
+ PRINT Stars$
+END SUB</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>
+
+<h3>Two double quotes inside a comment</h3>
+<pre><code>! This "comment" is broken
+REM This "remark" is broken</code></pre>
\ No newline at end of file