this repo has no description

:sparkles: (Janet) chapter 4 and 5

+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
··· 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
··· 1 + (def file (file/open "output.txt" :w)) 2 + (print "everything is normal") 3 + (with-dyns [*out* file] 4 + (print "but this writes to a file")) 5 + (print "back to normal")
+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
··· 1 + (defn do-your-best [] 2 + (error "oh no")) 3 + 4 + (defn believe-in-yourself [] 5 + (while true 6 + (do-your-best))) 7 + 8 + (def fiber (fiber/new believe-in-yourself :e)) 9 + (resume fiber)
+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
··· 1 + (defn do-your-best [] 2 + (error "oh no")) 3 + 4 + (defn believe-in-yourself [] 5 + (while true 6 + (do-your-best))) 7 + 8 + (def fiber (fiber/new believe-in-yourself)) 9 + (resume fiber)
+1
Janet/chapter5/lorem-ipsum.txt
··· 1 + Lorem ipsum dolor sit amet.
+1
Janet/chapter5/output.txt
··· 1 + but this writes to aa file
+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)