My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
// Copyright (C) 2008 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.



/**
* @fileoverview
* Registers a language handler for Common Lisp and related languages.
*
*
* To use, include prettify.js and this file in your HTML page.
* Then put your code in an HTML tag like
* <pre class="prettyprint lang-lisp">(my lisp code)</pre>
* The lang-cl class identifies the language as common lisp.
* This file supports the following language extensions:
* lang-cl - Common Lisp
* lang-el - Emacs Lisp
* lang-lisp - Lisp
* lang-scm - Scheme
* lang-lsp - FAT 8.3 filename version of lang-lisp.
*
*
* I used http://www.devincook.com/goldparser/doc/meta-language/grammar-LISP.htm
* as the basis, but added line comments that start with ; and changed the atom
* production to disallow unquoted semicolons.
*
* "Name" = 'LISP'
* "Author" = 'John McCarthy'
* "Version" = 'Minimal'
* "About" = 'LISP is an abstract language that organizes ALL'
* | 'data around "lists".'
*
* "Start Symbol" = [s-Expression]
*
* {Atom Char} = {Printable} - {Whitespace} - [()"\'']
*
* Atom = ( {Atom Char} | '\'{Printable} )+
*
* [s-Expression] ::= [Quote] Atom
* | [Quote] '(' [Series] ')'
* | [Quote] '(' [s-Expression] '.' [s-Expression] ')'
*
* [Series] ::= [s-Expression] [Series]
* |
*
* [Quote] ::= '' !Quote = do not evaluate
* |
*
*
* I used <a href="http://gigamonkeys.com/book/">Practical Common Lisp</a> as
* the basis for the reserved word list.
*
*
* @author mikesamuel@gmail.com
*/

PR['registerLangHandler'](
PR['createSimpleLexer'](
[
['opn', /^\(+/, null, '('],
['clo', /^\)+/, null, ')'],
// A line comment that starts with ;
[PR['PR_COMMENT'], /^;[^\r\n]*/, null, ';'],
// Whitespace
[PR['PR_PLAIN'], /^[\t\n\r \xA0]+/, null, '\t\n\r \xA0'],
// A double quoted, possibly multi-line, string.
[PR['PR_STRING'], /^\"(?:[^\"\\]|\\[\s\S])*(?:\"|$)/, null, '"']
],
[
[PR['PR_KEYWORD'], /^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/, null],
[PR['PR_LITERAL'],
/^[+\-]?(?:[0#]x[0-9a-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[ed][+\-]?\d+)?)/i],
// A single quote possibly followed by a word that optionally ends with
// = ! or ?.
[PR['PR_LITERAL'],
/^\'(?:-*(?:\w|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?)?/],
// A word that optionally ends with = ! or ?.
[PR['PR_PLAIN'],
/^-*(?:[a-z_]|\\[\x21-\x7e])(?:[\w-]*|\\[\x21-\x7e])[=!?]?/i],
// A printable non-space non-special character
[PR['PR_PUNCTUATION'], /^[^\w\t\n\r \xA0()\"\\\';]+/]
]),
['cl', 'el', 'lisp', 'lsp', 'scm']);

Change log

r190 by mikesamuel on Jun 21, 2011   Diff
Fix  issue 159  - Add "lsp" as extension for
lisp code
Go to: 
Project members, sign in to write a code review

Older revisions

r122 by mikesamuel on Dec 12, 2010   Diff
 issue 135 : recognize common lisp hex
literal prefixes in lisp mode.
r113 by mikesamuel on Aug 17, 2010   Diff
fix lang-*.js files to be more closure
compiler friendly
r112 by mikesamuel on Aug 9, 2010   Diff
added styles for LISP open and close
parentheses to the default stylesheet
All revisions of this file

File info

Size: 3617 bytes, 94 lines

File properties

svn:mergeinfo
svn:mime-type
text/javascript;charset=UTF-8
Powered by Google Project Hosting