diff --git a/Lisp/Fold.tmPreferences b/Lisp/Fold.tmPreferences
index 276bd5cd0f..2a21ac35d9 100644
--- a/Lisp/Fold.tmPreferences
+++ b/Lisp/Fold.tmPreferences
@@ -11,9 +11,27 @@
begin
- punctuation.definition.group.begin
+ punctuation.definition.comment.begin
end
- punctuation.definition.group.end
+ punctuation.definition.comment.end
+ excludeTrailingNewlines
+
+
+
+ begin
+ punctuation.definition.string.begin
+ end
+ punctuation.definition.string.end
+ excludeTrailingNewlines
+
+
+
+ begin
+ punctuation.section.parens.begin
+ end
+ punctuation.section.parens.end
+ excludeTrailingNewlines
+
diff --git a/Lisp/Lisp.sublime-syntax b/Lisp/Lisp.sublime-syntax
index ba64daec3e..44a9795d42 100644
--- a/Lisp/Lisp.sublime-syntax
+++ b/Lisp/Lisp.sublime-syntax
@@ -1,12 +1,13 @@
%YAML 1.2
---
-# http://www.sublimetext.com/docs/3/syntax.html
+# https://www.sublimetext.com/docs/syntax.html
#
# `Common Lisp` Language Reference:
-# http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
-#
+# https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/index.html
+# https://www.lispworks.com/documentation/lw70/CLHS/Front/Contents.htm
name: Lisp
scope: source.lisp
+version: 2
file_extensions:
- lisp
@@ -26,107 +27,2261 @@ first_line_match: |-
^ \s* ; .*? -\*- .*? \blisp\b .*? -\*- # editorconfig
)
+###############################################################################
+
contexts:
main:
- - include: comments
+ - include: statements
+
+ statements:
- include: parens
+ - include: expressions
+ - match: \)
+ scope: invalid.illegal.stray-bracket-end.lisp
expressions:
- include: comments
- include: numbers
- - include: constants
- include: strings
- - include: variables
+ - include: annotations
+ - include: keywords
+ - include: quotes
+ - include: macros
+ - include: modifiers
+ - include: identifiers
+
+###[ COMMENTS ]################################################################
+
+ comments:
+ - include: line-comments
+ - include: block-comments
+ - match: \|#
+ scope: invalid.illegal.stray-comment-end.lisp
+
+ block-comments:
+ - match: '#\|'
+ scope: punctuation.definition.comment.begin.lisp
+ push: block-comment-body
+
+ block-comment-body:
+ - meta_scope: comment.block.lisp
+ - match: '\|#'
+ scope: punctuation.definition.comment.end.lisp
+ pop: 1
+ - include: block-comments
+
+ line-comments:
+ - match: ;+
+ scope: punctuation.definition.comment.lisp
+ push: line-comment-body
+
+ line-comment-body:
+ - meta_scope: comment.line.semicolon.lisp
+ - match: $\n?
+ pop: 1
+
+###[ PARENTHESES ]#############################################################
+
+ parens:
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push:
+ - paren-body
+ - paren-begin
+
+ paren-begin:
+ - include: class-declaration
+ - include: function-declaration
+ - include: macro-declaration
+ - include: struct-declaration
+ - include: type-declaration
+ - include: variable-declaration
+ - include: other-declaration
+ - include: declare
- include: control
- - include: functions
- - include: operators
+ - include: loop
+ - include: operator
+ - include: quote
+ - include: namespaces
+ - include: builtin-function
+ - include: other-function
+ - include: comments
+ - include: else-pop
- variables:
- - match: (\*)(?i:trace-output|terminal-io|suppress-series-warnings|standard-output|standard-input|readtable|read-suppress|read-eval|read-default-float-format|read-base|random-state|query-io|print-right-margin|print-readably|print-radix|print-pretty|print-pprint-dispatch|print-miser-width|print-lines|print-level|print-length|print-gensym|print-escape|print-circle|print-case|print-base|print-array|package|modules|macroexpand-hook|load-verbose|load-truename|load-print|load-pathname|gensym-counter|features|evalhook|error-output|default-pathname-defaults|debugger-hook|debug-io|compile-verbose|compile-print|compile-file-truename|compile-file-pathname|break-on-warnings|break-on-signals|applyhook)(\*)
- scope: variable.language.lisp
+ paren-body:
+ - meta_scope: meta.parens.lisp
+ - include: paren-end
+ - include: parens
+ - include: expressions
+
+ paren-end:
+ - meta_include_prototype: false
+ - meta_scope: meta.parens.lisp
+ - match: \)
+ scope: punctuation.section.parens.end.lisp
+ pop: 1
+
+###[ LISTS ]###################################################################
+
+ expect-list:
+ # a list expression
+ # skips function-like parentheses on next level
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: paren-body
+ - include: comments
+ - include: else-pop
+
+ expect-lists-list:
+ # a list of list expressions
+ # skips function-like parentheses on next 2 levels
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: lists-list-body
+ - include: comments
+ - include: else-pop
+
+ lists-list-body:
+ - meta_scope: meta.parens.lisp
+ - include: paren-end
+ - include: lists
+ - include: expressions
+
+ lists:
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push: paren-body
+
+###[ QUOTED EXPRESSIONS ]######################################################
+
+ quotes:
+ # abbreviation of (quote ...) function
+ - match: \'
+ scope: punctuation.definition.quoted.lisp
+ push: quoted-content
+
+ quoted-content:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: quoted-paren-body
+ # A quoted symbol evaluates to the symbol.
+ - match: '{{identifier}}'
+ scope: constant.other.symbol.lisp
captures:
- 1: punctuation.definition.variable.begin.lisp
- 2: punctuation.definition.variable.end.lisp
- - match: (\*)(\S*)(\*)
- scope: variable.other.global.lisp
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: immediately-pop
+
+ quoted-parens:
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push: quoted-paren-body
+
+ quoted-paren-body:
+ - meta_scope: meta.parens.lisp
+ - include: paren-end
+ - include: quoted-parens
+ - include: expressions
+
+###[ CLASS DECLARATIONS ]######################################################
+
+ class-declaration:
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defcla.htm
+ - match: (?i:defclass|define-class){{break}}
+ scope: meta.class.lisp keyword.declaration.class.lisp
+ set:
+ - class-declaration-slots
+ - class-declaration-parent-list
+ - class-declaration-name
+
+ class-declaration-name:
+ - match: '{{identifier}}'
+ scope: entity.name.class.lisp
captures:
- 1: punctuation.definition.variable.begin.lisp
- 3: punctuation.definition.variable.end.lisp
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ class-declaration-parent-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: class-declaration-parent-list-body
+ - include: comments
+ - include: else-pop
+
+ class-declaration-parent-list-body:
+ - meta_scope: meta.parens.lisp
+ - include: namespaces
+ - match: '{{identifier}}'
+ scope: entity.other.inherited-class.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ - include: comments
+ - include: paren-end
+
+ class-declaration-slots:
+ - meta_content_scope: meta.class.lisp
+ - include: paren-pop
+ - include: lists
+ - include: expressions
+
+###[ FUNCTION DECLARATIONS ]###################################################
+
+ function-declaration:
+ # https://www.lispworks.com/documentation/HyperSpec/Body/s_lambda.htm
+ - match: (?i:lambda){{break}}
+ scope: meta.function.lisp keyword.declaration.function.inline.lisp
+ set:
+ - function-body
+ - function-parameter-list
+ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defun.htm
+ - match: (?i:def(?:[a-z]+f)?un|defgeneric|define-(?:command(?:-global)?|parenscript)){{break}}
+ scope: meta.function.lisp keyword.declaration.function.lisp
+ set:
+ - function-body
+ - function-parameter-list
+ - function-declaration-name
+ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmet.htm
+ - match: (?i:defmethod){{break}}
+ scope: meta.function.lisp keyword.declaration.function.lisp
+ set:
+ - function-body
+ - function-parameter-list
+ - method-qualifier
+ - function-declaration-name
+ # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
+ - match: (?i:flet|labels){{break}}
+ scope: keyword.declaration.function.lisp
+ set: function-declaration-list
+
+ function-declaration-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: function-declaration-list-body
+ - include: comments
+ - include: else-pop
+
+ function-declaration-list-body:
+ - meta_scope: meta.parens.lisp
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push:
+ - paren-end
+ - function-body
+ - function-parameter-list
+ - function-declaration-name
+ - include: comments
+ - include: paren-end
+
+ function-declaration-name:
+ - include: namespaces
+ - match: '{{identifier}}'
+ scope: entity.name.function.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ method-qualifier:
+ # qualifiers may be anything but lists
+ - include: expressions
+ - include: else-pop
+
+ function-parameter-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parameters.begin.lisp
+ set: function-parameter-list-body
+ - include: comments
+ - include: else-pop
+
+ function-parameter-list-body:
+ - clear_scopes: 1
+ - meta_scope: meta.function.parameters.lisp
+ - match: \)
+ scope: punctuation.section.parameters.end.lisp
+ pop: 1
+ - include: comments
+ - include: annotations
+ - include: keywords
+ - include: modifiers
+ - include: parameters
+
+ function-body:
+ - meta_content_scope: meta.function.lisp
+ - include: paren-pop
+ - include: parens
+ - include: expressions
+
+###[ MACRO DECLARATIONS ]######################################################
+
+ macro-declaration:
+ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defmac.htm
+ - match: (?i:defmacro){{break}}
+ scope: meta.macro.lisp keyword.declaration.macro.lisp
+ set:
+ - macro-body
+ - macro-parameter-list
+ - macro-declaration-name
+ # https://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
+ - match: (?i:macrolet){{break}}
+ scope: keyword.declaration.macro.lisp
+ set: macro-declaration-list
+
+ macro-declaration-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: macro-declaration-list-body
+ - include: comments
+ - include: else-pop
+
+ macro-declaration-list-body:
+ - meta_scope: meta.parens.lisp
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push:
+ - paren-end
+ - macro-body
+ - macro-parameter-list
+ - macro-declaration-name
+ - include: comments
+ - include: paren-end
+
+ macro-declaration-name:
+ - include: namespaces
+ - match: '{{identifier}}'
+ scope: entity.name.macro.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ macro-parameter-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parameters.begin.lisp
+ set: macro-parameter-list-body
+ - include: comments
+ - include: else-pop
+
+ macro-parameter-list-body:
+ - clear_scopes: 1
+ - meta_scope: meta.macro.parameters.lisp
+ - match: \)
+ scope: punctuation.section.parameters.end.lisp
+ pop: 1
+ - include: comments
+ - include: annotations
+ - include: keywords
+ - include: modifiers
+ - include: parameters
+
+ macro-body:
+ - meta_content_scope: meta.macro.lisp
+ - include: paren-pop
+ - include: parens
+ - include: expressions
+
+###[ STRUCT DECLARATIONS ]#####################################################
+
+ struct-declaration:
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_defstr.htm
+ - match: (?i:defstruct|define-struct){{break}}
+ scope: meta.struct.lisp keyword.declaration.struct.lisp
+ set:
+ - struct-declaration-body
+ - struct-declaration-name
+
+ struct-declaration-name:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set:
+ - paren-body
+ - struct-declaration-qualified-name
+ - include: struct-declaration-qualified-name
+
+ struct-declaration-qualified-name:
+ - include: namespaces
+ - match: '{{identifier}}'
+ scope: entity.name.struct.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ struct-declaration-body:
+ - meta_content_scope: meta.struct.lisp
+ - include: paren-pop
+ - include: lists
+ - include: expressions
+
+###[ TYPE DECLARATIONS ]#######################################################
+
+ type-declaration:
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_deftp.htm
+ - match: (?i:deftype|define-type){{break}}
+ scope: meta.type.lisp keyword.declaration.type.lisp
+ set:
+ - type-body
+ - type-parameter-list
+ - type-declaration-name
+
+ type-declaration-name:
+ - include: namespaces
+ - match: '{{identifier}}'
+ scope: entity.name.type.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ type-parameter-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parameters.begin.lisp
+ set: type-parameter-list-body
+ - include: comments
+ - include: else-pop
+
+ type-parameter-list-body:
+ - clear_scopes: 1
+ - meta_scope: meta.type.parameters.lisp
+ - match: \)
+ scope: punctuation.section.parameters.end.lisp
+ pop: 1
+ - include: comments
+ - include: annotations
+ - include: keywords
+ - include: modifiers
+ - include: parameters
+
+ type-body:
+ - meta_content_scope: meta.type.lisp
+ - include: paren-pop
+ - include: parens
+ - include: expressions
+
+###[ VARIABLE DECLARATIONS ]###################################################
+
+ variable-declaration:
+ # https://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm
+ - match: (?i:let\*?){{break}}
+ scope: keyword.declaration.variable.lisp
+ set: variable-declaration-list
+ # https://www.lispworks.com/documentation/lw445/CLHS/Body/m_defcon.htm
+ - match: (?i:defconstant){{break}}
+ scope: meta.declaration.lisp keyword.declaration.constant.lisp
+ set: constant-declaration-name
+ # https://www.lispworks.com/documentation/HyperSpec/Body/m_defpar.htm
+ - match: (?i:defparameter|defvar){{break}}
+ scope: meta.declaration.lisp keyword.declaration.variable.lisp
+ set: variable-declaration-name
+
+ variable-declaration-list:
+ - meta_include_prototype: false
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ set: variable-declaration-list-body
+ - include: comments
+ - include: else-pop
+
+ variable-declaration-list-body:
+ - meta_scope: meta.parens.lisp
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push:
+ - paren-body
+ - variable-declaration-name
+ - match: '{{identifier}}'
+ scope: meta.declaration.lisp variable.other.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ - include: comments
+ - include: paren-end
+
+ constant-declaration-name:
+ - meta_content_scope: meta.declaration.lisp
+ - match: '{{identifier}}'
+ scope: meta.declaration.lisp constant.other.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ variable-declaration-name:
+ - meta_content_scope: meta.declaration.lisp
+ - match: '{{identifier}}'
+ scope: meta.declaration.lisp variable.other.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+###[ OTHER DECLARATIONS ]######################################################
+
+ other-declaration:
+ - match: '{{declaration_keywords}}'
+ scope: keyword.declaration.lisp
+ pop: 1
+
+###[ DECLARE STATEMENTS ]######################################################
+
+ declare:
+ # https://www.lispworks.com/documentation/HyperSpec/Body/s_declar.htm
+ - match: (?i:declare){{break}}
+ scope: keyword.declaration.declare.lisp
+ set: declare-specifier-list
+
+ declare-specifier-list:
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
+ push:
+ - paren-body
+ - declare-identifier
+ - include: comments
+ - include: else-pop
+
+ declare-identifier:
+ - match: '{{declaration_identifiers}}'
+ scope: storage.modifier.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+###[ CONTROL FLOW STATEMENTS ]#################################################
control:
- - match: \b(?i:with|while|when|unless|typecase|to|thereis|then|return-from name|return|repeat|prog*|prog|never|named|maplist|mapl|mapcon|mapcar|mapcan|mapc|loop|let|initially|if|from|for|finally|etypecase|else|dotimes|dolist|doing|do*|do|ctypecase|cond|case|block|as|always)\b
+ # Conditional
+ - match: (?i:if|case|cond|otherwise|unless|when|[ce]?typecase){{break}}
+ scope: keyword.control.conditional.lisp
+ pop: 1
+ # Flow
+ - match: (?i:return(?:-from)?){{break}}
+ scope: keyword.control.flow.return.lisp
+ pop: 1
+ # Loop
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dolist.htm
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_dotime.htm
+ - match: (?i:dolist|dotimes){{break}}
+ scope: keyword.control.loop.lisp
+ set: expect-list
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_do_do.htm
+ - match: (?i:do\*?|do-(?:all-|external-)?symbols|iterate){{break}}
+ scope: keyword.control.loop.lisp
+ set: expect-lists-list
+ # Other
+ - match: (?xi:block|map(?:can|car|con|c|list|l)){{break}}
scope: keyword.control.lisp
+ pop: 1
+
+###[ LOOP STATEMENTS ]#########################################################
+
+ loop:
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/06_a.htm
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/m_loop.htm
+ - match: (?i:loop){{break}}
+ scope: keyword.control.loop.lisp
+ set: loop-body
+
+ loop-body:
+ - meta_scope: meta.loop.lisp
+ - include: paren-pop
+
+ # declaration keywords
+ - match: (?i:named){{break}}
+ scope: keyword.declaration.name.lisp
+ push: loop-name
+ - match: (?i:with){{break}}
+ scope: keyword.declaration.variable.lisp
+
+ # loop termination test keywords
+ - match: (?i:always|as|do|doing|for|never|repeat|thereis|until|while){{break}}
+ scope: keyword.control.loop.lisp
+ # conditional keywords
+ - match: (?i:end|else|if|then|unless|when){{break}}
+ scope: keyword.control.conditional.lisp
+ # control flow keywords
+ - match: (?i:finally|initially){{break}}
+ scope: keyword.control.flow.lisp
+ - match: (?i:return(?:-from)?){{break}}
+ scope: keyword.control.flow.return.lisp
+
+ # operator keywords
+ - match: ={{break}} # can be both, assignment and comparison
+ scope: keyword.operator.lisp
+ - match: (?i:into){{break}}
+ scope: keyword.operator.assignment.lisp
+ - match: (?i:and){{break}}
+ scope: keyword.operator.logical.lisp
+ - match: |-
+ (?xi: across | above | being | below | by | each | in | of | on | the
+ | (?:down|up)?to | (?:up)?from | using ){{break}}
+ scope: keyword.other.loop.lisp
- functions:
- - match: \b(?i:(defun|defmethod|defmacro))\b\s+([\w\-!?<>]*)
- scope: meta.function.lisp
+ # expressions
+ - include: comments
+ - include: parens
+ - include: numbers
+ - include: strings
+ - include: annotations
+ - include: keywords
+ - include: quotes
+ - include: macros
+ - include: modifiers
+ - match: (?={{identifier}})
+ push: loop-identifier
+
+ loop-identifier:
+ - include: builtin-function
+ - include: identifier
+
+ loop-name:
+ - match: '{{identifier}}'
+ scope: entity.name.loop.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+###[ QUOTE STATEMENTS ]########################################################
+
+ quote:
+ - match: (?i:quote){{break}}
+ scope: meta.function-call.lisp support.function.lisp
+ set: quote-args
+
+ quote-args:
+ - include: paren-pop
+ - include: quoted-parens
+ - include: expressions
+
+###[ FUNCTIONS ]###############################################################
+
+ builtin-function:
+ - match: '{{builtin_functions}}'
+ scope: meta.function-call.lisp support.function.lisp
+ pop: 1
+
+ other-function:
+ # functions starting with `make-` are most likely used as constructors
+ - match: make-{{identifier}}
+ scope: meta.function-call.lisp variable.function.constructor.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ # mutating functions changing data in-place end with !
+ - match: (?![+*#`'&]\S){{identifier}}\!{{break}}
+ scope: meta.function-call.lisp variable.function.mutating.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ # predicate functions returning boolean values end with ? or -p
+ - match: (?![+*#`'&]\S){{identifier}}(?:\?|-p){{break}}
+ scope: meta.function-call.lisp variable.function.predicate.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ # anything not looking like global variable, constant or macro
+ - match: (?![+*#`'&]\S|{{builtin_constants}}|{{builtin_types}}){{identifier}}
+ scope: meta.function-call.lisp variable.function.lisp
captures:
- 1: keyword.declaration.function.lisp
- 2: entity.name.function.lisp
- - match: \b(?i:zerop|yes-or-no-p|y-or-n-p|write-to-string|write-string|write-char|write-byte|write|with-standard-io-syntax|with-slots|with-simple-restart|with-package-iterator|with-output-to-string|with-open-stream|with-open-file|with-input-from-string|with-hash-table-iterator|with-condition-restarts|with-compilation-unit|with-accessors|wild-pathname-p|warn|vectorp|vector-push-extend|vector-push|vector-pop|vector|variable-information|values-list|values|user-homedir-pathname|use-value|use-package|upper-case-p|upgraded-complex-part-type|upgraded-array-element-type|update-instance-for-redefined-class|update-instance-for-different-class|unuse-package|untrace|until-if|until|unread-char|union|unintern|unexport|typep|type-of|type-error-expected-type|type-error-datum|two-way-stream-output-stream|two-way-stream-input-stream|truncate|truename|tree-equal|translate-pathname|translate-logical-pathname|trace|to-alter|time|third|terpri|terminate-producing|tenth|tanh|tan|tailp|synonym-stream-symbol|symbolp|symbol-value|symbol-plist|symbol-package|symbol-name|symbol-function|sxhash|svref|summing|sum|subtypep|substitute-if-not|substitute-if|substitute|subst-if-not|subst-if|subst|subsetp|subseries|subseq|sublis|stringp|string>=|string>|string=|string<=|string<|string/=|string-upcase|string-trim|string-right-trim|string-not-lessp|string-not-greaterp|string-not-equal|string-lessp|string-left-trim|string-greaterp|string-equal|string-downcase|string-char-p|string-capitalize|string|streamp|stream-external-format|stream-error-stream|stream-element-type|store-value|step|standard-char-p|stable-sort|sqrt|split-if|split|special-form-p|sort|some|software-version|software-type|slot-value|slot-unbound|slot-missing|slot-makunbound|slot-exists-p|slot-boundp|sleep|sixth|sinh|sin|simple-vector-p|simple-string-p|simple-condition-format-string|simple-condition-format-arguments|simple-bit-vector-p|signum|signal|short-site-name|shiftf|shared-initialize|shadowing-import|shadow|seventh|setq|setf|set-syntax-from-char|set-pprint-dispatch|set-macro-character|set-exclusive-or|set-dispatch-macro-character|set-difference|set-char-bit|set|series|second|search|schar|scan-symbols|scan-sublists|scan-range|scan-plist|scan-multiple|scan-lists-of-lists-fringe|scan-lists-of-lists|scan-hash|scan-fn-inclusive|scan-fn|scan-file|scan-alist|scan|scale-float|sbit|rplacd|rplaca|row-major-aref|round|rotatef|room|reverse|revappend|result-of|restart-name|restart-case|restart-bind|rest|require|replace|rename-package|rename-file|remprop|remove-method|remove-duplicates|remove|remhash|remf|reinitialize-instance|reduce|realpart|realp|readtablep|readtable-case|read-preserving-whitespace|read-line|read-from-string|read-delimited-list|read-char-no-hang|read-char|read-byte|read|rationalp|rationalize|rational|rassoc-if-not|rassoc-if|rassoc|random-state-p|random|quote|pushnew|push|psetq|psetf|provide|progn|prog2|prog1|producing|proclaim|probe-file|print-unreadable-object|print-object|print|prin1|previous|pprint-tabular|pprint-tab|pprint-pop|pprint-newline|pprint-logical-block|pprint-linear|pprint-indent|pprint-fill|pprint-exit-if-list-exhausted|pprint-dispatch|positions|position-if-not|position-if|position|pop|plusp|phase|peek-char|pathnamep|pathname-version|pathname-type|pathname-name|pathname-match-p|pathname-host|pathname-directory|pathname-device|pathname|parse-namestring|parse-macro|parse-integer|pairlis|packagep|package-used-by-list|package-use-list|package-shadowing-symbols|package-nicknames|package-name|package-error-package|output-stream-p|open-stream-p|open|oddp|nunion|numerator|numberp|nthcdr|nth-value|nth|nsubstitute-if-not|nsubstitute-if|nsubstitute|nsubst-if-not|nsubst-if|nsubst|nsublis|nstring-upcase|nstring-downcase|nstring-capitalize|nset-exclusive-or|nset-difference|nreverse|nreconc|notevery|notany|no-next-method|no-applicable-method|ninth|nintersection|next-out|next-method-p|next-in|nconcing|nconc|nbutlast|namestring|name-char|multiple-value-setq|multiple-value-list|multiple-value-bind|muffle-warning|mismatch|minusp|minimizing|minimize|mingle|method-qualifiers|method-combination-error|merge-pathnames|merge|memberp|member-if-not|member-if|member|maximizing|maximize|mask-field|mask|mapping|maphash|map-into|map-fn|map|makunbound|make-two-way-stream|make-synonym-stream|make-symbol|make-string-output-stream|make-string-input-stream|make-string|make-sequence|make-random-state|make-pathname|make-package|make-load-form-saving-slots|make-load-form|make-list|make-instances-obsolete|make-instance|make-hash-table|make-echo-stream|make-dispatch-macro-character|make-condition|make-concatenated-stream|make-char|make-broadcast-stream|make-array|macroexpand-1|macroexpand|macro-function|machine-version|machine-type|machine-instance|lower-case-p|loop-finish|long-site-name|logtest|logorc2|logorc1|lognot|lognand|logical-pathname-translations|logical-pathname|logcount|logbitp|logandc2|logandc1|log|locally|load-logical-pathname-translations|load|listp|listen|list-length|list-all-packages|list*|list|lisp-implementation-version|lisp-implementation-type|length|ldiff|ldb-test|ldb|lcm|latch|last|lambda|keywordp|iterate|isqrt|invoke-restart|invoke-debugger|invalid-method-error|intersection|intern|interactive-stream-p|integerp|integer-length|integer-decode-float|int-char|inspect|input-stream-p|initialize-instance|in-package|import|imagpart|ignore-errors|identity|host-namestring|hash-table-test|hash-table-size|hash-table-rehash-threshold|hash-table-rehash-size|hash-table-p|hash-table-count|handler-case|handler-bind|graphic-char-p|gethash|getf|get-universal-time|get-setf-method-multiple-value|get-setf-method|get-properties|get-output-stream-string|get-internal-run-time|get-internal-real-time|get-decoded-time|get|gentemp|gensym|generic-function|generator|gcd|gathering|gatherer|functionp|function-lambda-expression|function-keywords|function-information|funcall|fourth|formatter|format|floor|floatp|float-sign|float-radix|float-precision|float-digits|float|first|finish-output|find-symbol|find-restart|find-package|find-method|find-if-not|find-if|find-class|find-all-symbols|find|fill-pointer|fill|file-write-date|file-string-length|file-position|file-namestring|file-length|file-error-pathname|file-author|fifth|ffloor|fdefinition|fboundp|f|expt|export|expand|exp|every|evenp|evalhook|eval|error|ensure-generic-function|enough-namestring|endp|encode-universal-time|enclose|encapsulated|elt|eighth|ed|echo-stream-output-stream|echo-stream-input-stream|ecase|dribble|dpb|documentation|do-symbols|do-external-symbols|do-all-symbols|disassemble|directory-namestring|directory|digit-char-p|digit-char|destructuring-bind|describe-object|describe|deposit-field|denominator|delete-package|delete-if-not|delete-if|delete-file|delete-duplicates|delete|defvar|deftype|defstruct|defpackage|define-setf-method|define-modify-macro|define-method-combination|define-declaration|define-condition|define-compiler-macro|defgeneric|defclass|decode-universal-time|decode-float|declaration-information|declaim|counting|count-if-not|count-if|count|cotruncate|cosh|cos|copy-tree|copy-symbol|copy-seq|copy-readtable|copy-pprint-dispatch|copy-list|copy-alist|continue|constantp|consp|cons|conjugate|concatenated-stream-streams|concatenate|compute-restarts|compute-applicable-methods|complexp|complex|complement|compiler-macroexpand-1|compiler-macroexpand|compiler-macro-function|compiler-let|compiled-function-p|compile-file-pathname|compile-file|compile|commonp|collecting-fn|collecting|collect-sum|collect-plist|collect-or|collect-nth|collect-nconc|collect-min|collect-max|collect-length|collect-last|collect-hash|collect-fn|collect-first|collect-file|collect-append|collect-and|collect-alist|collect|coerce|code-char|clrhash|close|clear-input|class-of|class-name|cis|chunk|choose-if|choose|check-type|characterp|character|char>=|char>|char=|char<=|char<|char/=|char-upcase|char-not-lessp|char-not-greaterp|char-not-equal|char-name|char-lessp|char-int|char-greaterp|char-font|char-equal|char-downcase|char-code|char-bits|char-bit|char|change-class|cerror|cell-error-name|ceiling|cdr|cddr|cdddr|cddddr|cdddar|cddar|cddadr|cddaar|cdar|cdadr|cdaddr|cdadar|cdaar|cdaadr|cdaaar|ccase|catenate|car|call-next-method|call-method|cadr|caddr|cadddr|caddar|cadar|cadadr|cadaar|caar|caadr|caaddr|caadar|caaar|caaadr|caaaar|byte-size|byte-position|byte|butlast|broadcast-stream-streams|break|boundp|both-case-p|boole|bit-xor|bit-vector-p|bit-orc2|bit-orc1|bit-not|bit-nor|bit-nand|bit-ior|bit-eqv|bit-andc2|bit-andc1|bit-and|bit|augment-environment|atom|atanh|atan|assoc-if-not|assoc-if|assoc|assert|asinh|asin|ash|arrayp|array-total-size|array-row-major-index|array-rank|array-in-bounds-p|array-has-fill-pointer-p|array-element-type|array-dimensions|array-dimension|arithmetic-error-operation|arithmetic-error-operands|aref|apropos-list|apropos|applyhook|apply|appending|append|alter|alphanumericp|alpha-char-p|adjustable-array-p|adjust-array|adjoin|add-method|acosh|acos|acons|abs|abort)\b
- scope: support.function.lisp
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
- operators:
- - match: '\/\=|\>\=|\<\=|\=|\>|\<|\b(?i:max|min|eq|neq|eql|equalp|equal)\b'
+###[ MACROS ]##################################################################
+
+ macros:
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node191.html
+ - include: macro-arrays
+ - include: macro-characters
+ - include: macro-conditionals
+ - include: macro-functions
+ - include: macro-numbers
+ - include: macro-pathnames
+ - include: macro-structures
+ - include: macro-throw-exceptions
+ - include: macro-variables
+ - include: macro-vectors
+
+ macro-conditionals:
+ # Feature-flags
+ - match: (#[-+])({{identifier}})?
+ captures:
+ 1: keyword.control.conditional.lisp
+ 2: constant.other.feature.lisp
+ 3: punctuation.definition.symbol.begin.lisp
+ 4: punctuation.definition.symbol.end.lisp
+
+ macro-arrays:
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node29.html
+ - match: (#\d*[aA])(\()
+ captures:
+ 1: punctuation.definition.array.lisp
+ 2: meta.parens.lisp punctuation.section.parens.begin.lisp
+ push: macro-array-body
+ - match: (#\d*[aA])({{identifier}})
+ captures:
+ 1: punctuation.definition.array.lisp
+ 2: variable.other.lisp
+ 3: punctuation.definition.symbol.begin.lisp
+ 4: punctuation.definition.symbol.end.lisp
+
+ macro-array-body:
+ - meta_scope: meta.array.lisp
+ - meta_content_scope: meta.parens.lisp
+ - match: \)
+ scope: meta.parens.lisp punctuation.section.parens.end.lisp
+ pop: 1
+ - include: parens
+ - include: expressions
+
+ macro-characters:
+ # Standard Characters
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node22.html
+ # Non-Standard Characters
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node24.html
+ # Character Attributes
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node25.html
+ - match: (#(\d*)\\){{char_attributes}}?(?i:Space|NewLine){{break}}
+ scope: constant.character.standard.lisp
+ captures:
+ 1: punctuation.definition.constant.lisp
+ 2: storage.modifier.attributes.lisp
+ - match: (#(\d*)\\){{char_attributes}}?(?i:Backspace|Tab|Linefeed|Page|Return|RubOut){{break}}
+ scope: constant.character.semi-standard.lisp
+ captures:
+ 1: punctuation.definition.constant.lisp
+ 2: storage.modifier.attributes.lisp
+ - match: (#(\d*)\\){{char_attributes}}?{{standard_char}}{{break}}
+ scope: constant.character.standard.lisp
+ captures:
+ 1: punctuation.definition.constant.lisp
+ 2: storage.modifier.attributes.lisp
+ - match: (#(\d*)\\){{char_attributes}}?{{identifier_char}}+{{break}}
+ scope: constant.character.non-standard.lisp
+ captures:
+ 1: punctuation.definition.constant.lisp
+ 2: storage.modifier.attributes.lisp
+
+ macro-functions:
+ # Function reference
+ - match: \#[Mm']
+ scope: punctuation.definition.function.lisp
+ push: macro-function-name
+
+ macro-function-name:
+ - include: namespaces
+ - include: operator
+ - include: builtin-function
+ - include: other-function
+ - include: immediately-pop
+
+ macro-numbers:
+ # binary rational numbers
+ - match: |-
+ (?xi)
+ ( \#(?: b | 2r ) )
+ ( [-+]? )
+ ( [01]+ (/) [01]+ )
+ {{break}}
+ scope: meta.number.rational.binary.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: keyword.operator.arithmetic.lisp
+ # binary integer numbers
+ - match: |-
+ (?xi)
+ ( \#(?: b | 2r ) )
+ ( [-+]? )
+ ( [01]+ (?: (\.)(?![01]) | {{break}} ) )
+ scope: meta.number.integer.binary.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: punctuation.separator.decimal.lisp
+ # octal rational numbers
+ - match: |-
+ (?xi)
+ ( \#(?: o | 8r ) )
+ ( [-+]? )
+ ( [0-7]+ (/) [0-7]+ )
+ {{break}}
+ scope: meta.number.rational.octal.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: keyword.operator.arithmetic.lisp
+ # octal integer numbers
+ - match: |-
+ (?xi)
+ ( \#(?: o | 8r ) )
+ ( [-+]? )
+ ( [0-7]+ (?: (\.)(?![0-7]) | {{break}} ) )
+ scope: meta.number.integer.octal.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: punctuation.separator.decimal.lisp
+ # hexadecimal rational numbers
+ - match: |-
+ (?xi)
+ ( \#(?: x | 16r ) )
+ ( [-+]? )
+ ( \h+ (/) \h+ )
+ {{break}}
+ scope: meta.number.rational.hexadecimal.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: keyword.operator.arithmetic.lisp
+ # hexadecimal integer numbers
+ - match: |-
+ (?xi)
+ ( \#(?: x | 16r ) )
+ ( [-+]? )
+ ( \h+ (?: (\.)(?!\h) | {{break}} ) )
+ scope: meta.number.integer.hexadecimal.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: punctuation.separator.decimal.lisp
+ # radix rational numbers
+ - match: |-
+ (?xi)
+ ( \#\d+r )
+ ( [-+]? )
+ ( [[:alnum:]]+ (/) [[:alnum:]]+ )
+ {{break}}
+ scope: meta.number.rational.other.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: keyword.operator.arithmetic.lisp
+ # radix integer numbers
+ - match: |-
+ (?xi)
+ ( \#\d+r )
+ ( [-+]? )
+ ( [[:alnum:]]+ (?: (\.)(?![[:alnum:]]) | {{break}} ) )
+ scope: meta.number.integer.other.lisp
+ captures:
+ 1: constant.numeric.base.lisp
+ 2: keyword.operator.arithmetic.lisp
+ 3: constant.numeric.value.lisp
+ 4: punctuation.separator.decimal.lisp
+ # complex numbers
+ - match: (#[cC])(\()
+ captures:
+ 1: punctuation.definition.complex.lisp
+ 2: meta.parens.lisp punctuation.section.parens.begin.lisp
+ push: macro-numbers-complex-body
+
+ macro-numbers-complex-body:
+ - meta_scope: meta.number.complex.lisp
+ - meta_content_scope: meta.parens.lisp
+ - match: \)
+ scope: meta.parens.lisp punctuation.section.parens.end.lisp
+ pop: 1
+ - include: parens
+ - include: expressions
+
+ macro-pathnames:
+ - match: (#\d*[pP])(\")
+ captures:
+ 1: punctuation.definition.pathname.lisp
+ 2: string.quoted.double.lisp punctuation.definition.string.begin.lisp
+ push: macro-pathname-body
+
+ macro-pathname-body:
+ - meta_scope: meta.path.lisp
+ - meta_content_scope: string.quoted.double.lisp
+ - match: \"
+ scope: string.quoted.double.lisp punctuation.definition.string.end.lisp
+ pop: 1
+ - match: \\.
+ scope: constant.character.escape.lisp
+
+ macro-structures:
+ # Structures
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node39.html
+ - match: (#\d*[sS])(\()
+ captures:
+ 1: punctuation.definition.struct.lisp
+ 2: meta.parens.lisp punctuation.section.parens.begin.lisp
+ push:
+ - macro-struct-body
+ - macro-struct-name
+
+ macro-struct-name:
+ - match: '{{identifier}}'
+ scope: entity.name.struct.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: else-pop
+
+ macro-struct-body:
+ - meta_scope: meta.struct.lisp
+ - meta_content_scope: meta.parens.lisp
+ - match: \)
+ scope: meta.parens.lisp punctuation.section.parens.end.lisp
+ pop: 1
+ - include: lists
+ - include: expressions
+
+ macro-vectors:
+ # Vector
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node30.html
+ - match: (#\d*)(\()
+ captures:
+ 1: punctuation.definition.vector.lisp
+ 2: meta.parens.lisp punctuation.section.parens.begin.lisp
+ push: macro-vector-body
+ # Bit vector
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node32.html
+ - match: (#\d*\*)([01]*){{break}}
+ scope: meta.vector.lisp
+ captures:
+ 1: punctuation.definition.vector.lisp
+ 2: meta.number.integer.binary constant.numeric.value.lisp
+
+ macro-vector-body:
+ - meta_scope: meta.vector.lisp
+ - meta_content_scope: meta.parens.lisp
+ - match: \)
+ scope: meta.parens.lisp punctuation.section.parens.end.lisp
+ pop: 1
+ - include: parens
+ - include: expressions
+
+ macro-throw-exceptions:
+ - match: '#[ \t\n\r)<]'
+ scope: keyword.control.exception.throw.lisp
+
+ macro-variables:
+ # Inline runtime/loadtime eval
+ - match: \#[.,:]
+ scope: punctuation.definition.variable.lisp
+ # Local assignment
+ - match: ((#)\d+)\s*(=)
+ captures:
+ 1: variable.other.local.lisp
+ 2: punctuation.definition.variable.lisp
+ 3: keyword.operator.assignment.lisp
+ - match: (#)(\d+)(#)
+ scope: variable.other.lisp
+ captures:
+ 1: punctuation.definition.variable.begin.lisp
+ 2: variable.other.local.lisp
+ 3: punctuation.definition.variable.end.lisp
+
+###[ OPERATORS ]###############################################################
+
+ modifiers:
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_df.htm
+ - match: '[`'']'
+ scope: punctuation.definition.quoted.lisp
+ - match: ',@?'
+ scope: punctuation.definition.variable.lisp
+
+ operator:
+ # Contains 'Standardized Compound Type Specifier Names'
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm
+ - match: (?:(?:/=|>=|<=|=|>|<)|(?i:max|min|eq|neq|eql|equalp|equal)){{break}}
scope: keyword.operator.comparison.lisp
- - match: '\+|\-|\*|\/|\b(?i:mod|rem|incf|decf)\b'
+ pop: 1
+ - match: ={{break}}
+ scope: keyword.operator.assignment.lisp
+ pop: 1
+ - match: (?:[-+*/]|(?i:mod|rem|incf|decf)){{break}}
scope: keyword.operator.arithmetic.lisp
- - match: \b(?i:and|or|not)\b
+ pop: 1
+ - match: (?i:and|or|not|satisfies){{break}}
scope: keyword.operator.logical.lisp
- - match: \b(?i:logand|logior|logxor|lognor|logeqv)\b
+ pop: 1
+ - match: (?i:logand|logior|logxor|lognor|logeqv){{break}}
scope: keyword.operator.bitwise.lisp
+ pop: 1
- parens:
- - match: '\('
- scope: punctuation.definition.group.begin.lisp
- push:
- - meta_scope: meta.group.lisp
- - match: '\)'
- scope: punctuation.definition.group.end.lisp
- pop: true
- - include: expressions
- - include: parens
- - match: '\)'
- scope: invalid.illegal.stray-bracket-end.lisp
-
- constants:
- - match: \b(?i:null|t|single-float-negative-epsilon|single-float-epsilon|short-float-negative-epsilon|short-float-epsilon|pi|nil|multiple-values-limit|most-positive-single-float|most-positive-short-float|most-positive-long-float|most-positive-fixnum|most-positive-double-float|most-negative-single-float|most-negative-short-float|most-negative-long-float|most-negative-fixnum|most-negative-double-float|long-float-negative-epsilon|long-float-epsilon|least-positive-single-float|least-positive-short-float|least-positive-normalized-single-float|least-positive-normalized-short-float|least-positive-normalized-long-float|least-positive-normalized-double-float|least-positive-long-float|least-positive-double-float|least-negative-single-float|least-negative-short-float|least-negative-normalized-single-float|least-negative-normalized-short-float|least-negative-normalized-long-float|least-negative-normalized-double-float|least-negative-long-float|least-negative-double-float|lambda-parameters-limit|lambda-list-keywords|internal-time-units-per-second|double-float-negative-epsilon|double-float-epsilon|char-super-bit|char-meta-bit|char-hyper-bit|char-font-limit|char-control-bit|char-code-limit|char-bits-limit|call-arguments-limit|array-total-size-limit|array-rank-limit|array-dimension-limit)\b
- scope: constant.language.lisp
- - match: '(#)(\w|[\\+-=<>''"])+'
- scope: constant.character.lisp
- captures:
- 1: punctuation.definition.constant.lisp
+###[ LITERALS ]################################################################
numbers:
- - match: '\b((0(x|X)\h*)|(([0-9]+\.?[0-9]*)|(\.[0-9]+))((e|E)(\+|-)?[0-9]+)?)(?i:l|ul|u|f|ll|ull)?\b'
- scope: constant.numeric.lisp
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node16.html
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/02_ca.htm
+ # decimal floating point
+ - match: |-
+ (?x)
+ ( [-+]? )
+ ( \d* (?: (\.) \d+ ) {{exponent}}?
+ | \d+ (?: (\.) \d* )? {{exponent}})
+ {{break}}
+ scope: meta.number.float.decimal.lisp
+ captures:
+ 1: keyword.operator.arithmetic.lisp
+ 2: constant.numeric.value.lisp
+ 3: punctuation.separator.decimal.lisp
+ 4: punctuation.separator.decimal.lisp
+ # decimal rational numbers
+ - match: |-
+ (?x)
+ ( [-+]? )
+ ( \d+ (/) \d+ )
+ {{break}}
+ scope: meta.number.rational.decimal.lisp
+ captures:
+ 1: keyword.operator.arithmetic.lisp
+ 2: constant.numeric.value.lisp
+ 3: keyword.operator.arithmetic.lisp
+ # decimal integer numbers
+ - match: |-
+ (?x)
+ ( [-+]? )
+ ( \d+ (?: (\.)(?!\d) | {{break}} ) )
+ scope: meta.number.integer.decimal.lisp
+ captures:
+ 1: keyword.operator.arithmetic.lisp
+ 2: constant.numeric.value.lisp
+ 3: punctuation.separator.decimal.lisp
strings:
- - match: '"'
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node31.html
+ - match: \"
scope: punctuation.definition.string.begin.lisp
+ push: string-body
+
+ string-body:
+ - meta_include_prototype: false
+ - meta_scope: meta.string.lisp string.quoted.double.lisp
+ - match: \"
+ scope: punctuation.definition.string.end.lisp
+ pop: 1
+ - match: \\.
+ scope: constant.character.escape.lisp
+ - include: string-format-mini-language
+
+ string-format-mini-language:
+ # https://www.hexstreamsoft.com/articles/common-lisp-format-reference/clhs-summary/#subsections-summary-table
+ - match: (~)(\d*)[%&|~]
+ scope: constant.character.escape.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ # 2: constant.numeric.integer.decimal.lisp
+ - match: (~):?@?[CR]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ # ~R
+ - match: |-
+ (?x:
+ (~)
+ (?:(\d*) # Radix
+ (?:(,)\d* # mincol
+ (?:(,)(?:'.)? # padchar
+ (?:(,)(?:'.)? # comma-char
+ (?:(,)\d*)? # comma-interval
+ )?)?)?)
+ ):?@?[rR]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.definition.numeric.base.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+ 5: punctuation.separator.sequence.lisp
+ 6: punctuation.separator.sequence.lisp
+ # ~b, ~o, ~d, ~x
+ - match: |-
+ (?x:
+ (~)
+ (?:\d* # mincol
+ (?:(,)(?:'.)? # padchar
+ (?:(,)(?:'.)? # comma-char
+ (?:(,)\d*)? # comma-interval
+ )?)?)?
+ ):?@?[bBoOdDxX]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.separator.sequence.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+ # ~f
+ - match: |-
+ (?x:
+ (~)
+ (?:\d* # width
+ (?:(,)\d* # decimals
+ (?:(,)\d* # scale
+ (?:(,)(?:'.)? # overflowchar
+ (?:(,)(?:'.)? # padchar
+ )?)?)?)?)?
+ )@?[fF]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.separator.sequence.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+ 5: punctuation.separator.sequence.lisp
+ # ~e, ~g
+ - match: |-
+ (?x:
+ (~)
+ (?:\d* # width
+ (?:(,)\d* # decimals
+ (?:(,)\d* # exponent-width
+ (?:(,)\d* # scale
+ (?:(,)(?:'.)? # overflowchar
+ (?:(,)(?:'.)? # padchar
+ (?:(,)(?:'.)? # exponentchar
+ )?)?)?)?)?)?)?
+ )@?[eEgG]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.separator.sequence.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+ 5: punctuation.separator.sequence.lisp
+ 6: punctuation.separator.sequence.lisp
+ 7: punctuation.separator.sequence.lisp
+ # ~$
+ - match: |-
+ (?x:
+ (~)
+ (?:\d* # decimals
+ (?:(,)\d* # min-units
+ (?:(,)\d* # min-width
+ (?:(,)(?:'.)? # padchar
+ )?)?)?)?
+ ):?@?\$
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.separator.sequence.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+ # ~a, ~s
+ - match: |-
+ (?x:
+ (~)
+ (?:\d* # min-col
+ (?:(,)\d* # col-inc
+ (?:(,)\d* # min-pad
+ (?:(,)(?:'.)? # padchar
+ )?)?)?)?
+ ):?@?[aAsS]
+ scope: constant.other.placeholder.lisp
+ captures:
+ 1: punctuation.definition.placeholder.lisp
+ 2: punctuation.separator.sequence.lisp
+ 3: punctuation.separator.sequence.lisp
+ 4: punctuation.separator.sequence.lisp
+
+###[ SYMBOLS ]#################################################################
+
+ annotations:
+ - match: (&){{identifier}}
+ scope: variable.annotation.lisp
+ captures:
+ 1: punctuation.definition.annotation.lisp
+ 2: punctuation.definition.symbol.begin.lisp
+ 3: punctuation.definition.symbol.end.lisp
+
+ keywords:
+ # The colon : is a package marker.
+ # If the package name is missing, the symbol is in the KEYWORD package.
+ - match: (::?)({{identifier}})
+ captures:
+ 1: punctuation.accessor.lisp
+ 2: keyword.other.symbol.lisp
+ 3: punctuation.definition.symbol.begin.lisp
+ 4: punctuation.definition.symbol.end.lisp
+ - match: \.{{break}}
+ scope: keyword.control.lisp
+
+ identifiers:
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html
+ # Pushing a dedicated context reduces syntax cache size
+ # and increases parsing performance, significantly.
+ - match: (?={{identifier}})
+ push: identifier
+
+ identifier:
+ - include: namespaces
+ # types
+ - match: '{{builtin_types}}'
+ scope: storage.type.lisp
+ pop: 1
+ # constants
+ - match: (?i:true|false){{break}}
+ scope: constant.language.boolean.lisp
+ pop: 1
+ - match: (?i:nil|null){{break}}
+ scope: constant.language.null.lisp
+ pop: 1
+ - match: '{{builtin_constants}}'
+ scope: constant.language.lisp
+ pop: 1
+ - match: \+\S+\+{{break}}
+ scope: constant.other.lisp
+ pop: 1
+ # variables
+ - match: '{{builtin_variables}}'
+ scope: variable.language.lisp
+ pop: 1
+ - match: '{{identifier}}'
+ scope: variable.other.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: immediately-pop
+
+ parameters:
+ # parameter with initial value
+ - match: \(
+ scope: punctuation.section.parens.begin.lisp
push:
- - meta_scope: string.quoted.double.lisp
- - match: '"'
- scope: punctuation.definition.string.end.lisp
- pop: true
- - match: \\.
- scope: constant.character.escape.lisp
-
- block-comment:
- - match: '#\|'
- scope: punctuation.definition.comment.begin.lisp
- push:
- - meta_scope: comment.block.lisp
- - include: block-comment
- - match: '\|#'
- scope: punctuation.definition.comment.end.lisp
- pop: true
+ - paren-body
+ - parameter-name
+ # parameter without initial value
+ - match: '{{identifier}}'
+ scope: variable.parameter.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
- comments:
- - include: block-comment
- - match: '\|#'
- scope: invalid.illegal.stray-comment-end.lisp
- - match: (;).*$\n?
- scope: comment.line.semicolon.lisp
+ parameter-name:
+ - include: annotations
+ - include: keywords
+ - include: modifiers
+ - match: '{{identifier}}'
+ scope: variable.parameter.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ pop: 1
+ - include: comments
+ - include: else-pop
+
+ namespaces:
+ # built-in namespace indicating keyword symbols
+ # note: accessor is consumed by `keywords` context
+ - match: (\|?)keyword(\|?)(?=:)
+ scope: variable.namespace.lisp
+ captures:
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+ # normal namespaces but not an escaped char #\:
+ - match: ((?!#\\?){{identifier}})(::?)
+ captures:
+ 1: variable.namespace.lisp
+ 2: punctuation.definition.symbol.begin.lisp
+ 3: punctuation.definition.symbol.end.lisp
+ 4: punctuation.accessor.lisp
+
+ variables:
+ # Symbols evaluate to their values
+ # https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node27.html
+ - match: '{{identifier}}'
+ scope: variable.other.lisp
captures:
- 1: punctuation.definition.comment.lisp
+ 1: punctuation.definition.symbol.begin.lisp
+ 2: punctuation.definition.symbol.end.lisp
+
+###[ PROTOTYPES ]##############################################################
+
+ else-pop:
+ - match: (?=\S)
+ pop: 1
+
+ immediately-pop:
+ - match: ''
+ pop: 1
+
+ paren-pop:
+ - match: (?=\))
+ pop: 1
+
+###############################################################################
+
+variables:
+
+ # variables / keyword-symbols
+ identifier: (?:{{identifier_char}}*{{identifier_must_have}}{{identifier_char}}*|{{quoted_identifier}})
+ identifier_char: (?:\\.|[^{{break_char}}])
+ identifier_must_have: (?:\\.|[^\d.{{break_char}}]) # May not be only digits or periods
+ quoted_identifier: (\|)(?:\\.|[^|])*(\|)
+
+ break: (?={{break_char}}|$)
+ break_char: '[\s()"'',:;|]'
+
+ # caracters
+ standard_char: '[0-9A-Za-z!"#$%&''()*+,\-./:;<=>?@\\\[\]^_`{|}~]'
+ char_attributes: (?:(?:[[:alnum:]_]+-)+\\?)
+
+ # numbers
+ exponent: (?:[esfdlESFDL][-+]?\d+)
+
+ declaration_keywords: |-
+ (?xi:
+ declaim
+ | define-(?: compiler-macro | condition | declaration | method-combination | modify-macro | setf-method )
+ | def(?: class | constant | generic | macro | method | package | parameter | setf | struct | type | un | var )
+ | generic-(?: flet | function | labels )
+ | flet
+ | labels
+ | let\*?
+ | locally
+ | macrolet
+ | multiple-value-bind
+ | proclaim
+ | prog\*?
+ | with-(?: accessors | added-methods | condition-restarts | input-from-string | open-file | open-stream | output-to-string | standard-io-syntax )
+ ){{break}}
+
+ declaration_identifiers: |-
+ (?xi:
+ dynamic-extent
+ | ftype
+ | ignorable
+ | ignore
+ | inline
+ | notinline
+ | optimize
+ | special
+ | type
+ ){{break}}
+
+ builtin_constants: |-
+ (?xi:
+ t | true | false | null | nil | pi
+ | array-(?: rank | dimension | total-size )-limit
+ | call-arguments-limit
+ | char-(?: (?: super | hyper | meta | control )-bit | (?: font | code | bits )-limit )
+ | internal-time-units-per-second
+ | lambda-(?: parameters-limit | list-keywords )
+ | least-(?: positive | negative )-normalized-(?: single | short | long | double )-float
+ | most-(?: positive | negative )-fixnum
+ | (?: most | least )-(?: positive | negative )-(?: single | short | long | double )-float
+ | multiple-values-limit
+ | (?: single | short | long | double )-float-(?: negative- )?epsilon
+ ){{break}}
+
+ builtin_functions: |-
+ (?xi:
+ abort
+ | abs
+ | acons
+ | acos
+ | acosh
+ | add-method
+ | adjoin
+ | adjust-array
+ | adjustable-array-p
+ | alpha-char-p
+ | alphanumericp
+ | alter
+ | append
+ | appending
+ | apply
+ | applyhook
+ | apropos
+ | apropos-list
+ | aref
+ | arithmetic-error-operands
+ | arithmetic-error-operation
+ | array-dimension
+ | array-dimensions
+ | array-element-type
+ | array-has-fill-pointer-p
+ | array-in-bounds-p
+ | array-rank
+ | array-row-major-index
+ | array-total-size
+ | arrayp
+ | ash
+ | asin
+ | asinh
+ | assert
+ | assoc
+ | assoc-if
+ | assoc-if-not
+ | atan
+ | atanh
+ | atom
+ | augment-environment
+ | bit
+ | bit-and
+ | bit-andc1
+ | bit-andc2
+ | bit-eqv
+ | bit-ior
+ | bit-nand
+ | bit-nor
+ | bit-not
+ | bit-orc1
+ | bit-orc2
+ | bit-vector-p
+ | bit-xor
+ | boole
+ | both-case-p
+ | boundp
+ | break
+ | broadcast-stream-streams
+ | butlast
+ | byte
+ | byte-position
+ | byte-size
+ | caaaar
+ | caaadr
+ | caaar
+ | caadar
+ | caaddr
+ | caadr
+ | caar
+ | cadaar
+ | cadadr
+ | cadar
+ | caddar
+ | cadddr
+ | caddr
+ | cadr
+ | call-method
+ | call-next-method
+ | car
+ | catenate
+ | ccase
+ | cdaaar
+ | cdaadr
+ | cdaar
+ | cdadar
+ | cdaddr
+ | cdadr
+ | cdar
+ | cddaar
+ | cddadr
+ | cddar
+ | cdddar
+ | cddddr
+ | cdddr
+ | cddr
+ | cdr
+ | ceiling
+ | cell-error-name
+ | cerror
+ | change-class
+ | char
+ | char-bit
+ | char-bits
+ | char-code
+ | char-downcase
+ | char-equal
+ | char-font
+ | char-greaterp
+ | char-int
+ | char-lessp
+ | char-name
+ | char-not-equal
+ | char-not-greaterp
+ | char-not-lessp
+ | char-upcase
+ | char/=
+ | char<
+ | char<=
+ | char=
+ | char>
+ | char>=
+ | character
+ | characterp
+ | check-type
+ | choose
+ | choose-if
+ | chunk
+ | cis
+ | class-name
+ | class-of
+ | clear-input
+ | close
+ | clrhash
+ | code-char
+ | coerce
+ | collect
+ | collect-alist
+ | collect-and
+ | collect-append
+ | collect-file
+ | collect-first
+ | collect-fn
+ | collect-hash
+ | collect-last
+ | collect-length
+ | collect-max
+ | collect-min
+ | collect-nconc
+ | collect-nth
+ | collect-or
+ | collect-plist
+ | collect-sum
+ | collecting
+ | collecting-fn
+ | commonp
+ | compile
+ | compile-file
+ | compile-file-pathname
+ | compiled-function-p
+ | compiler-let
+ | compiler-macro-function
+ | compiler-macroexpand
+ | compiler-macroexpand-1
+ | complement
+ | complex
+ | complexp
+ | compute-applicable-methods
+ | compute-restarts
+ | concatenate
+ | concatenated-stream-streams
+ | conjugate
+ | cons
+ | consp
+ | constantp
+ | continue
+ | copy-alist
+ | copy-list
+ | copy-pprint-dispatch
+ | copy-readtable
+ | copy-seq
+ | copy-symbol
+ | copy-tree
+ | cos
+ | cosh
+ | cotruncate
+ | count
+ | count-if
+ | count-if-not
+ | counting
+ | declaim
+ | declaration-information
+ | decode-float
+ | decode-universal-time
+ | delete
+ | delete-duplicates
+ | delete-file
+ | delete-if
+ | delete-if-not
+ | delete-package
+ | denominator
+ | deposit-field
+ | describe
+ | describe-object
+ | destructuring-bind
+ | digit-char
+ | digit-char-p
+ | directory
+ | directory-namestring
+ | disassemble
+ | do-all-keyword-symbols
+ | do-external-keyword-symbols
+ | do-keyword-symbols
+ | documentation
+ | dolist
+ | dpb
+ | dribble
+ | ecase
+ | echo-stream-input-stream
+ | echo-stream-output-stream
+ | ed
+ | eighth
+ | elt
+ | encapsulated
+ | enclose
+ | encode-universal-time
+ | endp
+ | enough-namestring
+ | ensure-generic-function
+ | error
+ | eval
+ | evalhook
+ | evenp
+ | every
+ | exp
+ | expand
+ | export
+ | expt
+ | f
+ | fboundp
+ | fdefinition
+ | ffloor
+ | fifth
+ | file-author
+ | file-error-pathname
+ | file-length
+ | file-namestring
+ | file-position
+ | file-string-length
+ | file-write-date
+ | fill
+ | fill-pointer
+ | find
+ | find-all-keyword-symbols
+ | find-class
+ | find-if
+ | find-if-not
+ | find-method
+ | find-package
+ | find-restart
+ | find-symbol
+ | finish-output
+ | first
+ | float
+ | float-digits
+ | float-precision
+ | float-radix
+ | float-sign
+ | floatp
+ | floor
+ | format
+ | formatter
+ | fourth
+ | funcall
+ | function-information
+ | function-keywords
+ | function-lambda-expression
+ | functionp
+ | gatherer
+ | gathering
+ | gcd
+ | generator
+ | generic-function
+ | gensym
+ | gentemp
+ | get
+ | get-decoded-time
+ | get-internal-real-time
+ | get-internal-run-time
+ | get-output-stream-string
+ | get-properties
+ | get-setf-method
+ | get-setf-method-multiple-value
+ | get-universal-time
+ | getf
+ | gethash
+ | graphic-char-p
+ | handler-bind
+ | handler-case
+ | hash-table-count
+ | hash-table-p
+ | hash-table-rehash-size
+ | hash-table-rehash-threshold
+ | hash-table-size
+ | hash-table-test
+ | host-namestring
+ | identity
+ | ignore-errors
+ | imagpart
+ | import
+ | in-package
+ | initialize-instance
+ | input-stream-p
+ | inspect
+ | int-char
+ | integer-decode-float
+ | integer-length
+ | integerp
+ | interactive-stream-p
+ | intern
+ | intersection
+ | invalid-method-error
+ | invoke-debugger
+ | invoke-restart
+ | isqrt
+ | iterate
+ | keywordp
+ | last
+ | latch
+ | lcm
+ | ldb
+ | ldb-test
+ | ldiff
+ | length
+ | lisp-implementation-type
+ | lisp-implementation-version
+ | list
+ | list-all-packages
+ | list-length
+ | list\*
+ | listen
+ | listp
+ | load
+ | load-logical-pathname-translations
+ | locally
+ | log
+ | logandc1
+ | logandc2
+ | logbitp
+ | logcount
+ | logical-pathname
+ | logical-pathname-translations
+ | lognand
+ | lognot
+ | logorc1
+ | logorc2
+ | logtest
+ | long-site-name
+ | loop-finish
+ | lower-case-p
+ | machine-instance
+ | machine-type
+ | machine-version
+ | macro-function
+ | macroexpand
+ | macroexpand-1
+ | make-array
+ | make-broadcast-stream
+ | make-char
+ | make-concatenated-stream
+ | make-condition
+ | make-dispatch-macro-character
+ | make-echo-stream
+ | make-hash-table
+ | make-instance
+ | make-instances-obsolete
+ | make-list
+ | make-load-form
+ | make-load-form-saving-slots
+ | make-package
+ | make-pathname
+ | make-random-state
+ | make-sequence
+ | make-string
+ | make-string-input-stream
+ | make-string-output-stream
+ | make-symbol
+ | make-synonym-stream
+ | make-two-way-stream
+ | makunbound
+ | map
+ | map-fn
+ | map-into
+ | maphash
+ | mapping
+ | mask
+ | mask-field
+ | maximize
+ | maximizing
+ | member
+ | member-if
+ | member-if-not
+ | memberp
+ | merge
+ | merge-pathnames
+ | method-combination-error
+ | method-qualifiers
+ | mingle
+ | minimize
+ | minimizing
+ | minusp
+ | mismatch
+ | muffle-warning
+ | multiple-value-bind
+ | multiple-value-list
+ | multiple-value-setq
+ | name-char
+ | namestring
+ | nbutlast
+ | nconc
+ | nconcing
+ | next-in
+ | next-method-p
+ | next-out
+ | nintersection
+ | ninth
+ | no-applicable-method
+ | no-next-method
+ | notany
+ | notevery
+ | nreconc
+ | nreverse
+ | nset-difference
+ | nset-exclusive-or
+ | nstring-capitalize
+ | nstring-downcase
+ | nstring-upcase
+ | nsublis
+ | nsubst
+ | nsubst-if
+ | nsubst-if-not
+ | nsubstitute
+ | nsubstitute-if
+ | nsubstitute-if-not
+ | nth
+ | nth-value
+ | nthcdr
+ | numberp
+ | numerator
+ | nunion
+ | oddp
+ | open
+ | open-stream-p
+ | output-stream-p
+ | package-error-package
+ | package-name
+ | package-nicknames
+ | package-shadowing-keyword-symbols
+ | package-use-list
+ | package-used-by-list
+ | packagep
+ | pairlis
+ | parse-integer
+ | parse-macro
+ | parse-namestring
+ | pathname
+ | pathname-device
+ | pathname-directory
+ | pathname-host
+ | pathname-match-p
+ | pathname-name
+ | pathname-type
+ | pathname-version
+ | pathnamep
+ | peek-char
+ | phase
+ | plusp
+ | pop
+ | position
+ | position-if
+ | position-if-not
+ | positions
+ | pprint-dispatch
+ | pprint-exit-if-list-exhausted
+ | pprint-fill
+ | pprint-indent
+ | pprint-linear
+ | pprint-logical-block
+ | pprint-newline
+ | pprint-pop
+ | pprint-tab
+ | pprint-tabular
+ | previous
+ | prin1
+ | print
+ | print-object
+ | print-unreadable-object
+ | probe-file
+ | producing
+ | prog1
+ | prog2
+ | progn
+ | provide
+ | psetf
+ | psetq
+ | push
+ | pushnew
+ | quote
+ | random
+ | random-state-p
+ | rassoc
+ | rassoc-if
+ | rassoc-if-not
+ | rational
+ | rationalize
+ | rationalp
+ | read
+ | read-byte
+ | read-char
+ | read-char-no-hang
+ | read-delimited-list
+ | read-from-string
+ | read-line
+ | read-preserving-whitespace
+ | readtable-case
+ | readtablep
+ | realp
+ | realpart
+ | reduce
+ | reinitialize-instance
+ | remf
+ | remhash
+ | remove
+ | remove-duplicates
+ | remove-method
+ | remprop
+ | rename-file
+ | rename-package
+ | replace
+ | require
+ | rest
+ | restart-bind
+ | restart-case
+ | restart-name
+ | result-of
+ | revappend
+ | reverse
+ | room
+ | rotatef
+ | round
+ | row-major-aref
+ | rplaca
+ | rplacd
+ | sbit
+ | scale-float
+ | scan
+ | scan-alist
+ | scan-file
+ | scan-fn
+ | scan-fn-inclusive
+ | scan-hash
+ | scan-lists-of-lists
+ | scan-lists-of-lists-fringe
+ | scan-multiple
+ | scan-plist
+ | scan-range
+ | scan-sublists
+ | scan-symbols
+ | schar
+ | search
+ | second
+ | series
+ | set
+ | set-char-bit
+ | set-difference
+ | set-dispatch-macro-character
+ | set-exclusive-or
+ | set-macro-character
+ | set-pprint-dispatch
+ | set-syntax-from-char
+ | setf
+ | setq
+ | seventh
+ | shadow
+ | shadowing-import
+ | shared-initialize
+ | shiftf
+ | short-site-name
+ | signal
+ | signum
+ | simple-bit-vector-p
+ | simple-condition-format-arguments
+ | simple-condition-format-string
+ | simple-string-p
+ | simple-vector-p
+ | sin
+ | sinh
+ | sixth
+ | sleep
+ | slot-boundp
+ | slot-exists-p
+ | slot-makunbound
+ | slot-missing
+ | slot-unbound
+ | slot-value
+ | software-type
+ | software-version
+ | some
+ | sort
+ | special-form-p
+ | split
+ | split-if
+ | sqrt
+ | stable-sort
+ | standard-char-p
+ | step
+ | store-value
+ | stream-element-type
+ | stream-error-stream
+ | stream-external-format
+ | streamp
+ | string
+ | string-capitalize
+ | string-downcase
+ | string-equal
+ | string-greaterp
+ | string-left-trim
+ | string-lessp
+ | string-not-equal
+ | string-not-greaterp
+ | string-not-lessp
+ | string-right-trim
+ | string-trim
+ | string-upcase
+ | string/=
+ | string<
+ | string<=
+ | string=
+ | string>
+ | string>=
+ | stringp
+ | sublis
+ | subseq
+ | subseries
+ | subsetp
+ | subst
+ | subst-if
+ | subst-if-not
+ | substitute
+ | substitute-if
+ | substitute-if-not
+ | subtypep
+ | sum
+ | summing
+ | svref
+ | sxhash
+ | symbol-function
+ | symbol-name
+ | symbol-package
+ | symbol-plist
+ | symbol-value
+ | symbolp
+ | synonym-stream-symbol
+ | tailp
+ | tan
+ | tanh
+ | tenth
+ | terminate-producing
+ | terpri
+ | third
+ | time
+ | to-alter
+ | trace
+ | translate-logical-pathname
+ | translate-pathname
+ | tree-equal
+ | truename
+ | truncate
+ | two-way-stream-input-stream
+ | two-way-stream-output-stream
+ | type-error-datum
+ | type-error-expected-type
+ | type-of
+ | typep
+ | unexport
+ | unintern
+ | union
+ | unread-char
+ | untrace
+ | unuse-package
+ | update-instance-for-different-class
+ | update-instance-for-redefined-class
+ | upgraded-array-element-type
+ | upgraded-complex-part-type
+ | upper-case-p
+ | use-package
+ | use-value
+ | user-homedir-pathname
+ | values
+ | values-list
+ | variable-information
+ | vector
+ | vector-pop
+ | vector-push
+ | vector-push-extend
+ | vectorp
+ | warn
+ | wild-pathname-p
+ | with-compilation-unit
+ | with-hash-table-iterator
+ | with-package-iterator
+ | with-simple-restart
+ | with-standard-io-syntax
+ | write
+ | write-byte
+ | write-char
+ | write-string
+ | write-to-string
+ | y-or-n-p
+ | yes-or-no-p
+ | zerop
+ ){{break}}
+
+ # Built-in atomic type specifiers
+ # https://www.lispworks.com/documentation/lw70/CLHS/Body/04_bc.htm
+ # Note: Some of them are scoped function when appearing as first list item.
+ builtin_types: |-
+ (?xi:
+ arithmetic-error
+ | array
+ | atom
+ | base-char
+ | base-string
+ | bignum
+ | bit
+ | bit-vector
+ | broadcast-stream
+ | built-in-class
+ | cell-error
+ | character
+ | class
+ | compiled-function
+ | complex
+ | concatenated-stream
+ | condition
+ | cons
+ | control-error
+ | division-by-zero
+ | double-float
+ | echo-stream
+ | end-of-file
+ | error
+ | extended-char
+ | file-error
+ | file-stream
+ | fixnum
+ | float
+ | floating-point-inexact
+ | floating-point-invalid-operation
+ | floating-point-overflow
+ | floating-point-underflow
+ | function
+ | generic-function
+ | hash-table
+ | integer
+ | keyword
+ | list
+ | logical-pathname
+ | long-float
+ | method
+ | method-combination
+ | number
+ | package
+ | package-error
+ | parse-error
+ | pathname
+ | print-not-readable
+ | program-error
+ | random-state
+ | ratio
+ | rational
+ | reader-error
+ | readtable
+ | real
+ | restart
+ | sequence
+ | serious-condition
+ | short-float
+ | signed-byte
+ | simple-array
+ | simple-base-string
+ | simple-bit-vector
+ | simple-condition
+ | simple-error
+ | simple-string
+ | simple-type-error
+ | simple-vector
+ | simple-warning
+ | single-float
+ | standard-char
+ | standard-class
+ | standard-generic-function
+ | standard-method
+ | standard-object
+ | storage-condition
+ | stream
+ | stream-error
+ | string
+ | string-stream
+ | structure-class
+ | structure-object
+ | style-warning
+ | symbol
+ | synonym-stream
+ | two-way-stream
+ | type-error
+ | unbound-slot
+ | unbound-variable
+ | undefined-function
+ | unsigned-byte
+ | vector
+ | warning
+ ){{break}}
+
+ builtin_variables: |-
+ \*(?xi:
+ applyhook
+ | break-on-signals
+ | break-on-warnings
+ | compile-file-pathname
+ | compile-file-truename
+ | compile-print
+ | compile-verbose
+ | debug-io
+ | debugger-hook
+ | default-pathname-defaults
+ | error-output
+ | evalhook
+ | features
+ | gensym-counter
+ | load-pathname
+ | load-print
+ | load-truename
+ | load-verbose
+ | macroexpand-hook
+ | modules
+ | package
+ | print-array
+ | print-base
+ | print-case
+ | print-circle
+ | print-escape
+ | print-gensym
+ | print-length
+ | print-level
+ | print-lines
+ | print-miser-width
+ | print-pprint-dispatch
+ | print-pretty
+ | print-radix
+ | print-readably
+ | print-right-margin
+ | query-io
+ | random-state
+ | read-base
+ | read-default-float-format
+ | read-eval
+ | read-suppress
+ | readtable
+ | standard-input
+ | standard-output
+ | suppress-series-warnings
+ | terminal-io
+ | trace-output
+ )\*{{break}}
diff --git a/Lisp/Snippets/defconstant.sublime-snippet b/Lisp/Snippets/defconstant.sublime-snippet
index e9a5dfc809..93cde29d94 100644
--- a/Lisp/Snippets/defconstant.sublime-snippet
+++ b/Lisp/Snippets/defconstant.sublime-snippet
@@ -1,6 +1,6 @@
+ "${3:Documentation for $1.}")]]>
const
source.lisp
defconstant
diff --git a/Lisp/Symbol List - Variables.tmPreferences b/Lisp/Symbol List - Variables.tmPreferences
new file mode 100644
index 0000000000..274a8b089a
--- /dev/null
+++ b/Lisp/Symbol List - Variables.tmPreferences
@@ -0,0 +1,17 @@
+
+
+
+ scope
+
+ source.lisp meta.declaration constant.other,
+ source.lisp meta.declaration variable.other
+
+ settings
+
+ showInSymbolList
+ 1
+ showInIndexedSymbolList
+ 0
+
+
+
diff --git a/Lisp/Symbol List.tmPreferences b/Lisp/Symbol List.tmPreferences
new file mode 100644
index 0000000000..be4de199bd
--- /dev/null
+++ b/Lisp/Symbol List.tmPreferences
@@ -0,0 +1,18 @@
+
+
+
+ scope
+
+ source.lisp entity.name.macro,
+ source.lisp entity.name.struct,
+ source.lisp entity.name.type
+
+ settings
+
+ showInSymbolList
+ 1
+ showInIndexedSymbolList
+ 1
+
+
+
diff --git a/Lisp/syntax_test_lisp.lisp b/Lisp/syntax_test_lisp.lisp
deleted file mode 100644
index 6e19a26c12..0000000000
--- a/Lisp/syntax_test_lisp.lisp
+++ /dev/null
@@ -1,228 +0,0 @@
-; SYNTAX TEST "Packages/Lisp/Lisp.sublime-syntax"
-
- ; comment
-;^ punctuation.definition.comment
-;^^^^^^^^^ comment.line.semicolon
-
- #|
-;^^ punctuation.definition.comment.begin
- This is a multi-line comment.
-; ^^^^^ comment.block
- #|
- They can be nested!
- |#
-; ^^ comment.block comment.block punctuation.definition.comment.end
-|#
-
-(
-; comments inside lists
-; ^ comment
-
- #|
- even block comments |#
-; ^ comment
-)
-
-#|
- stray comment
-|#|#
-; ^^ invalid.illegal.stray-comment-end
-
-(#|
- stray comment inside list
-|#|#)
-; ^^ invalid.illegal.stray-comment-end
-
-( #| stray brace |# ))))
-; ^^^ invalid.illegal.stray-bracket-end
-
- (( #| nested |# ))
-;^ meta.group punctuation.definition.group.begin
-; ^ meta.group meta.group punctuation.definition.group.begin
-; ^ comment
-; ^ meta.group meta.group punctuation.definition.group.end
-; ^ meta.group punctuation.definition.group.end
-
-;##########
-; STRINGS #
-;##########
-
-("string\n")
-;^ punctuation.definition.string.begin
-;^^^^^^^^ string.quoted.double
-; ^^ constant.character.escape
-; ^ punctuation.definition.string.end
-
-("multi-line string
- ends here"
-; ^ punctuation.definition.string.end
-)
-
-;##########
-; NUMBERS #
-;##########
-
-(setq a 10)
-; ^^ constant.numeric
-
-(setq b 1.7)
-; ^^^ constant.numeric
-
-(setq c 1.5e+4)
-; ^^^^^^ constant.numeric
-
-(setq c 0xF0A)
-; ^^^^^ constant.numeric
-
-;#####################
-; LANGUAGE CONSTANTS #
-;#####################
-
-(format t "Hello, world!")
-; ^ constant.language
-
-(NULL)
-;^^^^ constant.language
-
-(nil)
-;^^^ constant.language
-
-;#######################
-; ARITHMETIC OPERATORS #
-;#######################
-
-(+ a b)
-;^ keyword.operator.arithmetic
-
-(- a b)
-;^ keyword.operator.arithmetic
-
-(* a b)
-;^ keyword.operator.arithmetic
-
-(/ a b)
-;^ keyword.operator.arithmetic
-
-(mod a b)
-;^^^ keyword.operator.arithmetic
-
-(rem a b)
-;^^^ keyword.operator.arithmetic
-
-(INCF a b)
-;^^^^ keyword.operator.arithmetic
-
-(decf a b)
-;^^^^ keyword.operator.arithmetic
-
-;#######################
-; COMPARISON OPERATORS #
-;#######################
-
-(= a b)
-;^ keyword.operator.comparison
-
-(/= a b)
-;^^ keyword.operator.comparison
-
-(> a b)
-;^ keyword.operator.comparison
-
-(< a b)
-;^ keyword.operator.comparison
-
-(>= a b)
-;^^ keyword.operator.comparison
-
-(<= a b)
-;^^ keyword.operator.comparison
-
-(max a b)
-;^^^ keyword.operator.comparison
-
-(min a b)
-;^^^ keyword.operator.comparison
-
-(EQ a b)
-;^^ keyword.operator.comparison
-
-(neq a b)
-;^^^ keyword.operator.comparison
-
-;####################
-; LOGICAL OPERATORS #
-;####################
-
-(and a b)
-;^^^ keyword.operator.logical
-
-(OR a b)
-;^^ keyword.operator.logical
-
-(not a b)
-;^^^ keyword.operator.logical
-
-;####################
-; BITWISE OPERATORS #
-;####################
-
-(logand a b)
-;^^^^^^ keyword.operator.bitwise
-
-(logior a b)
-;^^^^^^ keyword.operator.bitwise
-
-(LOGXOR a b)
-;^^^^^^ keyword.operator.bitwise
-
-(lognor a b)
-;^^^^^^ keyword.operator.bitwise
-
-(logeqv a b)
-;^^^^^^ keyword.operator.bitwise
-
-;############
-; VARIABLES #
-;############
-
-(*package*)
-;^ punctuation.definition.variable.begin
-;^^^^^^^^^ variable.language
-; ^ punctuation.definition.variable.end
-
-(*user-var*)
-;^ punctuation.definition.variable.begin
-;^^^^^^^^^^ variable.other.global
-; ^ punctuation.definition.variable.end
-
-;###############
-; CONTROL FLOW #
-;###############
-
-(loop while (hungry) do (eat))
-;^^^^ keyword.control
-; ^^^^^ keyword.control
-; ^^ keyword.control
-
-;############
-; FUNCTIONS #
-;############
-
-(defun averagenum (n1 n2 n3 n4)
-;^ keyword.declaration.function
-; ^ entity.name.function
- (/ ( + n1 n2 n3 n4) 4)
-; ^ keyword.operator
-; ^ keyword.operator
-; ^ constant.numeric
-)
-
-(defun what? (n1 n2 n3 n4)
-;^ keyword.declaration.function
-; ^^^^^ entity.name.function
-)
-
-(defun is>?! (n1 n2 n3 n4)
-;^ keyword.declaration.function
-; ^^^^^ entity.name.function
-)
diff --git a/Lisp/tests/syntax_test_lisp.lisp b/Lisp/tests/syntax_test_lisp.lisp
new file mode 100644
index 0000000000..27d76de3be
--- /dev/null
+++ b/Lisp/tests/syntax_test_lisp.lisp
@@ -0,0 +1,2866 @@
+; SYNTAX TEST "Packages/Lisp/Lisp.sublime-syntax"
+
+ ; comment
+;^ punctuation.definition.comment
+;^^^^^^^^^ comment.line.semicolon
+
+ #|
+;^^ punctuation.definition.comment.begin
+ This is a multi-line comment.
+; ^^^^^ comment.block
+ #|
+ They can be nested!
+ |#
+; ^^ comment.block comment.block punctuation.definition.comment.end
+|#
+
+(
+; comments inside lists
+; ^ comment
+
+ #|
+ even block comments |#
+; ^ comment
+)
+
+#|
+ stray comment
+|#|#
+; ^^ invalid.illegal.stray-comment-end
+
+(#|
+ stray comment inside list
+|#|#)
+; ^^ invalid.illegal.stray-comment-end
+
+( #| stray brace |# ))))
+; ^^^ invalid.illegal.stray-bracket-end
+
+ (( #| nested |# ))
+;^ meta.parens punctuation.section.parens.begin
+; ^ meta.parens meta.parens punctuation.section.parens.begin
+; ^ comment
+; ^ meta.parens meta.parens punctuation.section.parens.end
+; ^ meta.parens punctuation.section.parens.end
+
+; ^ - meta.parens
+
+;#########
+; ARRAYS #
+;#########
+
+ #A( a b c )
+; ^^ meta.array.lisp - meta.parens
+; ^^^^^^^^^ meta.array.lisp meta.parens.lisp
+; ^^ punctuation.definition.array.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ #a( a b c )
+; ^^ meta.array.lisp - meta.parens
+; ^^^^^^^^^ meta.array.lisp meta.parens.lisp
+; ^^ punctuation.definition.array.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+;###########0#
+; CHARACTERS #
+;#############
+
+ #\! #\" #\# #\$ #\% #\& #\' #\( #\) #\* #\+ #\, #\- #\. #\/ #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\: #\; #\< #\= #\> #\? #\@ #\A #\B #\C #\D #\E #\F #\G #\H #\I #\J #\K #\L #\M #\N #\O #\P #\Q #\R
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\S #\T #\U #\V #\W #\X #\Y #\Z #\[ #\\ #\] #\^ #\_ #\` #\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\l #\m #\n #\o #\p #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z #\{ #\| #\} #\~
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\Space #\SPACE #\space
+; ^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+
+ #\Newline #\NEWLINE #\newline
+; ^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+
+ #\Backspace #\Tab #\Linefeed #\Page #\Return #\Rubout
+; ^^^^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+
+ #\φ #\Break #\Home-Up #\Escape
+; ^^^ constant.character.non-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^ constant.character.non-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^^ constant.character.non-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+; ^^^^^^^^ constant.character.non-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^ - constant
+
+;########################
+; CHARACTER ATTRIBUTESS #
+;########################
+
+ #3\a
+; ^^^^ constant.character.standard.lisp
+; ^^^ punctuation.definition.constant.lisp
+; ^ storage.modifier.attributes.lisp
+
+ #\Control-Meta-Return #\Meta-Control-Q
+; ^^^^^^^^^^^^^^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^^^^^^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\Hyper-Space #\Meta-\a
+; ^^^^^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\Control-A #\Meta-Hyper-\:
+; ^^^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^^^^^^^^^^^^^ constant.character.standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+ #\C-M-Return #\Hyper-\φ
+; ^^^^^^^^^^^^ constant.character.semi-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+; ^^^^^^^^^^ constant.character.non-standard.lisp
+; ^^ punctuation.definition.constant.lisp
+
+;############
+; PATHNAMES #
+;############
+
+ #P"/my/name"
+; ^^^^^^^^^^^^ meta.path.lisp
+; ^^ punctuation.definition.pathname.lisp
+; ^^^^^^^^^^ string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^ punctuation.definition.string.end.lisp
+
+;#############
+; STRUCTURES #
+;#############
+
+ #S(struct-name
+; ^^ meta.struct.lisp - meta.parens
+; ^^^^^^^^^^^^^ meta.struct.lisp meta.parens.lisp
+; ^^ punctuation.definition.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^^ entity.name.struct.lisp
+ slot1 sym
+; ^^^^^^^^^^^ meta.struct.lisp meta.parens.lisp
+; ^^^^^ variable.other.lisp
+; ^^^ variable.other.lisp
+
+ slot2 10
+; ^^^^^^^^^^ meta.struct.lisp meta.parens.lisp
+; ^^^^^ variable.other.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+
+ slot2 (10 20 30)
+; ^^^^^^^ meta.struct.lisp meta.parens.lisp
+; ^^^^^^^^^^ meta.struct.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.struct.lisp meta.parens.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^^^^^^ meta.parens.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.section.parens.end.lisp
+)
+; <- meta.struct.lisp meta.parens.lisp punctuation.section.parens.end.lisp
+;^ - meta.struct - meta.parens
+
+;#############
+; EVALUATION #
+;#############
+
+ #'(lambda (a b c) (return 1))
+; ^^ - meta.parens
+; ^^^^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^ meta.parens.lisp meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^^ punctuation.definition.function.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ meta.function.lisp
+; ^^^^^^^ meta.function.parameters.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ variable.parameter.lisp
+; ^ variable.parameter.lisp
+; ^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ keyword.control.flow.return.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ #'(lambda nil (return 1))
+; ^^ - meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^ meta.parens.lisp meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^^ punctuation.definition.function.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ meta.function.lisp
+; ^^^ constant.language.null.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ keyword.control.flow.return.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ #'foo
+; ^^ punctuation.definition.function.lisp
+; ^^^ variable.function.lisp
+
+ #'path/to:foo
+; ^^ punctuation.definition.function.lisp
+; ^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ variable.function.lisp
+
+ (#'+ #'- #'*)
+; ^^ punctuation.definition.function.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^ punctuation.definition.function.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^ punctuation.definition.function.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+ #Mevenp
+; ^^ punctuation.definition.function.lisp
+; ^^^^^ support.function.lisp
+
+ #M(lambda (n) (random 100))
+; ^^ punctuation.definition.function.lisp
+; ^ meta.parens.lisp
+; ^^^^^^^ meta.parens.lisp meta.function.lisp
+; ^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ keyword.declaration.function.inline.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ #:foo
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #:foo:bar
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.namespace.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #.foo
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #.foo:bar
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.namespace.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #,foo
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #,foo:bar
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ variable.other.lisp
+; ^ - variable
+
+ #+feature-flag (call me)
+; ^^ keyword.control.conditional.lisp
+; ^^^^^^^^^^^^ constant.other.feature.lisp
+; ^^^^^^^^^ meta.parens.lisp
+
+ #-feature-flag (ignore me)
+; ^^ keyword.control.conditional.lisp
+; ^^^^^^^^^^^^ constant.other.feature.lisp
+; ^^^^^^^^^^^ meta.parens.lisp
+
+ #+(and unix (not darwin))
+; ^^ keyword.control.conditional.lisp
+; ^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+
+;##########
+; VECTORS #
+;##########
+
+ #() ; An empty vector
+; ^ meta.vector.lisp - meta.vector meta.parens
+; ^^ meta.vector.lisp meta.parens.lisp
+; ^ punctuation.definition.vector.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ #(a b c) ; A vector of length 3
+; ^ meta.vector.lisp - meta.vector meta.parens
+; ^^^^^^^ meta.vector.lisp meta.parens.lisp
+; ^ punctuation.definition.vector.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ #(2 3 5 7 11 13 17) ; A vector containing the primes below 20
+; ^ meta.vector.lisp - meta.vector meta.parens
+; ^^^^^^^^^^^^^^^^^^ meta.vector.lisp meta.parens.lisp
+; ^ punctuation.definition.vector.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ #*10110 ; A five-bit bit-vector; bit 0 is a 1
+; ^^^^^^^ meta.vector.lisp
+; ^^ punctuation.definition.vector.lisp
+; ^^^^^ constant.numeric.value.lisp
+
+ #* ; An empty bit-vector
+; ^^ meta.vector.lisp punctuation.definition.vector.lisp
+
+;##########
+; STRINGS #
+;##########
+
+ "" ; An empty string
+; ^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^ punctuation.definition.string.end.lisp
+
+ "Foo" ; A string with three characters in it
+; ^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^ punctuation.definition.string.end.lisp
+
+ "foo\n" ; A string with trailing escaped newline
+; ^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^^ constant.character.escape.lisp
+; ^ punctuation.definition.string.end.lisp
+
+ "\"APL\\360?\" he cried." ; A string with twenty characters
+; ^^^^^^^^^^^^^^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^^ constant.character.escape.lisp
+; ^^ constant.character.escape.lisp
+; ^^ constant.character.escape.lisp
+; ^ punctuation.definition.string.end.lisp
+
+ "|x| = |-x|" ; A ten-character string
+; ^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.begin.lisp
+; ^ punctuation.definition.string.end.lisp
+
+'("multi-line string
+ ends here"
+; ^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.definition.string.end.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp
+;^ - meta.parens
+
+;##################
+; INTEGER NUMBERS #
+;##################
+
+(setq i 0) ; The integer zero, not a floating-point zero!
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+
+(setq i -0) ; This always means the same as 0
+; ^^ meta.number.integer.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^ constant.numeric.value.lisp
+(setq i +6) ; The first perfect number
+; ^^ meta.number.integer.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^ constant.numeric.value.lisp
+
+(setq i 28) ; The second perfect number
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+
+(setq i 1024.) ; Two to the tenth power
+; ^^^^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq i 15511210043330985984000000.) ; 25 factorial (25!), probably a bignum
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq i #2r11010101) ; Another way of writing 213 decimal
+; ^^^^^^^^^^^ meta.number.integer.binary.lisp
+; ^^^ constant.numeric.base.lisp
+; ^^^^^^^^ constant.numeric.value.lisp
+(setq i #b11010101) ; Ditto
+; ^^^^^^^^^^ meta.number.integer.binary.lisp
+; ^^ constant.numeric.base.lisp
+; ^^^^^^^^ constant.numeric.value.lisp
+
+(setq i #b+11010101) ; Ditto
+; ^^^^^^^^^^^ meta.number.integer.binary.lisp
+; ^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^^^^ constant.numeric.value.lisp
+
+(setq i #o325) ; Ditto, in octal radix
+; ^^^^^ meta.number.integer.octal.lisp
+; ^^ constant.numeric.base.lisp
+; ^^^ constant.numeric.value.lisp
+
+(setq i #xD5) ; Ditto, in hexadecimal radix
+; ^^^^ meta.number.integer.hexadecimal.lisp
+; ^^ constant.numeric.base.lisp
+; ^^ constant.numeric.value.lisp
+
+(setq i #16r+D5) ; Ditto
+; ^^^^^^^ meta.number.integer.hexadecimal.lisp
+; ^^^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^ constant.numeric.value.lisp
+
+(setq i #xACCEDED) ; 181202413, in hexadecimal radix
+; ^^^^^^^^^ meta.number.integer.hexadecimal.lisp
+; ^^ constant.numeric.base.lisp
+; ^^^^^^^ constant.numeric.value.lisp
+
+(setq i #o-300) ; Decimal -192, written in base 8
+; ^^^^^^ meta.number.integer.octal.lisp
+; ^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^ constant.numeric.value.lisp
+
+(setq i #3r-21010) ; Same thing in base 3
+; ^^^^^^^^^ meta.number.integer.other.lisp
+; ^^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^ constant.numeric.value.lisp
+
+(setq i #25R-7H) ; Same thing in base 25
+; ^^^^^^^ meta.number.integer.other.lisp
+; ^^^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^ constant.numeric.value.lisp
+
+;#########################
+; FLOATING POINT NUMBERS #
+;#########################
+
+(setq f 0.0) ; Floating-point zero in default format
+; ^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f +0.0) ; Floating-point zero in default format with sign
+; ^^^^ meta.number.float.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^ constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f -0.0) ; Floating-point zero in default format with sign
+; ^^^^ meta.number.float.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^ constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f 0E0) ; Also floating-point zero in default format
+; ^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+
+(setq f -.0) ; This may be a zero or a minus zero,
+; ^^^ meta.number.float.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^ constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq b .0E0) ; Exponent without leading digits
+; ^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f 0.0s0) ; A floating-point zero in short format
+; ^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f 0s0) ; Also a floating-point zero in short format
+; ^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+
+(setq f 3.1415926535897932384d0) ; A double-format approximation to
+; ^^^^^^^^^^^^^^^^^^^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f 6.02E+23) ; Avogadro's number, in default format
+; ^^^^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f 602E+21) ; Also Avogadro's number, in default format
+; ^^^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+
+(setq f 3.010299957f-1) ; , in single format
+; ^^^^^^^^^^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+(setq f -0.000000001s9) ; in short format, the hard way
+; ^^^^^^^^^^^^^^ meta.number.float.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^^^^^^^^^ constant.numeric.value.lisp
+; ^ punctuation.separator.decimal.lisp
+
+;###################
+; RATIONAL NUMBERS #
+;###################
+
+(setq r 2/3) ;This is in canonical form
+; ^^^ meta.number.rational.decimal.lisp constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r 4/6) ;A non-canonical form for the same number
+; ^^^ meta.number.rational.decimal.lisp constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r -17/23) ;A not very interesting ratio
+; ^^^^^^ meta.number.rational.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r -30517578125/32768)
+; ^^^^^^ meta.number.rational.decimal.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^^^^^^^^^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r #o-101/75) ; Octal notation for -65/61
+; ^^^^^^^^^ meta.number.rational.octal.lisp
+; ^^ constant.numeric.base.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r #3r120/21) ; Ternary notation for 15/7
+; ^^^^^^^^^ meta.number.rational.other.lisp
+; ^^^ constant.numeric.base.lisp
+; ^^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r #Xbc/ad) ; Hexadecimal notation for 188/173
+; ^^^^^^^ meta.number.rational.hexadecimal.lisp
+; ^^ constant.numeric.base.lisp
+; ^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+(setq r #xFADED/FACADE) ; Hexadecimal notation for 1027565/16435934
+; ^^^^^^^^^^^^^^ meta.number.rational.hexadecimal.lisp
+; ^^ constant.numeric.base.lisp
+; ^^^^^^^^^^^^ constant.numeric.value.lisp
+; ^ keyword.operator.arithmetic.lisp
+
+;##################
+; COMPLEX NUMBERS #
+;##################
+
+(setq c #C(3.0s1 2.0s-1)) ; Real and imaginary parts are short format
+; ^^ meta.number.complex.lisp - meta.number meta.parens
+; ^^^^^^^^^^^^^^ meta.number.complex.lisp meta.parens.lisp
+; ^^ punctuation.definition.complex.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^^^^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(setq c #C(5 -3)) ; A Gaussian integer
+; ^^ meta.number.complex.lisp - meta.number meta.parens
+; ^^^^^^ meta.number.complex.lisp meta.parens.lisp
+; ^^ punctuation.definition.complex.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ meta.number.integer.decimal.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(setq c #C(5/3 7.0)) ; Will be converted internally to #C(1.66666 7.0)
+; ^^ meta.number.complex.lisp - meta.number meta.parens
+; ^^^^^^^^^ meta.number.complex.lisp meta.parens.lisp
+; ^^ punctuation.definition.complex.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.number.rational.decimal.lisp constant.numeric.value.lisp
+; ^^^ meta.number.float.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(setq c #C(0 1)) ; The imaginary unit, that is, i
+; ^^ meta.number.complex.lisp - meta.number meta.parens
+; ^^^^^ meta.number.complex.lisp meta.parens.lisp
+; ^^ punctuation.definition.complex.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;##############
+; IDENTIFIERS #
+;##############
+
+ FROBBOZ ; The symbol whose name is FROBBOZ
+; ^^^^^^^ variable.other.lisp
+
+ frobboz ; Another way to notate the same symbol
+; ^^^^^^^ variable.other.lisp
+
+ fRObBoz ; Yet another way to notate it
+; ^^^^^^^ variable.other.lisp
+
+ unwind-protect ; A symbol with a - in its name
+; ^^^^^^^^^^^^^^ variable.other.lisp
+
+ +$ ; The symbol named +$
+; ^^ variable.other.lisp
+
+ 1+ ; The symbol named 1+
+; ^^ variable.other.lisp
+
+ +1 ; This is the integer 1, not a symbol
+; ^^ - variable
+
+ pascal_style ; This symbol has an underscore in its name
+; ^^^^^^^^^^^^ variable.other.lisp
+
+ b^2-4*a*c ; This is a single symbol! It has several special characters in its name
+; ^^^^^^^^^ variable.other.lisp
+
+ file.rel.43 ; This symbol has periods in its name
+; ^^^^^^^^^^^ variable.other.lisp
+
+ /usr/games/zork ; This symbol has slashes in its name
+; ^^^^^^^^^^^^^^^ variable.other.lisp
+
+ 7777e
+; ^^^^^ variable.other
+
+ 77777
+; ^^^^^ - variable.other
+
+ a.c.e
+; ^^^^^ variable.other
+
+ .....
+; ^^^^^ - variable.other
+
+ +constant+
+; ^^^^^^^^^^ constant.other.lisp
+
+ +no+constant
+; ^^^^^^^^^^^^ variable.other.lisp
+
+ no+constant+
+; ^^^^^^^^^^^^ variable.other.lisp
+
+ *global*
+; ^^^^^^^^ variable.other.lisp
+
+ *glo-bal*
+; ^^^^^^^^^ variable.other.lisp
+
+ *package*
+; ^^^^^^^^^ variable.language.lisp
+
+ pkg:foo ; external symbol
+; ^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ variable.other.lisp
+
+ pkg::foo ; internal symbol
+; ^^^ variable.namespace.lisp
+; ^^ punctuation.accessor.lisp
+; ^^^ variable.other.lisp
+
+;######################
+; ESCAPED IDENTIFIERS #
+;######################
+
+ \( \) ; The symbols whose name are ( and )
+; ^^ variable.other.lisp - punctuation
+; ^ - variable
+; ^^ variable.other.lisp - punctuation
+
+ \[ \] ; The symbols whose name are [ and ]
+; ^^ variable.other.lisp - punctuation
+; ^ - variable
+; ^^ variable.other.lisp - punctuation
+
+ \{ \} ; The symbols whose name are { and }
+; ^^ variable.other.lisp - punctuation
+; ^ - variable
+; ^^ variable.other.lisp - punctuation
+
+ \+1 ; The symbol whose name is +1
+; ^^^ variable.other.lisp - punctuation
+
+ +\1 ; Also the symbol whose name is +1
+; ^^^ variable.other.lisp - punctuation
+
+ \frobboz ; The symbol whose name is fROBBOZ
+; ^^^^^^^^ variable.other.lisp - punctuation
+
+ 3.14159265\s0 ; The symbol whose name is 3.14159265s0
+; ^^^^^^^^^^^^^ variable.other.lisp - punctuation
+
+ 3.14159265\S0 ; A different symbol, whose name is 3.14159265S0
+; ^^^^^^^^^^^^^ variable.other.lisp - punctuation
+
+ 3.14159265s0 ; A short-format floating-point approximation to
+; ^^^^^^^^^^^^ constant.numeric - variable
+
+ APL\\360 ; The symbol whose name is APL 360
+; ^^^^^^^^ variable.other.lisp - punctuation
+
+ apl\\360 ; Also the symbol whose name is APL 360
+; ^^^^^^^^ variable.other.lisp - punctuation
+
+ \(b^2\)\ -\ 4*a*c ; The name is (B^2) - 4*A*C; it has parentheses and two spaces in it
+; ^^^^^^^^^^^^^^^^^ variable.other.lisp - punctuation
+
+ \(\b^2\)\ -\ 4*\a*\c ; The name is (b^2) - 4*a*c; the letters are explicitly lowercase
+; ^^^^^^^^^^^^^^^^^^^^ variable.other.lisp - punctuation
+
+ ab\ \|c\)\ de
+; ^^^^^^^^^^^^^ variable.other - punctuation
+
+ #x123\4
+; ^^^^^^^ variable.other.lisp - punctuation
+
+ 7!#7e
+; ^^^^^ variable.other - punctuation
+
+;#####################
+; QUOTED IDENTIFIERS #
+;#####################
+
+ |"| ; The same as writing \"
+; ^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |(b^2) - 4*a*c| ; The name is (b^2) - 4*a*c
+; ^^^^^^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |frobboz| ; The name is frobboz, not FROBBOZ
+; ^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |APL\360| ; The name is APL360, because the \ quotes the 3
+; ^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |APL\\360| ; The name is APL\360
+; ^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |apl\\360| ; The name is apl\360
+; ^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |\|\|| ; Same as \|\|: the name is ||
+; ^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |(B^2) - 4*A*C| ; The name is (B^2) - 4*A*C; it has parentheses and two spaces in it
+; ^^^^^^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ |(b^2) - 4*a*c| ; The name is (b^2) - 4*a*c
+; ^^^^^^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+
+ ab| (|c|) |de
+; ^^^^^^^^^^^^^ variable.other.lisp
+; ^ - variable
+
+ |\#x123\4|
+; ^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^^^^^^^^ - punctuation
+; ^ punctuation.definition.symbol.end.lisp
+; ^ - variable
+
+ |7! #7e|
+; ^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^^^^^^ - punctuation
+; ^ punctuation.definition.symbol.end
+
+;###########
+; KEYWORDS #
+;###########
+
+ :foo
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ keyword:foo
+; ^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ keyword::foo
+; ^^^^^^^ variable.namespace.lisp
+; ^^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ (:foo :bar)
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ (keyword:foo keyword:bar)
+; ^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+; ^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ (|keyword|:|foo| |keyword|:|bar|)
+; ^^^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^ keyword.other.symbol.lisp
+; ^^^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^ keyword.other.symbol.lisp
+
+;#########
+; QUOTES #
+;#########
+
+ '
+; ^ punctuation.definition.quoted.lisp
+
+ '()
+; ^ punctuation.definition.quoted.lisp
+; ^ meta.parens.lisp punctuation.section.parens.begin.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp
+; ^ - meta.parens
+
+ 'nil
+; ^ punctuation.definition.quoted.lisp
+; ^^^ constant.other.symbol.lisp
+
+ ('nil)
+; ^^^^^^ meta.parens.lisp
+; ^ - meta.parens
+; ^ punctuation.definition.quoted.lisp
+; ^^^ constant.other.symbol.lisp
+
+ 'symbol
+; ^ punctuation.definition.quoted.lisp
+; ^^^^^^ constant.other.symbol.lisp
+
+ ('fun 'arg)
+; ^ punctuation.definition.quoted.lisp
+; ^^^ constant.other.symbol.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^^^ constant.other.symbol.lisp
+
+ ('+ '* '-)
+; ^ punctuation.definition.quoted.lisp
+; ^ constant.other.symbol.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^ constant.other.symbol.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^ constant.other.symbol.lisp
+
+ ':foo
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+ ',foo
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+
+ '.foo
+; ^ punctuation.definition.quoted.lisp
+; ^^^^ constant.other.symbol.lisp
+
+ '#'foo
+; ^ punctuation.definition.quoted.lisp
+; ^ constant.other.symbol.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^^^ constant.other.symbol.lisp
+
+ '(quote quote (quote quote))
+; ^ punctuation.definition.quoted.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ (quote quote (quote quote))
+; ^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ support.function.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ (cl:quote (cl:quote))
+; ^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^ variable.namespace.lisp
+; ^^^^^ support.function.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ variable.namespace.lisp
+; ^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+; Note: `quote` function can be overridden by user,
+; but this can't be handled by a static syntax engine
+(defun f (a) (+ a 1))
+(setq quote #'f)
+; ^^^^^ variable.other.lisp
+; ^^ punctuation.definition.function.lisp
+; ^ support.function.lisp
+
+(print (eval (append '(funcall) (quote (quote 4))))) ; prints 5
+;^^^^^ support.function.lisp
+; ^^^^ support.function.lisp
+; ^^^^^^ support.function.lisp
+; ^^^^^^^ variable.other.lisp
+; ^^^^^ support.function.lisp
+; ^^^^^ variable.other.lisp
+
+;#############
+; BACKQUOTES #
+;#############
+
+ `
+; ^ punctuation.definition.quoted.lisp
+
+ `foo
+; ^ punctuation.definition.quoted.lisp
+; ^^^ variable.other.lisp
+
+ `()
+; ^ punctuation.definition.quoted.lisp
+; ^^ meta.parens.lisp
+
+ `(lambda (,param1 (,param2 ,default)) (run ,param1))
+; ^^^^^^^^ meta.parens.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.function.parameters.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^^^ variable.parameter.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^^^ variable.parameter.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^^^ variable.other.lisp
+
+ `#(x1 ,x2 ,@x3)
+; ^ - meta.vector - meta.parens
+; ^ meta.vector.lisp - meta.parens
+; ^^^^^^^^^^^^^ meta.vector.lisp meta.parens.lisp
+; ^ - meta.vector - meta.parens
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.definition.vector.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ variable.other.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^ variable.other.lisp
+; ^^ punctuation.definition.variable.lisp
+; ^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ `,foo ; quoting and evaluating does nothing => same as foo
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+
+ ,foo ; evaluate symbol within quoted list
+; ^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+
+ ,(fun arg)
+; ^ punctuation.definition.variable.lisp
+; ^^^^^^^^^ meta.parens.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.function-call.lisp variable.function.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ ,@foo ; splice an evaluated value
+; ^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+
+ ,@(fun arg)
+; ^^ punctuation.definition.variable.lisp
+; ^^^^^^^^^ meta.parens.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.function-call.lisp variable.function.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+;#####################
+; LANGUAGE CONSTANTS #
+;#####################
+
+(format t "Hello, world!")
+; ^ constant.language
+
+(print true)
+; ^^^^ constant.language.boolean.lisp
+
+(print false)
+; ^^^^^ constant.language.boolean.lisp
+
+(print nil)
+; ^^^ constant.language.null.lisp
+
+(())
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^ meta.parens.lisp meta.parens.lisp punctuation.section.parens.begin.lisp
+; ^ meta.parens.lisp meta.parens.lisp punctuation.section.parens.end.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp
+
+;#######################
+; ARITHMETIC OPERATORS #
+;#######################
+
+(+ a b)
+;^ keyword.operator.arithmetic
+
+(- a b)
+;^ keyword.operator.arithmetic
+
+(* a b)
+;^ keyword.operator.arithmetic
+
+(/ a b)
+;^ keyword.operator.arithmetic
+
+(mod a b)
+;^^^ keyword.operator.arithmetic
+
+(rem a b)
+;^^^ keyword.operator.arithmetic
+
+(INCF a b)
+;^^^^ keyword.operator.arithmetic
+
+(decf a b)
+;^^^^ keyword.operator.arithmetic
+
+;#######################
+; COMPARISON OPERATORS #
+;#######################
+
+(= a b)
+;^ keyword.operator.comparison
+
+(/= a b)
+;^^ keyword.operator.comparison
+
+(> a b)
+;^ keyword.operator.comparison
+
+(< a b)
+;^ keyword.operator.comparison
+
+(>= a b)
+;^^ keyword.operator.comparison
+
+(<= a b)
+;^^ keyword.operator.comparison
+
+(max a b)
+;^^^ keyword.operator.comparison
+
+(min a b)
+;^^^ keyword.operator.comparison
+
+(EQ a b)
+;^^ keyword.operator.comparison
+
+(neq a b)
+;^^^ keyword.operator.comparison
+
+;####################
+; LOGICAL OPERATORS #
+;####################
+
+(and a b)
+;^^^ keyword.operator.logical
+
+(OR a b)
+;^^ keyword.operator.logical
+
+(not a b)
+;^^^ keyword.operator.logical
+
+;####################
+; BITWISE OPERATORS #
+;####################
+
+(logand a b)
+;^^^^^^ keyword.operator.bitwise
+
+(logior a b)
+;^^^^^^ keyword.operator.bitwise
+
+(LOGXOR a b)
+;^^^^^^ keyword.operator.bitwise
+
+(lognor a b)
+;^^^^^^ keyword.operator.bitwise
+
+(logeqv a b)
+;^^^^^^ keyword.operator.bitwise
+
+;#################
+; FUNCTION CALLS #
+;#################
+
+(foo a b c)
+;^^^ meta.function-call.lisp variable.function.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(pkg::bar pkg::b :key)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp
+;^^^ variable.namespace.lisp
+; ^^ punctuation.accessor.lisp
+; ^^^ variable.function.lisp
+; ^^^ variable.namespace.lisp
+; ^^ punctuation.accessor.lisp
+; ^ variable.other.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(path/to:pkg:fun ns:a b c)
+;^^^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ variable.function.lisp
+; ^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(
+ foo
+; ^^^ meta.function-call.lisp variable.function.lisp
+ bar
+; ^^^ variable.other.lisp
+)
+
+; call a lambda function with exotic parameters
+(write (funcall (lambda (+ -) (* + -)) 3 4)) ; prints 12
+; ^^^^^^^ support.function.lisp
+; ^^^^^^^ meta.function.lisp
+; ^^^^^ meta.function.parameters.lisp
+; ^^^^^^ keyword.declaration.function
+; ^ punctuation.section.parameters.begin.lisp
+; ^ variable.parameter.lisp
+; ^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ keyword.operator.arithmetic.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+; ^ constant.numeric.value.lisp
+; ^ constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(make-foo a b c)
+;^^^^^^^^ meta.function-call.lisp variable.function.constructor.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(pkg:make-foo a b c)
+;^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^ meta.function-call.lisp variable.function.constructor.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(mutating! a b c)
+;^^^^^^^^^ meta.function-call.lisp variable.function.mutating.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(pkg:mutating! a b c)
+;^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ meta.function-call.lisp variable.function.mutating.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(predicate? a b c)
+;^^^^^^^^^^ meta.function-call.lisp variable.function.predicate.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(pkg:predicate? a b c)
+;^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^^ meta.function-call.lisp variable.function.predicate.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(fun-p a b c)
+;^^^^^ meta.function-call.lisp variable.function.predicate.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(pkg:fun-p a b c)
+;^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^ meta.function-call.lisp variable.function.predicate.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+;########
+; LISTS #
+;########
+
+(null nil)
+;^^^^ constant.language.null.lisp
+; ^^^ constant.language.null.lisp
+
+(t nil)
+;^ constant.language.lisp
+; ^^^ constant.language.null.lisp
+
+(+foo+ a b c)
+;^^^^^ constant.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(*foo* a b c)
+;^^^^^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(*package* a b c)
+;^^^^^^^^^ variable.language.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(`foo bar)
+;^ punctuation.definition.quoted.lisp
+; ^^^ variable.other.lisp
+; ^^^ variable.other.lisp
+
+(&foo bar)
+;^^^^ variable.annotation.lisp
+; ^^^ variable.other.lisp
+
+(#+darwin (fun arg))
+;^^ keyword.control.conditional.lisp
+; ^^^^^^ constant.other.feature.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.function-call.lisp variable.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(#(1 2 3))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^ meta.parens.lisp meta.vector.lisp - meta.parens meta.parens
+; ^^^^^^^ meta.parens.lisp meta.vector.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.vector
+; ^ - meta.parens
+;^ punctuation.definition.vector.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(#\!)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^ meta.parens.lisp constant.character.standard.lisp
+;^^ punctuation.definition.constant.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp
+
+(#\:)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^ meta.parens.lisp constant.character.standard.lisp
+;^^ punctuation.definition.constant.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp
+
+(#:foo)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^ meta.parens.lisp
+;^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(#.foo)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^ meta.parens.lisp
+;^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(#,foo)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^ meta.parens.lisp
+;^^ punctuation.definition.variable.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(. a b c)
+;^ keyword.control.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(NIL a b c)
+;^^^ constant.language.null.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+
+(0 1 2 3)
+;^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+
+(:val :val)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^ meta.parens.lisp
+;^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+; ^ punctuation.accessor.lisp
+; ^^^ keyword.other.symbol.lisp
+
+;##################
+; TYPE SPECIFIERS #
+;##################
+
+(atom test)
+;^^^^ meta.function-call.lisp support.function.lisp
+
+(float 10)
+;^^^^^ meta.function-call.lisp support.function.lisp
+
+(double-float 10)
+;^^^^^^^^^^^^ storage.type.lisp
+
+(vector float 100)
+;^^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^^ storage.type.lisp
+
+;#####################
+; CLASS DECLARATIONS #
+;#####################
+
+(defclass name (super1 pkg:super2)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.class.lisp - meta.parens meta.parens
+;^^^^^^^^ keyword.declaration.class.lisp
+; ^^^^ entity.name.class.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ entity.other.inherited-class.lisp
+; ^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^ entity.other.inherited-class.lisp
+; ^ punctuation.section.parens.end.lisp
+ slot-name
+; <- meta.parens.lisp meta.class.lisp
+;^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp
+; ^^^^^^^^^ variable.other.lisp
+
+ (slot-name :type float)
+; <- meta.parens.lisp meta.class.lisp
+;^^^ meta.parens.lisp meta.class.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.class.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^ variable.other.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^ keyword.other.symbol.lisp
+; ^^^^^ storage.type.lisp
+; ^ punctuation.section.parens.end.lisp
+
+ :meta-class class-name
+; <- meta.parens.lisp meta.class.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^^ keyword.other.symbol.lisp
+; ^^^^^^^^^^ variable.other.lisp
+ :default-initargs . (foo bar baz))
+; <- meta.parens.lisp meta.class.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.class.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.class
+; ^ - meta
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^^^^^^^^ keyword.other.symbol.lisp
+; ^ keyword.control.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ variable.other.lisp
+; ^^^ variable.other.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;########################
+; FUNCTION DECLARATIONS #
+;########################
+
+(defun name)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^ entity.name.function.lisp
+
+(defslyfun name) ; custom function declaration keywords
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^^^^^^^^^ keyword.declaration.function.lisp
+; ^^^^ entity.name.function.lisp
+
+(defun averagenum (n1 n2 n3 n4)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp - meta.function meta.function
+; ^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^^^^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^ variable.parameter.lisp
+; ^ - variable
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+ (/ ( + n1 n2 n3 n4) 4)
+; ^ meta.parens.lisp meta.function.lisp
+; ^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp meta.parens.lisp
+; ^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.function.lisp
+; ^ keyword.operator
+; ^ keyword.operator
+; ^ constant.numeric
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^ - meta.parens
+
+(defun what? (n1 n2 n3 n4)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp - meta.function meta.function
+; ^ meta.parens.lisp meta.function.lisp - meta.function meta.function
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^ variable.parameter.lisp
+; ^ - variable
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^ - meta.parens
+
+(defun is>?! (n1 n2 n3 n4)
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^^ entity.name.function.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp
+;^ - meta.parens
+
+(defun |fun name| (|arg1 name| (|arg2 name| 5)) (print |arg name|))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.function.parameters.lisp - meta.parens meta.parens
+; ^ meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens - meta.function
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^^^^^^^ entity.name.function.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^^^^^^^^ variable.parameter.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^^ variable.parameter.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.symbol.begin.lisp
+; ^ punctuation.definition.symbol.end.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defun log-1(log-1) (if log-1 "1" "0"))
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^^ entity.name.function
+; ^^^^^^^ meta.function.parameters
+; ^ punctuation.section.parameters.begin
+; ^^^^ variable.parameter
+; ^ punctuation.section.parameters.end
+; ^ meta.parens - meta.function.parameters
+; ^^^^^^^^^^^^^^^^^^ meta.parens meta.parens - meta.function.parameters
+; ^^ keyword.control.conditional
+; ^^^^^ variable.other
+; ^^^ string.quoted.double
+; ^^^ string.quoted.double
+(format t (log-1 (< 1 2)))
+;^^^^^^ support.function
+; ^ constant.language
+; ^^^^^ variable.function
+; ^ keyword.operator.comparison
+; ^ constant.numeric
+; ^ constant.numeric
+; ^^^ punctuation.section.parens.end
+; ^ - meta.parens
+
+(defun name (arg1 (arg2 4) &optional (&anno arg3 &anno (fun arg) &rest rest)) "name (&optional (arg "key"))" (return NIL))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.function
+;^^^^^^^^^^^ meta.parens.lisp meta.function.lisp
+; ^^^^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp meta.parens.lisp
+; ^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.function.parameters.lisp punctuation.section.parameters.end.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^^^^^ keyword.declaration.function.lisp
+; ^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^^^^^^^^^ variable.annotation.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.annotation.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^^ variable.annotation.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.function-call.lisp variable.function.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^^^^^ variable.annotation.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^^^ variable.other.lisp
+; ^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ keyword.control.flow.return.lisp
+; ^^^ constant.language.null.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defgeneric expunge-bogon (bogon &key with-force) ())
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^ meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+; ^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.function.lisp
+; ^ - meta.parens
+;^^^^^^^^^^ keyword.declaration.function.lisp
+; ^^^^^^^^^^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^^ variable.parameter.lisp
+; ^^^^ variable.annotation.lisp
+; ^^^^^^^^^^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defmethod initialize-instance :after ((command command) &key lambda-expression &allow-other-keys)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+; ^ meta.parens.lisp meta.function.parameters.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp - meta.parens meta.parens
+; ^ meta.parens.lisp meta.function.lisp
+;^^^^^^^^^ keyword.declaration.function.lisp
+; ^^^^^^^^^^^^^^^^^^^ entity.name.function.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^ keyword.other.symbol.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ variable.parameter.lisp
+; ^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^^^^ variable.annotation.lisp
+; ^^^^^^^^^^^^^^^^^ variable.parameter.lisp
+; ^^^^^^^^^^^^^^^^^ variable.annotation.lisp
+; ^ punctuation.section.parameters.end.lisp
+ (initialize-command command lambda-expression))
+; <- meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+;^ meta.parens.lisp meta.function.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens - meta.function
+; ^ - meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^^^^^^^^^ meta.function-call.lisp variable.function.lisp
+; ^^^^^^^ variable.other.lisp
+; ^^^^^^^^^^^^^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defmethod files:serialize ((profile nyxt-profile) (file history-file) stream &key)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.lisp
+; ^ meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.function.parameters.lisp
+; ^ meta.parens.lisp meta.function.lisp
+;^^^^^^^^^ keyword.declaration.function.lisp
+; ^^^^^ variable.namespace.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ variable.parameter.lisp
+; ^^^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^^^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^^^^^^ variable.parameter.lisp
+; ^^^^ variable.annotation.lisp
+; ^ punctuation.section.parameters.end.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp - meta.function
+;^ - meta.parens
+
+;#####################
+; MACRO DECLARATIONS #
+;#####################
+
+(defmacro %inner-macro (n1 n2 n3 n4)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.macro
+;^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.macro.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.macro.parameters.lisp
+; ^ meta.parens.lisp meta.macro.lisp
+;^^^^^^^^ keyword.declaration.macro.lisp
+; ^^^^^^^^^^^^ entity.name.macro.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp - meta.macro
+;^ - meta.params
+
+(defmacro %inner-macro nil (n1 n2 n3 n4)
+;^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.macro.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.macro.lisp meta.parens.lisp
+;^^^^^^^^ keyword.declaration.macro.lisp
+; ^^^^^^^^^^^^ entity.name.macro.lisp
+; ^^^ constant.language.null.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ variable.function.lisp
+; ^^ variable.other.lisp
+; ^^ variable.other.lisp
+; ^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+)
+; <- meta.parens.lisp punctuation.section.parens.end.lisp - meta.macro
+;^ - meta.params
+
+;######################
+; STRUCT DECLARATIONS #
+;######################
+
+(defstruct structname)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp
+
+(defstruct (structname :conc-name))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.struct
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ keyword.other.symbol.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defstruct (structname (:conc-name conc-name)))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+; ^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp meta.parens.lisp - meta.struct meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.struct.lisp meta.parens.lisp - meta.struct meta.parens meta.parens
+; ^ meta.parens.lisp - meta.struct
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ keyword.other.symbol.lisp
+; ^^^^^^^^^ variable.other.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+(defstruct structname "docstring" slot1 slot2)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+; ^ meta.parens.lisp - meta.struct
+; ^ - meta.parens
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(defstruct structname (slot-name '() :type string :read-only t))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.struct
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^ variable.other.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^ keyword.other.symbol.lisp
+; ^^^^^^ storage.type.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ keyword.other.symbol.lisp
+; ^ constant.language.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(defstruct structname (slot-name (fun arg) :read-only t))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.struct.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.struct
+;^^^^^^^^^ keyword.declaration.struct.lisp
+; ^^^^^^^^^^ entity.name.struct.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^ variable.other.lisp
+; ^^^^^^^^^ meta.parens.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ meta.function-call.lisp variable.function.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^^^^^ keyword.other.symbol.lisp
+; ^ constant.language.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;####################
+; TYPE DECLARATIONS #
+;####################
+
+(deftype typename)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp - meta.type
+;^^^^^^^^^^^^^^^^ meta.parens.lisp meta.type.lisp
+;^^^^^^^ keyword.declaration.type.lisp
+; ^^^^^^^^ entity.name.type.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp - meta.type
+
+(deftype square-matrix (&optional type size)
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.type.lisp
+; ^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.type.parameters.lisp
+; ^ meta.parens.lisp meta.type.lisp
+;^^^^^^^ keyword.declaration.type.lisp
+; ^^^^^^^^^^^^^ entity.name.type.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^^^^^^ variable.annotation.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^ variable.parameter.lisp
+; ^ punctuation.section.parameters.end.lisp
+ `(and (array ,type (,size ,size))
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.type.lisp
+; ^^^ keyword.operator.logical.lisp
+; ^^^^^ storage.type.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.definition.variable.lisp
+; ^^^^ variable.other.lisp
+ (satisfies equidimensional)))
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.type.lisp meta.parens.lisp
+; ^ meta.parens.lisp punctuation.section.parens.end.lisp - meta.type
+; ^ - meta.parens
+; ^^^^^^^^^ keyword.operator.logical.lisp
+; ^^^^^^^^^^^^^^^ variable.other.lisp
+
+;########################
+; VARIABLE DECLARATIONS #
+;########################
+
+(defconstant +name+ value "documentation")
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp
+;^^^^^^^^^^^^^^^^^^ meta.declaration.lisp
+;^^^^^^^^^^^ keyword.declaration.constant.lisp
+; ^^^^^^ constant.other.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(defparameter *name* value "documentation")
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp
+;^^^^^^^^^^^^^^^^^^^ meta.declaration.lisp
+;^^^^^^^^^^^^ keyword.declaration.variable.lisp
+; ^^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.end.lisp
+
+(defvar *name* value "documentation")
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp
+;^^^^^^^^^^^^^ meta.declaration.lisp
+;^^^^^^ keyword.declaration.variable.lisp
+; ^^^^^^ variable.other.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.end.lisp
+
+;##############################
+; LOCAL FUNCTION DECLARATIONS #
+;##############################
+
+(flet ((fun1 (arg1 (arg2 default)) "docstring" (print foo)) (fun2 () (print foo))) (declare (inline foo) (special x z)))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^ meta.parens meta.parens - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.function
+; ^^^^^ meta.parens meta.parens.lisp meta.parens.lisp meta.function.lisp
+; ^^^^^^ meta.parens meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^^ meta.parens meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.function
+; ^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp
+; ^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+;^^^^ keyword.declaration.function.lisp
+; ^^ punctuation.section.parens.begin.lisp
+; ^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ meta.function.lisp entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ keyword.declaration.declare.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ storage.modifier.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ storage.modifier.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+(labels (
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^ meta.parens.lisp meta.parens.lisp
+;^^^^^^ keyword.declaration.function.lisp
+; ^ punctuation.section.parens.begin.lisp
+
+ (fun1 (arg1 (arg2 default)) (print foo))
+;^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.function
+; ^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp
+; ^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp - meta.function meta.parens
+; ^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp - meta.function meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ (fun2 () "docstring" ()))
+;^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.function
+; ^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp
+; ^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.parameters.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.function.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens - meta.function
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ entity.name.function.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+ (declare (inline foo) (special x z)))
+;^ meta.parens.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ keyword.declaration.declare.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ storage.modifier.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ storage.modifier.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+;###########################
+; LOCAL MACRO DECLARATIONS #
+;###########################
+
+(macrolet (
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^ meta.parens.lisp meta.parens.lisp
+;^^^^^^^^ keyword.declaration.macro.lisp
+; ^ punctuation.section.parens.begin.lisp
+
+ (fun1 (arg1 (arg2 default)) (print foo))
+;^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.macro
+; ^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp
+; ^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.parameters.lisp - meta.macro meta.parens
+; ^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.parameters.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.parameters.lisp - meta.macro meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.macro
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens - meta.macro
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ entity.name.macro.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.parameter.lisp
+; ^^^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+ (fun2 () "docstring" ()))
+;^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.macro
+; ^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp
+; ^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.parameters.lisp
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.macro.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens - meta.macro
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens - meta.macro
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ entity.name.macro.lisp
+; ^ punctuation.section.parameters.begin.lisp
+; ^ punctuation.section.parameters.end.lisp
+; ^^^^^^^^^^^ meta.string.lisp string.quoted.double.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+ (declare (inline foo) (special x z)))
+;^ meta.parens.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ keyword.declaration.declare.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ storage.modifier.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^ storage.modifier.lisp
+; ^ variable.other.lisp
+; ^ variable.other.lisp
+; ^^^ punctuation.section.parens.end.lisp
+
+;##############################
+; LOCAL VARIABLE DECLARATIONS #
+;##############################
+
+(let ( name0 (name1 (list value)) (name2 (list value)) ))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+;^^^ keyword.declaration.variable.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.declaration.lisp variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;########
+; LOOPS #
+;########
+
+(loop
+
+;;; name-clause
+
+ named name
+; ^^^^^ keyword.declaration.name.lisp
+; ^^^^ entity.name.loop.lisp
+
+;;; initial-final-clause
+
+ initially ()
+; ^^^^^^^^^ keyword.control.flow.lisp
+; ^^ meta.parens.lisp
+
+ finally (return (values evens odds))
+;^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^ keyword.control.flow.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ keyword.control.flow.return.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;;; with-clause
+
+ with var1 :float = 10.5 and var2 = true
+; ^^^^ keyword.declaration.variable.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^^ keyword.other.symbol.lisp
+; ^ keyword.operator.lisp
+; ^^^^ constant.numeric.value.lisp
+; ^^^ keyword.operator.logical.lisp
+; ^^^^ variable.other.lisp
+; ^ keyword.operator.lisp
+; ^^^^ constant.language.boolean.lisp
+
+;;; for-as-claus
+
+ for x-list = '(a b c) then (cdr x-list)
+; ^^^ keyword.control.loop.lisp
+; ^^^^^^ variable.other.lisp
+; ^ keyword.operator.lisp
+; ^ punctuation.definition.quoted.lisp
+; ^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^^^^ keyword.control.conditional.lisp
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+
+ as w2 = (read-line f2 nil nil)
+; ^^ keyword.control.loop.lisp
+; ^^ variable.other.lisp
+; ^ keyword.operator.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+
+;;; for-as-in-list
+
+ var in (1 2 3) by 1
+; ^^^ variable.other.lisp
+; ^^ keyword.other.loop.lisp
+; ^^ keyword.other.loop.lisp
+
+;;; for-as-on-list
+
+ var on (1 2 3) by 1
+; ^^^ variable.other.lisp
+; ^^ keyword.other.loop.lisp
+; ^^ keyword.other.loop.lisp
+
+;;; for-as-equals-then
+
+ var = true then false
+; ^^^ variable.other.lisp
+; ^ keyword.operator.lisp
+; ^^^^ constant.language.boolean.lisp
+; ^^^^ keyword.control.conditional.lisp
+; ^^^^^ constant.language.boolean.lisp
+
+;;; for-as-across
+
+ var across (vector 0 1 2)
+; ^^^ variable.other.lisp
+
+;;; for-as-hash
+
+ var being each key in table using (1 2)
+; ^^^ variable.other.lisp
+; ^^^^^ keyword.other.loop.lisp
+; ^^^^ keyword.other.loop.lisp
+; ^^^ variable.other.lisp
+; ^^ keyword.other.loop.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ keyword.other.loop.lisp
+; ^^^^^ meta.parens.lisp meta.parens.lisp
+
+ var being the key of table using (1 2)
+; ^^^ variable.other.lisp
+; ^^^^^ keyword.other.loop.lisp
+; ^^^ keyword.other.loop.lisp
+; ^^^ variable.other.lisp
+; ^^ keyword.other.loop.lisp
+; ^^^^^ variable.other.lisp
+; ^^^^^ keyword.other.loop.lisp
+; ^^^^^ meta.parens.lisp meta.parens.lisp
+
+;;; conditional
+
+ if (if foo nil t)
+; ^^ keyword.control.conditional.lisp
+; ^^ keyword.control.conditional.lisp
+
+ unless (unless foo)
+; ^^^^^^ keyword.control.conditional.lisp
+; ^^^^^^ keyword.control.conditional.lisp
+
+ when (when foo)
+; ^^^^ keyword.control.conditional.lisp
+; ^^^^ keyword.control.conditional.lisp
+
+ else
+; ^^^^ keyword.control.conditional.lisp
+
+ end
+; ^^^ keyword.control.conditional.lisp
+
+;;; termination-test
+
+ always (always foo)
+; ^^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ never (never foo)
+; ^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ repeat (repeat foo)
+; ^^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ thereis (thereis foo)
+; ^^^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ until (until foo)
+; ^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ while (while foo)
+; ^^^^^ keyword.control.loop.lisp
+; ^ variable.function.lisp
+
+ do (do something)
+; ^^ keyword.control.loop.lisp
+; ^^ keyword.control.loop.lisp
+
+;;; list-accumulation
+
+ collect it into var
+; ^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ collecting it into var
+; ^^^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ append it into var
+; ^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ appending it into var
+; ^^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ nconc it into var
+; ^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ nconcing it into var
+; ^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+;;; numeric-accumulation
+
+ count it into var
+; ^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ counting it into var
+; ^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ sum it into var
+; ^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ summing it into var
+; ^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ maximize it into var
+; ^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ maximizing it into var
+; ^^^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ minimize it into var
+; ^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+
+ minimizing it into var
+; ^^^^^^^^^^ support.function.lisp
+; ^^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^ variable.other.lisp
+)
+
+(loop repeat 10
+; <- meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+;^^^^ keyword.control.loop.lisp
+; ^^^^^^ keyword.control.loop.lisp
+ for x = (random 100)
+; ^^^ keyword.control.loop.lisp
+; ^ variable.other.lisp
+; ^ keyword.operator.lisp
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+ if (evenp x)
+; ^^ keyword.control.conditional.lisp
+ collect x into evens
+; ^^^^^^^ support.function.lisp
+; ^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^^^ variable.other.lisp
+ and do (format t "~a is even!~%" x)
+; ^^^ keyword.operator.logical.lisp
+; ^^ keyword.control.loop.lisp
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp
+ else
+; ^^^^ keyword.control.conditional.lisp
+ collect x into odds
+; ^^^^^^^ support.function.lisp
+; ^ variable.other.lisp
+; ^^^^ keyword.operator.assignment.lisp
+; ^^^^ variable.other.lisp
+ and count t into n-odds
+; ^^^ keyword.operator.logical.lisp
+; ^^^^^ support.function.lisp
+; ^ constant.language.lisp
+; ^^^^ keyword.operator.assignment.lisp
+ finally (return (values evens odds)))
+; ^^^^^^^ keyword.control.flow.lisp
+
+(do (var1 (var2 (list 1 2 3) step)) (until (eq var1 5)) (print var2))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+;^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ meta.function-call.lisp support.function.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp variable.function.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^ keyword.operator.comparison.lisp
+; ^^^^ variable.other.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(dolist (i (list 1 2 3)) (print i))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^ meta.parens.lisp
+; ^^^ meta.parens.lisp meta.parens.lisp
+; ^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp
+; ^ - meta.parens
+;^^^^^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^ support.function.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+;
+
+(dotimes (temp-one 10 temp-one))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^ variable.other.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^^^^^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(do-symbols (var) (print var))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^^^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(do-all-symbols (var) (print var))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^^^^^^^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(do-external-symbols (var) (print var))
+; <- meta.parens.lisp punctuation.section.parens.begin.lisp
+;^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^^^^^^^^^^^^^ keyword.control.loop.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^ variable.other.lisp
+; ^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^^^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+(iterate ((i (scan-range :from 1 :upto 10 :by 2))) (print i))
+; <- meta.parens.lisp - meta.parens meta.parens
+;^^^^^^^^ meta.parens.lisp - meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ meta.parens.lisp meta.parens.lisp meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp meta.parens.lisp - meta.parens meta.parens meta.parens
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^^^^^^^^^ meta.parens.lisp meta.parens.lisp
+; ^ meta.parens.lisp - meta.parens meta.parens
+; ^ - meta.parens
+;^^^^^^^ keyword.control.loop.lisp
+; ^^ punctuation.section.parens.begin.lisp
+; ^ variable.other.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^^^^^^ meta.function-call.lisp support.function.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^ keyword.other.symbol.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.accessor.lisp
+; ^^^^ keyword.other.symbol.lisp
+; ^^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^ punctuation.accessor.lisp
+; ^^ keyword.other.symbol.lisp
+; ^ meta.number.integer.decimal.lisp constant.numeric.value.lisp
+; ^^^ punctuation.section.parens.end.lisp
+; ^ punctuation.section.parens.begin.lisp
+; ^^^^^ meta.function-call.lisp support.function.lisp
+; ^ variable.other.lisp
+; ^^ punctuation.section.parens.end.lisp
+
+;########
+; OTHER #
+;########
+
+(format t "Color ~A, number1 ~D, number2 ~5,'0D, hex ~X, float ~5,2F, unsigned value ~D.~%"
+; ^^ constant.other.placeholder
+; ^^ constant.other.placeholder
+; ^^^^^^ constant.other.placeholder
+; ^^ constant.other.placeholder
+; ^^^^^ constant.other.placeholder
+; ^^ constant.other.placeholder
+; ^^ constant.character.escape
+ "red" 123456 89 255 3.14 250)
+;; prints: Color red, number1 123456, number2 00089, hex FF, float 3.14, unsigned value 250.
+