)]}'
{"web/panettone/src/inline-markdown.lisp":[{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"906af58b6236dd5874c9823e042ecdca0aa53d25","unresolved":true,"context_lines":[{"line_number":14,"context_line":"  tokens are either :normal (normal text), :special (syntactically"},{"line_number":15,"context_line":"  significant) or :escaped (escaped using \\\\). If the string is"},{"line_number":16,"context_line":"  empty, a pseudo-token named :endofinput is returned. Return value"},{"line_number":17,"context_line":"  is a list where the first element is the token type, the second"},{"line_number":18,"context_line":"  the token content and optionally the third the markup type.\""},{"line_number":19,"context_line":"  ; special tokens are syntactically significant characters"},{"line_number":20,"context_line":"  ; or strings for our inline markdown subset. “normal” tokens"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"90edd9e6_87cdd890","line":17,"updated":"2021-01-19 14:31:23.000000000","message":"Can you not return multiple values instead? cf http://www.lispworks.com/documentation/HyperSpec/Body/f_values.htm","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"09948b14293263c802584ac74da73cd07d0d1ddc","unresolved":false,"context_lines":[{"line_number":14,"context_line":"  tokens are either :normal (normal text), :special (syntactically"},{"line_number":15,"context_line":"  significant) or :escaped (escaped using \\\\). If the string is"},{"line_number":16,"context_line":"  empty, a pseudo-token named :endofinput is returned. Return value"},{"line_number":17,"context_line":"  is a list where the first element is the token type, the second"},{"line_number":18,"context_line":"  the token content and optionally the third the markup type.\""},{"line_number":19,"context_line":"  ; special tokens are syntactically significant characters"},{"line_number":20,"context_line":"  ; or strings for our inline markdown subset. “normal” tokens"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"b2965d39_574628f6","line":17,"in_reply_to":"5c2d2b01_6cad89f4","updated":"2021-01-25 21:01:55.000000000","message":"Done","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"a35a8b88675adc0afae375ee8fd928b05ce9a633","unresolved":true,"context_lines":[{"line_number":14,"context_line":"  tokens are either :normal (normal text), :special (syntactically"},{"line_number":15,"context_line":"  significant) or :escaped (escaped using \\\\). If the string is"},{"line_number":16,"context_line":"  empty, a pseudo-token named :endofinput is returned. Return value"},{"line_number":17,"context_line":"  is a list where the first element is the token type, the second"},{"line_number":18,"context_line":"  the token content and optionally the third the markup type.\""},{"line_number":19,"context_line":"  ; special tokens are syntactically significant characters"},{"line_number":20,"context_line":"  ; or strings for our inline markdown subset. “normal” tokens"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"5c2d2b01_6cad89f4","line":17,"in_reply_to":"90edd9e6_87cdd890","updated":"2021-01-19 15:20:51.000000000","message":"Yeah that would be better, but the loop macro has no nice syntax for destructing multiple values I think, so I\u0027d end up using multiple-values-list anyways I fear.\n\nWe could definitely match the returned list to avoid the whole car, cadr, caddr mess in render-inline-markdown, maybe.","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"906af58b6236dd5874c9823e042ecdca0aa53d25","unresolved":true,"context_lines":[{"line_number":19,"context_line":"  ; special tokens are syntactically significant characters"},{"line_number":20,"context_line":"  ; or strings for our inline markdown subset. “normal” tokens"},{"line_number":21,"context_line":"  ; the strings in between"},{"line_number":22,"context_line":"  (let* ((special-toks (cons (list \"\\\\\" :escape) +inline-markup-types+))"},{"line_number":23,"context_line":"         (toks (loop"},{"line_number":24,"context_line":"                 for tok in special-toks"},{"line_number":25,"context_line":"                 for pos \u003d (search (car tok) mkdn)"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"d3d190b3_e798b361","line":22,"updated":"2021-01-19 14:31:23.000000000","message":"This could maybe have a #. before (cons ...) to compute it at compile-time, seeing as it doesn\u0027t look like you mutate SPECIAL-TOKS anywhere.","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"a35a8b88675adc0afae375ee8fd928b05ce9a633","unresolved":false,"context_lines":[{"line_number":19,"context_line":"  ; special tokens are syntactically significant characters"},{"line_number":20,"context_line":"  ; or strings for our inline markdown subset. “normal” tokens"},{"line_number":21,"context_line":"  ; the strings in between"},{"line_number":22,"context_line":"  (let* ((special-toks (cons (list \"\\\\\" :escape) +inline-markup-types+))"},{"line_number":23,"context_line":"         (toks (loop"},{"line_number":24,"context_line":"                 for tok in special-toks"},{"line_number":25,"context_line":"                 for pos \u003d (search (car tok) mkdn)"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"e3a7ea24_0a1a8cf6","line":22,"in_reply_to":"d3d190b3_e798b361","updated":"2021-01-19 15:20:51.000000000","message":"Thanks!","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"906af58b6236dd5874c9823e042ecdca0aa53d25","unresolved":true,"context_lines":[{"line_number":25,"context_line":"                 for pos \u003d (search (car tok) mkdn)"},{"line_number":26,"context_line":"                 when pos collect (cons tok pos)))"},{"line_number":27,"context_line":"         (next-tok"},{"line_number":28,"context_line":"           (if (null toks)"},{"line_number":29,"context_line":"             nil"},{"line_number":30,"context_line":"             (reduce (lambda (a b) (if (\u003c (cdr a) (cdr b)) a b)) toks))))"},{"line_number":31,"context_line":"    (cond"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"fc3089c4_5e87ce8f","line":28,"updated":"2021-01-19 14:31:23.000000000","message":"better: (unless (null toks) (reduce ...))","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"a35a8b88675adc0afae375ee8fd928b05ce9a633","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                 for pos \u003d (search (car tok) mkdn)"},{"line_number":26,"context_line":"                 when pos collect (cons tok pos)))"},{"line_number":27,"context_line":"         (next-tok"},{"line_number":28,"context_line":"           (if (null toks)"},{"line_number":29,"context_line":"             nil"},{"line_number":30,"context_line":"             (reduce (lambda (a b) (if (\u003c (cdr a) (cdr b)) a b)) toks))))"},{"line_number":31,"context_line":"    (cond"}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"607277f4_3d8f3075","line":28,"in_reply_to":"fc3089c4_5e87ce8f","updated":"2021-01-19 15:20:51.000000000","message":"Done","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000008,"name":"eta","email":"tvl@eta.st","username":"eta"},"change_message_id":"906af58b6236dd5874c9823e042ecdca0aa53d25","unresolved":true,"context_lines":[{"line_number":88,"context_line":"  (check-type s string)"},{"line_number":89,"context_line":"  (check-type target stream)"},{"line_number":90,"context_line":"  (loop"},{"line_number":91,"context_line":"    for  x \u003d (next-token s)"},{"line_number":92,"context_line":"    do (setq s (subseq s (token-length x)))"},{"line_number":93,"context_line":"    when (eq (car x) :endofinput)"},{"line_number":94,"context_line":"    return \"\""}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"e4e28c15_3e0371ed","line":91,"updated":"2021-01-19 14:31:23.000000000","message":"nit: whitespace","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"a35a8b88675adc0afae375ee8fd928b05ce9a633","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  (check-type s string)"},{"line_number":89,"context_line":"  (check-type target stream)"},{"line_number":90,"context_line":"  (loop"},{"line_number":91,"context_line":"    for  x \u003d (next-token s)"},{"line_number":92,"context_line":"    do (setq s (subseq s (token-length x)))"},{"line_number":93,"context_line":"    when (eq (car x) :endofinput)"},{"line_number":94,"context_line":"    return \"\""}],"source_content_type":"text/x-common-lisp","patch_set":6,"id":"1ccb6577_7f74596a","line":91,"in_reply_to":"e4e28c15_3e0371ed","updated":"2021-01-19 15:20:51.000000000","message":"Done","commit_id":"bd00149e0bca6dc16df0079aa77eba4602fa1e59"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"eb14632efa4e5cf0d096685d595c085933f44216","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    when (eq tok-type :endofinput)"},{"line_number":96,"context_line":"    return \"\""},{"line_number":97,"context_line":"    when (eq tok-type :normal)"},{"line_number":98,"context_line":"    do (write-string (who:escape-string tok-str) target)"},{"line_number":99,"context_line":"    when (eq tok-type :escaped)"},{"line_number":100,"context_line":"    do (progn"},{"line_number":101,"context_line":"         ; if normal tokens are escaped we treat the \\ as if it were \\\\"}],"source_content_type":"text/x-common-lisp","patch_set":8,"id":"87eeb021_d736ca83","line":98,"updated":"2021-01-25 20:10:31.000000000","message":"ahh, never mind, I see it now. Ignore me","commit_id":"5030ad1c3e93ffea1714a1c637ff4fdcd39c032d"}],"web/panettone/test/inline-markdown_test.lisp":[{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"eb14632efa4e5cf0d096685d595c085933f44216","unresolved":false,"context_lines":[{"line_number":21,"context_line":"(inline-markdown-unit-test"},{"line_number":22,"context_line":"  inline-markdown-html-escaping-test"},{"line_number":23,"context_line":"  \"\u003ctag\u003eöäü\""},{"line_number":24,"context_line":"  \"\u0026lt;tag\u0026gt;\u0026#246;\u0026#228;\u0026#252;\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"(inline-markdown-unit-test"},{"line_number":27,"context_line":"  inline-markdown-nesting-test"}],"source_content_type":"text/x-common-lisp","patch_set":8,"id":"e05729f9_8c450b95","line":24,"updated":"2021-01-25 20:10:31.000000000","message":"hm, I suppose this is ostensibly XSS safety","commit_id":"5030ad1c3e93ffea1714a1c637ff4fdcd39c032d"},{"author":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"change_message_id":"137fed93ffe0d987fe36b7000929a3d3a00683de","unresolved":false,"context_lines":[{"line_number":21,"context_line":"(inline-markdown-unit-test"},{"line_number":22,"context_line":"  inline-markdown-html-escaping-test"},{"line_number":23,"context_line":"  \"\u003ctag\u003eöäü\""},{"line_number":24,"context_line":"  \"\u0026lt;tag\u0026gt;\u0026#246;\u0026#228;\u0026#252;\")"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"(inline-markdown-unit-test"},{"line_number":27,"context_line":"  inline-markdown-nesting-test"}],"source_content_type":"text/x-common-lisp","patch_set":8,"id":"7d9f735f_f10c0820","line":24,"in_reply_to":"e05729f9_8c450b95","updated":"2021-01-25 20:54:03.000000000","message":"Yes, who:escape-string is pretty aggressive.\n\nAs a side note, we could contemplate to switch to who:escape-string-minimal-plus-quotes for panettone as a whole which would make the HTML source a bit more human readable probably.","commit_id":"5030ad1c3e93ffea1714a1c637ff4fdcd39c032d"}]}
