tangled
alpha
login
or
join now
tulkdan.dev
/
Languages
0
fork
atom
this repo has no description
0
fork
atom
overview
issues
pulls
pipelines
:sparkles: (Janet) chapter 4 and 5
tulkdan.dev
10 months ago
66db8a52
a664f820
+118
10 changed files
expand all
collapse all
unified
split
Janet
chapter4
html-prettier.janet
chapter5
blocking.janet
dynamic.janet
event-loop.janet
fiber-caught.janet
fiber.janet
fiberror.janet
lorem-ipsum.txt
output.txt
streams.janet
+19
Janet/chapter4/html-prettier.janet
reviewed
···
1
1
+
(defn element-to-struct [tag attrs children]
2
2
+
{:tag tag :attrs (struct ;attrs) :children children})
3
3
+
4
4
+
(def html-peg (peg/compile
5
5
+
~{:main (* :nodes -1)
6
6
+
:nodes (any (+ :element :text))
7
7
+
:element (unref
8
8
+
{:main (/ (* :open-tag (group :nodes) :close-tag) ,element-to-struct)
9
9
+
:open-tag (* "<" (<- :w+ :tag-name) (group (? (* :s+ :attributes))) ">")
10
10
+
:attributes
11
11
+
{:main (some (* :attribute (? :s+)))
12
12
+
:attribute (* (<- :w+) "=" :quoted-string)
13
13
+
:quoted-string (* `"` (<- (any (if-not `"` 1))) `"`)}
14
14
+
:close-tag (* "</" (backmatch :tag-name) ">")})
15
15
+
:text (<- (some (if-not "<" 1)))}))
16
16
+
17
17
+
(defn main [&]
18
18
+
(def input (string/trim (file/read stdin :all)))
19
19
+
(pp (peg/match html-peg input)))
+16
Janet/chapter5/blocking.janet
reviewed
···
1
1
+
(defn print-dots []
2
2
+
(while true
3
3
+
(prin ".")
4
4
+
(flush)
5
5
+
(ev/sleep 0)))
6
6
+
7
7
+
(ev/call print-dots)
8
8
+
9
9
+
(def f (file/open "lorem-ipsum.txt" :r))
10
10
+
(print "About to read")
11
11
+
(def bytes (file/read f 10))
12
12
+
(print "Done reading")
13
13
+
(file/close f)
14
14
+
(print "Done closing the file")
15
15
+
(printf "read %q" bytes)
16
16
+
(os/exit 0)
+5
Janet/chapter5/dynamic.janet
reviewed
···
1
1
+
(def file (file/open "output.txt" :w))
2
2
+
(print "everything is normal")
3
3
+
(with-dyns [*out* file]
4
4
+
(print "but this writes to a file"))
5
5
+
(print "back to normal")
+15
Janet/chapter5/event-loop.janet
reviewed
···
1
1
+
(defn visualize-time []
2
2
+
(var stopped false)
3
3
+
(while (not stopped)
4
4
+
(prin ".")
5
5
+
(flush)
6
6
+
(if (= (ev/sleep 0.1) :stop)
7
7
+
(set stopped true))))
8
8
+
9
9
+
(def background-fiber (ev/call visualize-time))
10
10
+
11
11
+
(print "hello")
12
12
+
(ev/sleep 1)
13
13
+
(print "goodbye")
14
14
+
15
15
+
(ev/go background-fiber :stop)
+9
Janet/chapter5/fiber-caught.janet
reviewed
···
1
1
+
(defn do-your-best []
2
2
+
(error "oh no"))
3
3
+
4
4
+
(defn believe-in-yourself []
5
5
+
(while true
6
6
+
(do-your-best)))
7
7
+
8
8
+
(def fiber (fiber/new believe-in-yourself :e))
9
9
+
(resume fiber)
+27
Janet/chapter5/fiber.janet
reviewed
···
1
1
+
(defn print-something []
2
2
+
(print "something"))
3
3
+
4
4
+
(def fiber (fiber/new print-something))
5
5
+
(resume fiber)
6
6
+
7
7
+
(defn range [count]
8
8
+
(for i 0 count
9
9
+
(yield i))
10
10
+
"done")
11
11
+
12
12
+
(def fiber (fiber/new (fn [] (range 5))))
13
13
+
14
14
+
(each value fiber
15
15
+
(print value))
16
16
+
17
17
+
(defn yield-twice [x]
18
18
+
(yield x)
19
19
+
(yield x))
20
20
+
21
21
+
(defn double-range [count]
22
22
+
(for i 0 count
23
23
+
(yield-twice i)))
24
24
+
25
25
+
(def fiber (fiber/new (fn [] (double-range 5))))
26
26
+
(each value fiber
27
27
+
(print value))
+9
Janet/chapter5/fiberror.janet
reviewed
···
1
1
+
(defn do-your-best []
2
2
+
(error "oh no"))
3
3
+
4
4
+
(defn believe-in-yourself []
5
5
+
(while true
6
6
+
(do-your-best)))
7
7
+
8
8
+
(def fiber (fiber/new believe-in-yourself))
9
9
+
(resume fiber)
+1
Janet/chapter5/lorem-ipsum.txt
reviewed
···
1
1
+
Lorem ipsum dolor sit amet.
+1
Janet/chapter5/output.txt
reviewed
···
1
1
+
but this writes to aa file
+16
Janet/chapter5/streams.janet
reviewed
···
1
1
+
(defn print-dots []
2
2
+
(while true
3
3
+
(prin ".")
4
4
+
(flush)
5
5
+
(ev/sleep 0)))
6
6
+
7
7
+
(ev/call print-dots)
8
8
+
9
9
+
(def f (os/open "lorem-ipsum.txt" :r))
10
10
+
(print "About to read")
11
11
+
(def bytes (ev/read f 10))
12
12
+
(print "Done reading")
13
13
+
(ev/close f)
14
14
+
(print "Done closing the file")
15
15
+
(printf "read %q" bytes)
16
16
+
(os/exit 0)