annotate .cms/lib/codemirror/mode/commonlisp/index.html @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents 78edf6b517a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 <!doctype html>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3 <title>CodeMirror: Common Lisp mode</title>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 <meta charset="utf-8"/>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 <link rel=stylesheet href="../../doc/docs.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 <link rel="stylesheet" href="../../lib/codemirror.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 <script src="../../lib/codemirror.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 <script src="commonlisp.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 <style>.CodeMirror {background: #f8f8f8;}</style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 <a href="https://codemirror.net/5"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 <li><a href="../../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 <li><a href="../../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 <li><a href="../index.html">Language modes</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 <li><a class=active href="#">Common Lisp</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 <h2>Common Lisp mode</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 <form><textarea id="code" name="code">(in-package :cl-postgres)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 ;; These are used to synthesize reader and writer names for integer
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 ;; reading/writing functions when the amount of bytes and the
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 ;; signedness is known. Both the macro that creates the functions and
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 ;; some macros that use them create names this way.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33 (eval-when (:compile-toplevel :load-toplevel :execute)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 (defun integer-reader-name (bytes signed)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 (intern (with-standard-io-syntax
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36 (format nil "~a~a~a~a" '#:read- (if signed "" '#:u) '#:int bytes))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 (defun integer-writer-name (bytes signed)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 (intern (with-standard-io-syntax
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 (format nil "~a~a~a~a" '#:write- (if signed "" '#:u) '#:int bytes)))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 (defmacro integer-reader (bytes)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 "Create a function to read integers from a binary stream."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 (let ((bits (* bytes 8)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 (labels ((return-form (signed)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 (if signed
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 `(if (logbitp ,(1- bits) result)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 (dpb result (byte ,(1- bits) 0) -1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 result)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 `result))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 (generate-reader (signed)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 `(defun ,(integer-reader-name bytes signed) (socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 ,(if (= bytes 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 `(let ((result (the (unsigned-byte 8) (read-byte socket))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 (declare (type (unsigned-byte 8) result))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 ,(return-form signed))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 `(let ((result 0))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 (declare (type (unsigned-byte ,bits) result))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 ,@(loop :for byte :from (1- bytes) :downto 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 :collect `(setf (ldb (byte 8 ,(* 8 byte)) result)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 (the (unsigned-byte 8) (read-byte socket))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 ,(return-form signed))))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 `(progn
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 ;; This causes weird errors on SBCL in some circumstances. Disabled for now.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 ;; (declaim (inline ,(integer-reader-name bytes t)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 ;; ,(integer-reader-name bytes nil)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 (declaim (ftype (function (t) (signed-byte ,bits))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 ,(integer-reader-name bytes t)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 ,(generate-reader t)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 (declaim (ftype (function (t) (unsigned-byte ,bits))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 ,(integer-reader-name bytes nil)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 ,(generate-reader nil)))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 (defmacro integer-writer (bytes)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 "Create a function to write integers to a binary stream."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 (let ((bits (* 8 bytes)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 `(progn
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 (declaim (inline ,(integer-writer-name bytes t)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 ,(integer-writer-name bytes nil)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 (defun ,(integer-writer-name bytes nil) (socket value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 (type (unsigned-byte ,bits) value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 ,@(if (= bytes 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 `((write-byte value socket))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 (loop :for byte :from (1- bytes) :downto 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 :collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 socket)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 (values))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 (defun ,(integer-writer-name bytes t) (socket value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 (type (signed-byte ,bits) value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 ,@(if (= bytes 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 `((write-byte (ldb (byte 8 0) value) socket))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 (loop :for byte :from (1- bytes) :downto 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 :collect `(write-byte (ldb (byte 8 ,(* byte 8)) value)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 socket)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100 (values)))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 ;; All the instances of the above that we need.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 (integer-reader 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 (integer-reader 2)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 (integer-reader 4)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 (integer-reader 8)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 (integer-writer 1)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 (integer-writer 2)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 (integer-writer 4)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 (defun write-bytes (socket bytes)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 "Write a byte-array to a stream."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 (type (simple-array (unsigned-byte 8)) bytes)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 (write-sequence bytes socket))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 (defun write-str (socket string)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 "Write a null-terminated string to a stream \(encoding it when UTF-8
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 support is enabled.)."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 (type string string)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 (enc-write-string string socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 (write-uint1 socket 0))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 (declaim (ftype (function (t unsigned-byte)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 (simple-array (unsigned-byte 8) (*)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 read-bytes))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 (defun read-bytes (socket length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 "Read a byte array of the given length from a stream."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 (type fixnum length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 (let ((result (make-array length :element-type '(unsigned-byte 8))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 (read-sequence result socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 result))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 (declaim (ftype (function (t) string) read-str))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 (defun read-str (socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 "Read a null-terminated string from a stream. Takes care of encoding
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 when UTF-8 support is enabled."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 (enc-read-string socket :null-terminated t))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 (defun skip-bytes (socket length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 "Skip a given number of bytes in a binary stream."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 (type (unsigned-byte 32) length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 (dotimes (i length)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 (read-byte socket)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 (defun skip-str (socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 "Skip a null-terminated string."
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 (declare (type stream socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 #.*optimize*)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 (loop :for char :of-type fixnum = (read-byte socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 :until (zerop char)))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164 (defun ensure-socket-is-closed (socket &amp;key abort)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 (when (open-stream-p socket)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 (handler-case
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 (close socket :abort abort)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 (error (error)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169 (warn "Ignoring the error which happened while trying to close PostgreSQL socket: ~A" error)))))
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 <script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 var editor = CodeMirror.fromTextArea(document.getElementById("code"), {lineNumbers: true});
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 <p><strong>MIME types defined:</strong> <code>text/x-common-lisp</code>.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 </article>