annotate .cms/lib/codemirror/mode/livescript/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: LiveScript 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 <link rel="stylesheet" href="../../theme/solarized.css">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 <script src="../../lib/codemirror.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 <script src="livescript.js"></script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 <style>.CodeMirror {font-size: 80%;border-top: 1px solid silver; border-bottom: 1px solid silver;}</style>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 <div id=nav>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13 <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
14
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 <li><a href="../../index.html">Home</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17 <li><a href="../../doc/manual.html">Manual</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 <li><a href="https://github.com/codemirror/codemirror5">Code</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 <ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21 <li><a href="../index.html">Language modes</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 <li><a class=active href="#">LiveScript</a>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23 </ul>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 </div>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 <article>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 <h2>LiveScript mode</h2>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 <form><textarea id="code" name="code">
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 # LiveScript mode for CodeMirror
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 # The following script, prelude.ls, is used to
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 # demonstrate LiveScript mode for CodeMirror.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 # https://github.com/gkz/prelude-ls
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 export objToFunc = objToFunc = (obj) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35 (key) -> obj[key]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 export each = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 for , x of xs then f x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 for x in xs then f x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 export map = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46 type = typeof! xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 if type is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48 {[key, f x] for key, x of xs}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 result = [f x for x in xs]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 if type is \String then result * '' else result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 export filter = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55 type = typeof! xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 if type is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 {[key, x] for key, x of xs when f x}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 result = [x for x in xs when f x]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60 if type is \String then result * '' else result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 export reject = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 type = typeof! xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 if type is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 {[key, x] for key, x of xs when not f x}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 result = [x for x in xs when not f x]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 if type is \String then result * '' else result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 export partition = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 type = typeof! xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 if type is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 passed = {}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76 failed = {}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 for key, x of xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 (if f x then passed else failed)[key] = x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 passed = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 failed = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 for x in xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83 (if f x then passed else failed)push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 if type is \String
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85 passed *= ''
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 failed *= ''
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 [passed, failed]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 export find = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 for , x of xs when f x then return x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 for x in xs when f x then return x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 void
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 export head = export first = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 return void if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 xs.0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 export tail = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 return void if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103 xs.slice 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 export last = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 return void if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 xs[*-1]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109 export initial = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 return void if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 xs.slice 0 xs.length - 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 export empty = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115 for x of xs then return false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 return yes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119 export values = (obj) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 [x for , x of obj]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122 export keys = (obj) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 [x for x of obj]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 export len = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 xs = values xs if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 export cons = (x, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 if typeof! xs is \String then x + xs else [x] ++ xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 export append = (xs, ys) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133 if typeof! ys is \String then xs + ys else xs ++ ys
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 export join = (sep, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 xs = values xs if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 xs.join sep
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 export reverse = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140 if typeof! xs is \String
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 then (xs / '')reverse! * ''
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 else xs.slice!reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 export fold = export foldl = (f, memo, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 for , x of xs then memo = f memo, x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 for x in xs then memo = f memo, x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 memo
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151 export fold1 = export foldl1 = (f, xs) --> fold f, xs.0, xs.slice 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 export foldr = (f, memo, xs) --> fold f, memo, xs.slice!reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 export foldr1 = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 xs.=slice!reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 fold f, xs.0, xs.slice 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 export unfoldr = export unfold = (f, b) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 if (f b)?
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 [that.0] ++ unfoldr f, that.1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 export andList = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 for x in xs when not x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 return false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 export orList = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 for x in xs when x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 return true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 false
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 export any = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 for x in xs when f x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 return yes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 no
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 export all = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 for x in xs when not f x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 return no
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 yes
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 export unique = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 result = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190 for , x of xs when x not in result then result.push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 for x in xs when x not in result then result.push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 if typeof! xs is \String then result * '' else result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 export sort = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196 xs.concat!sort (x, y) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 | x > y => 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 | x < y => -1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 | _ => 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 export sortBy = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202 return [] unless xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 xs.concat!sort f
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 export compare = (f, x, y) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 | (f x) > (f y) => 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 | (f x) < (f y) => -1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208 | otherwise => 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 export sum = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 result = 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 for , x of xs then result += x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 for x in xs then result += x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 export product = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 result = 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 for , x of xs then result *= x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 for x in xs then result *= x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226 export mean = export average = (xs) -> (sum xs) / len xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 export concat = (xss) -> fold append, [], xss
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 export concatMap = (f, xs) --> fold ((memo, x) -> append memo, f x), [], xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232 export listToObj = (xs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233 {[x.0, x.1] for x in xs}
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 export maximum = (xs) -> fold1 (>?), xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 export minimum = (xs) -> fold1 (<?), xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 export scan = export scanl = (f, memo, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 last = memo
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 if typeof! xs is \Object
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 then [memo] ++ [last = f last, x for , x of xs]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 else [memo] ++ [last = f last, x for x in xs]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 export scan1 = export scanl1 = (f, xs) --> scan f, xs.0, xs.slice 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 export scanr = (f, memo, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 xs.=slice!reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 scan f, memo, xs .reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 export scanr1 = (f, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252 xs.=slice!reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 scan f, xs.0, xs.slice 1 .reverse!
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 export replicate = (n, x) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256 result = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 i = 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 while i < n, ++i then result.push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259 result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 export take = (n, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 | n <= 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 if typeof! xs is \String then '' else []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 | not xs.length => xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 | otherwise => xs.slice 0, n
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 export drop = (n, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 | n <= 0 => xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269 | not xs.length => xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 | otherwise => xs.slice n
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 export splitAt = (n, xs) --> [(take n, xs), (drop n, xs)]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 export takeWhile = (p, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 return xs if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 p = objToFunc p if typeof! p isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 result = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 for x in xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 break if not p x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 result.push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281 if typeof! xs is \String then result * '' else result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 export dropWhile = (p, xs) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284 return xs if not xs.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 p = objToFunc p if typeof! p isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 i = 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287 for x in xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 break if not p x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 ++i
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 drop i, xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 export span = (p, xs) --> [(takeWhile p, xs), (dropWhile p, xs)]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 export breakIt = (p, xs) --> span (not) << p, xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296 export zip = (xs, ys) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 result = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298 for zs, i in [xs, ys]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 for z, j in zs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 result.push [] if i is 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 result[j]?push z
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 export zipWith = (f,xs, ys) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 if not xs.length or not ys.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309 [f.apply this, zs for zs in zip.call this, xs, ys]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 export zipAll = (...xss) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 result = []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313 for xs, i in xss
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 for x, j in xs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 result.push [] if i is 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 result[j]?push x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 result
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 export zipAllWith = (f, ...xss) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 f = objToFunc f if typeof! f isnt \Function
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 if not xss.0.length or not xss.1.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 []
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 else
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 [f.apply this, xs for xs in zipAll.apply this, xss]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326 export compose = (...funcs) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 args = arguments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 for f in funcs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330 args = [f.apply this, args]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 args.0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 export curry = (f) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 curry$ f # using util method curry$ from livescript
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 export id = (x) -> x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 export flip = (f, x, y) --> f y, x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 export fix = (f) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 ( (g, x) -> -> f(g g) ...arguments ) do
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 (g, x) -> -> f(g g) ...arguments
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 export lines = (str) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 return [] if not str.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 str / \\n
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 export unlines = (strs) -> strs * \\n
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 export words = (str) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 return [] if not str.length
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 str / /[ ]+/
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354 export unwords = (strs) -> strs * ' '
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 export max = (>?)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 export min = (<?)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360 export negate = (x) -> -x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 export abs = Math.abs
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364 export signum = (x) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 | x < 0 => -1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 | x > 0 => 1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 | otherwise => 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 export quot = (x, y) --> ~~(x / y)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 export rem = (%)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 export div = (x, y) --> Math.floor x / y
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 export mod = (%%)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377 export recip = (1 /)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 export pi = Math.PI
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381 export tau = pi * 2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 export exp = Math.exp
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 export sqrt = Math.sqrt
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 # changed from log as log is a
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 # common function for logging things
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 export ln = Math.log
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 export pow = (^)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 export sin = Math.sin
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 export tan = Math.tan
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 export cos = Math.cos
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 export asin = Math.asin
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401 export acos = Math.acos
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 export atan = Math.atan
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405 export atan2 = (x, y) --> Math.atan2 x, y
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 # sinh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408 # tanh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 # cosh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 # asinh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411 # atanh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 # acosh
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 export truncate = (x) -> ~~x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416 export round = Math.round
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418 export ceiling = Math.ceil
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 export floor = Math.floor
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 export isItNaN = (x) -> x isnt x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 export even = (x) -> x % 2 == 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 export odd = (x) -> x % 2 != 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 export gcd = (x, y) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429 x = Math.abs x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430 y = Math.abs y
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 until y is 0
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 z = x % y
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 x = y
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434 y = z
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 x
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 export lcm = (x, y) -->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 Math.abs Math.floor (x / (gcd x, y) * y)
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 # meta
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 export installPrelude = !(target) ->
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 unless target.prelude?isInstalled
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 target <<< out$ # using out$ generated by livescript
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 target <<< target.prelude.isInstalled = true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446 export prelude = out$
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447 </textarea></form>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 <script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 theme: "solarized light",
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451 lineNumbers: true
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 });
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 </script>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 <p><strong>MIME types defined:</strong> <code>text/x-livescript</code>.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 <p>The LiveScript mode was written by Kenneth Bentley.</p>
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459 </article>