Skip to content
This repository was archived by the owner on Apr 22, 2020. It is now read-only.

Commit f588945

Browse files
better basic and pascal support courtesy Peter Kopfler in issue 137
1 parent 705cd95 commit f588945

File tree

4 files changed

+145
-4
lines changed

4 files changed

+145
-4
lines changed

src/lang-basic.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Contributed by peter dot kofler at code minus cop dot org
2+
3+
/**
4+
* @fileoverview
5+
* Registers a language handler for Basic.
6+
*
7+
* To use, include prettify.js and this file in your HTML page.
8+
* Then put your code in an HTML tag like
9+
* <pre class="prettyprint lang-basic">(my BASIC code)</pre>
10+
*
11+
* @author peter dot kofler at code minus cop dot org
12+
*/
13+
14+
PR.registerLangHandler(
15+
PR.createSimpleLexer(
16+
[ // shortcutStylePatterns
17+
// "single-line-string"
18+
[PR.PR_STRING, /^(?:"(?:[^\\"\r\n]|\\.)*(?:"|$))/, null, '"'],
19+
// Whitespace
20+
[PR.PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']
21+
],
22+
[ // fallthroughStylePatterns
23+
// A line comment that starts with REM
24+
[PR.PR_COMMENT, /^REM[^\r\n]*/, null],
25+
[PR.PR_KEYWORD, /^\b(?:AND|CLOSE|CLR|CMD|CONT|DATA|DEF ?FN|DIM|END|FOR|GET|GOSUB|GOTO|IF|INPUT|LET|LIST|LOAD|NEW|NEXT|NOT|ON|OPEN|OR|POKE|PRINT|READ|RESTORE|RETURN|RUN|SAVE|STEP|STOP|SYS|THEN|TO|VERIFY|WAIT)\b/, null],
26+
[PR.PR_PLAIN, /^[A-Z][A-Z0-9]?(?:\$|%)?/i, null],
27+
// Literals .0, 0, 0.0 0E13
28+
[PR.PR_LITERAL, /^(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?/i, null, '0123456789'],
29+
[PR.PR_PUNCTUATION, /^.[^\s\w\.$%"]*/, null]
30+
// [PR.PR_PUNCTUATION, /^[-,:;!<>=\+^\/\*]+/]
31+
]),
32+
['basic','cbm']);

src/lang-pascal.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Contributed by peter dot kofler at code minus cop dot org
2+
3+
/**
4+
* @fileoverview
5+
* Registers a language handler for (Turbo) Pascal.
6+
*
7+
* To use, include prettify.js and this file in your HTML page.
8+
* Then put your code in an HTML tag like
9+
* <pre class="prettyprint lang-pascal">(my Pascal code)</pre>
10+
*
11+
* @author peter dot kofler at code minus cop dot org
12+
*/
13+
14+
PR.registerLangHandler(
15+
PR.createSimpleLexer(
16+
[ // shortcutStylePatterns
17+
// 'single-line-string'
18+
[PR.PR_STRING, /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$))/, null, '\''],
19+
// Whitespace
20+
[PR.PR_PLAIN, /^\s+/, null, ' \r\n\t\xA0']
21+
],
22+
[ // fallthroughStylePatterns
23+
// A cStyleComments comment (* *) or {}
24+
[PR.PR_COMMENT, /^\(\*[\s\S]*?(?:\*\)|$)|^\{[\s\S]*?(?:\}|$)/, null],
25+
[PR.PR_KEYWORD, /^(?:ABSOLUTE|AND|ARRAY|ASM|ASSEMBLER|BEGIN|CASE|CONST|CONSTRUCTOR|DESTRUCTOR|DIV|DO|DOWNTO|ELSE|END|EXTERNAL|FOR|FORWARD|FUNCTION|GOTO|IF|IMPLEMENTATION|IN|INLINE|INTERFACE|INTERRUPT|LABEL|MOD|NOT|OBJECT|OF|OR|PACKED|PROCEDURE|PROGRAM|RECORD|REPEAT|SET|SHL|SHR|THEN|TO|TYPE|UNIT|UNTIL|USES|VAR|VIRTUAL|WHILE|WITH|XOR)\b/i, null],
26+
[PR.PR_LITERAL, /^(?:true|false|self|nil)/i, null],
27+
[PR.PR_PLAIN, /^[a-z][a-z0-9]*/i, null],
28+
// Literals .0, 0, 0.0 0E13
29+
[PR.PR_LITERAL, /^(?:\$[a-f0-9]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+\-]?\d+)?)/i, null, '0123456789'],
30+
[PR.PR_PUNCTUATION, /^.[^\s\w\.$@\'\/]*/, null]
31+
]),
32+
['pascal']);

src/lang-vb.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ PR['registerLangHandler'](
5353
// A boolean, numeric, or date literal.
5454
[PR['PR_LITERAL'],
5555
/^(?:True\b|False\b|Nothing\b|\d+(?:E[+\-]?\d+[FRD]?|[FRDSIL])?|(?:&H[0-9A-F]+|&O[0-7]+)[SIL]?|\d*\.\d+(?:E[+\-]?\d+)?[FRD]?|#\s+(?:\d+[\-\/]\d+[\-\/]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)?|\d+:\d+(?::\d+)?(\s*(?:AM|PM))?)\s+#)/i],
56-
// An identifier?
57-
[PR['PR_PLAIN'], /^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*\])/i],
56+
// An identifier. Keywords can be turned into identifers
57+
// with square brackets, and there may be optional type
58+
// characters after a normal identifier in square brackets.
59+
[PR['PR_PLAIN'], /^(?:(?:[a-z]|_\w)\w*(?:\[[%&@!#]+\])?|\[(?:[a-z]|_\w)\w*\])/i],
5860
// A run of punctuation
5961
[PR['PR_PUNCTUATION'],
6062
/^[^\w\t\n\r \"\'\[\]\xA0\u2018\u2019\u201C\u201D\u2028\u2029]+/],

tests/prettify_test_2.html

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@
77
? "../distrib/google-code-prettify/" : "../src/";
88
var sources = [
99
"prettify.js",
10+
"lang-basic.js",
1011
"lang-css.js",
1112
// Language extensions tested.
1213
"lang-clj.js",
1314
"lang-lisp.js",
1415
"lang-xq.js",
1516
"lang-mumps.js",
1617
"lang-n.js",
18+
"lang-pascal.js",
1719
"lang-r.js",
1820
"lang-tcl.js",
1921
"lang-tex.js"
20-
];
22+
];
2123
var styles = [
2224
"prettify.css"
2325
];
@@ -497,6 +499,45 @@ <h1>Issues 185 and 261: Don't reprettify prettified content</h1>
497499
<h1>Issue 201: C type not full word</h1>
498500
<code class="prettyprint lang-c" id="issue201"
499501
>static Persistent&lt;String&gt; listeners_symbol;</code>
502+
503+
<h1>Pascal w/ language specified</h1>
504+
<pre class="prettyprint lang-pascal" id="pascal_lang">
505+
(* some comment here *)
506+
PROCEDURE TestCase.AssertEquals(msg:String; expect, act:Longint);
507+
VAR ex, ac:String;
508+
BEGIN
509+
IF expect &lt;&gt; act THEN
510+
BEGIN
511+
Str(expect, ex);
512+
Fail(Concat(msg,' expected ',ex,' but was ',ac));
513+
END;
514+
515+
factors := new(ArrayListPtr, Init);
516+
517+
FOR candidate := 2 TO i DO
518+
BEGIN
519+
WHILE i MOD candidate = 0 DO
520+
BEGIN
521+
factors^.Add(candidate);
522+
i := i DIV candidate;
523+
END;
524+
END;
525+
END;
526+
</pre>
527+
528+
<h1>BASIC w/ language specified</h1>
529+
<pre class="prettyprint lang-basic" id="basic_lang">
530+
200 REM ----- method teardown
531+
210 PRINT "green"
532+
220 RETURN
533+
470 IF af=0 THEN GOTO 520
534+
480 FOR j=1 TO af
535+
500 ac=pf(j) : me$=STR$(j)+". factor" : GOSUB 100
536+
510 NEXT
537+
530 RETURN
538+
1000 DATA "one", 1, 0
539+
</pre>
540+
500541
</body>
501542

502543
<h1>Dart language handler</h1>
@@ -1384,7 +1425,41 @@ <h1>MUMPS</h1>
13841425
' `END`KWDW`END`PUN:`END`PLNVALMCC IOUOFF `END`KWDI`END`PLN `END`DEC$E`END`PUN(`END`PLNIOST`END`PUN,`END`LIT1`END`PUN,`END`LIT2`END`PUN)=`END`STR"C-"`END`PLN `END`KWDD`END`PLN IOXY^VALM4`END`PUN(`END`LIT0`END`PUN,`END`LIT0`END`PUN)`END`PLN `END`COM; -- turn off undln`END`PLN\n' +
13851426
' `END`KWDF`END`PLN `END`KWDI`END`PUN=`END`LIT1`END`PUN:`END`LIT1`END`PUN:`END`PLNVALM`END`PUN(`END`STR"TM"`END`PUN)`END`LIT-3`END`PLN `END`KWDW`END`PLN `END`PUN!,`END`DEC$S`END`PUN(\'`END`DEC$D`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN)):`END`STR""`END`PUN,`END`DEC$L`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))&gt;(`END`PLNVALMWD`END`LIT-1`END`PUN):`END`PLN$`END`DEC$EXTRACT`END`PLN^VALM4`END`PUN(`END`DEC$G`END`PUN(`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))),`END`LIT1`END`PUN:`END`PLNVALMHDR`END`PUN(`END`KWDI`END`PUN))`END`PLN `END`COM; -- prt hdr`END`PLN\n' +
13861427
' `END`KWDQ`END'
1387-
)
1428+
),
1429+
basic_lang: (
1430+
'`LIT200`END`PLN `END`COMREM ----- method teardown`END`PLN\n' +
1431+
'`END`LIT210`END`PLN `END`KWDPRINT`END`PLN `END`STR"green"`END`PLN\n' +
1432+
'`END`LIT220`END`PLN `END`KWDRETURN`END`PLN\n' +
1433+
'`END`LIT470`END`PLN `END`KWDIF`END`PLN af`END`PUN=`END`LIT0`END`PLN `END`KWDTHEN`END`PLN `END`KWDGOTO`END`PLN `END`LIT520`END`PLN\n' +
1434+
'`END`LIT480`END`PLN `END`KWDFOR`END`PLN j`END`PUN=`END`LIT1`END`PLN `END`KWDTO`END`PLN af\n' +
1435+
'`END`LIT500`END`PLN ac`END`PUN=`END`PLNpf`END`PUN(`END`PLNj`END`PUN)`END`PLN `END`PUN:`END`PLN me$`END`PUN=`END`PLNSTR$`END`PUN(`END`PLNj`END`PUN)+`END`STR". factor"`END`PLN `END`PUN:`END`PLN `END`KWDGOSUB`END`PLN `END`LIT100`END`PLN\n' +
1436+
'`END`LIT510`END`PLN `END`KWDNEXT`END`PLN\n' +
1437+
'`END`LIT530`END`PLN `END`KWDRETURN`END`PLN\n' +
1438+
'`END`LIT1000`END`PLN `END`KWDDATA`END`PLN `END`STR"one"`END`PUN,`END`PLN `END`LIT1`END`PUN,`END`PLN `END`LIT0`END'
1439+
),
1440+
pascal_lang: (
1441+
'`COM(* some comment here *)`END`PLN\n' +
1442+
'`END`KWDPROCEDURE`END`PLN TestCase`END`PUN.`END`PLNAssertEquals`END`PUN(`END`PLNmsg`END`PUN:`END`PLNString`END`PUN;`END`PLN expect`END`PUN,`END`PLN act`END`PUN:`END`PLNLongint`END`PUN);`END`PLN\n' +
1443+
'`END`KWDVAR`END`PLN ex`END`PUN,`END`PLN ac`END`PUN:`END`PLNString`END`PUN;`END`PLN\n' +
1444+
'`END`KWDBEGIN`END`PLN\n' +
1445+
' `END`KWDIF`END`PLN expect `END`PUN&lt;&gt;`END`PLN act `END`KWDTHEN`END`PLN\n' +
1446+
' `END`KWDBEGIN`END`PLN\n' +
1447+
' Str`END`PUN(`END`PLNexpect`END`PUN,`END`PLN ex`END`PUN);`END`PLN\n' +
1448+
' Fail`END`PUN(`END`PLNConcat`END`PUN(`END`PLNmsg`END`PUN,`END`STR\' expected \'`END`PUN,`END`PLNex`END`PUN,`END`STR\' but was \'`END`PUN,`END`PLNac`END`PUN));`END`PLN\n' +
1449+
' `END`KWDEND`END`PUN;`END`PLN\n' +
1450+
'\n' +
1451+
' factors `END`PUN:=`END`PLN new`END`PUN(`END`PLNArrayListPtr`END`PUN,`END`PLN Init`END`PUN);`END`PLN\n' +
1452+
'\n' +
1453+
' `END`KWDFOR`END`PLN candidate `END`PUN:=`END`PLN `END`LIT2`END`PLN `END`KWDTO`END`PLN i `END`KWDDO`END`PLN\n' +
1454+
' `END`KWDBEGIN`END`PLN\n' +
1455+
' `END`KWDWHILE`END`PLN i `END`KWDMOD`END`PLN candidate `END`PUN=`END`PLN `END`LIT0`END`PLN `END`KWDDO`END`PLN\n' +
1456+
' `END`KWDBEGIN`END`PLN\n' +
1457+
' factors`END`PUN^.`END`PLNAdd`END`PUN(`END`PLNcandidate`END`PUN);`END`PLN\n' +
1458+
' i `END`PUN:=`END`PLN i `END`KWDDIV`END`PLN candidate`END`PUN;`END`PLN\n' +
1459+
' `END`KWDEND`END`PUN;`END`PLN\n' +
1460+
' `END`KWDEND`END`PUN;`END`PLN\n' +
1461+
'`END`KWDEND`END`PUN;`END'
1462+
)
13881463
};
13891464
</script>
13901465

0 commit comments

Comments
 (0)