+19
Janet/chapter4/html-prettier.janet
+19
Janet/chapter4/html-prettier.janet
···
···
1
+
(defn element-to-struct [tag attrs children]
2
+
{:tag tag :attrs (struct ;attrs) :children children})
3
+
4
+
(def html-peg (peg/compile
5
+
~{:main (* :nodes -1)
6
+
:nodes (any (+ :element :text))
7
+
:element (unref
8
+
{:main (/ (* :open-tag (group :nodes) :close-tag) ,element-to-struct)
9
+
:open-tag (* "<" (<- :w+ :tag-name) (group (? (* :s+ :attributes))) ">")
10
+
:attributes
11
+
{:main (some (* :attribute (? :s+)))
12
+
:attribute (* (<- :w+) "=" :quoted-string)
13
+
:quoted-string (* `"` (<- (any (if-not `"` 1))) `"`)}
14
+
:close-tag (* "</" (backmatch :tag-name) ">")})
15
+
:text (<- (some (if-not "<" 1)))}))
16
+
17
+
(defn main [&]
18
+
(def input (string/trim (file/read stdin :all)))
19
+
(pp (peg/match html-peg input)))
+16
Janet/chapter5/blocking.janet
+16
Janet/chapter5/blocking.janet
···
···
1
+
(defn print-dots []
2
+
(while true
3
+
(prin ".")
4
+
(flush)
5
+
(ev/sleep 0)))
6
+
7
+
(ev/call print-dots)
8
+
9
+
(def f (file/open "lorem-ipsum.txt" :r))
10
+
(print "About to read")
11
+
(def bytes (file/read f 10))
12
+
(print "Done reading")
13
+
(file/close f)
14
+
(print "Done closing the file")
15
+
(printf "read %q" bytes)
16
+
(os/exit 0)
+5
Janet/chapter5/dynamic.janet
+5
Janet/chapter5/dynamic.janet
+15
Janet/chapter5/event-loop.janet
+15
Janet/chapter5/event-loop.janet
···
···
1
+
(defn visualize-time []
2
+
(var stopped false)
3
+
(while (not stopped)
4
+
(prin ".")
5
+
(flush)
6
+
(if (= (ev/sleep 0.1) :stop)
7
+
(set stopped true))))
8
+
9
+
(def background-fiber (ev/call visualize-time))
10
+
11
+
(print "hello")
12
+
(ev/sleep 1)
13
+
(print "goodbye")
14
+
15
+
(ev/go background-fiber :stop)
+9
Janet/chapter5/fiber-caught.janet
+9
Janet/chapter5/fiber-caught.janet
+27
Janet/chapter5/fiber.janet
+27
Janet/chapter5/fiber.janet
···
···
1
+
(defn print-something []
2
+
(print "something"))
3
+
4
+
(def fiber (fiber/new print-something))
5
+
(resume fiber)
6
+
7
+
(defn range [count]
8
+
(for i 0 count
9
+
(yield i))
10
+
"done")
11
+
12
+
(def fiber (fiber/new (fn [] (range 5))))
13
+
14
+
(each value fiber
15
+
(print value))
16
+
17
+
(defn yield-twice [x]
18
+
(yield x)
19
+
(yield x))
20
+
21
+
(defn double-range [count]
22
+
(for i 0 count
23
+
(yield-twice i)))
24
+
25
+
(def fiber (fiber/new (fn [] (double-range 5))))
26
+
(each value fiber
27
+
(print value))
+9
Janet/chapter5/fiberror.janet
+9
Janet/chapter5/fiberror.janet
+1
Janet/chapter5/lorem-ipsum.txt
+1
Janet/chapter5/lorem-ipsum.txt
···
···
1
+
Lorem ipsum dolor sit amet.
+1
Janet/chapter5/output.txt
+1
Janet/chapter5/output.txt
···
···
1
+
but this writes to aa file
+16
Janet/chapter5/streams.janet
+16
Janet/chapter5/streams.janet
···
···
1
+
(defn print-dots []
2
+
(while true
3
+
(prin ".")
4
+
(flush)
5
+
(ev/sleep 0)))
6
+
7
+
(ev/call print-dots)
8
+
9
+
(def f (os/open "lorem-ipsum.txt" :r))
10
+
(print "About to read")
11
+
(def bytes (ev/read f 10))
12
+
(print "Done reading")
13
+
(ev/close f)
14
+
(print "Done closing the file")
15
+
(printf "read %q" bytes)
16
+
(os/exit 0)