ustj/web/components/post-text.hoon

126 lines
3.3 KiB
Plaintext
Raw Normal View History

2024-06-27 04:44:31 +00:00
/- tp=post
/+ sr=sortug
|%
++ content
|= c=content-list:tp ^- marl
(turn c block)
++ block
|= b=block:tp ^- manx
?+ -.b ;p;
%paragraph (pg +.b)
%blockquote (bq +.b)
%heading (heading +.b)
%list (htmlist +.b)
%media (media +.b)
%codeblock (codeblock +.b)
%eval (eval +.b)
==
++ eval
|= txt=@t ^- manx
:: Ream can crash if the cord is wrong
:: soften instead
=/ uhoon (rush txt vest)
?~ uhoon ;p:"The hoon you tried to run ({(trip txt)}) is invalid."
=/ run %- mule |.
%+ slap !>(..zuse) u.uhoon
?: ?=(%.n -.run) :: if virtualization fails get a (list tank)
;p
;span:"Evaluation of {(trip txt)} failed:"
;br;
;* %+ turn p.run |= t=tank ;span:"{~(ram re t)}"
==
;p:"{(text p.run)}"
++ pg
|= l=(list inline:tp) ^- manx
;p
;* %+ turn l inline
==
++ bq
|= l=(list inline:tp) ^- manx
;blockquote
;* %+ turn l inline
==
++ htmlist
|= [l=(list content-list:tp) ordered=?]
?: ordered
;ol
;* %+ turn l li
==
;ul
;* %+ turn l li
==
++ li
|= l=content-list:tp ^- manx
;li
;* (turn l block)
==
++ media
|= m=media:tp ^- manx
?- -.m
%video ;video@"{(trip p.m)}";
%audio ;audio@"{(trip p.m)}";
%images ;div.images
;* %+ turn p.m
|= [url=@t caption=@t] ;img@"{(trip url)}"(alt (trip caption));
==
==
++ codeblock
|= [code=@t lang=@t] :: TODO lang suff
;pre
;code:"{(trip code)}"
==
++ heading
|= [pp=@t q=@] ^- manx
=/ p (trip pp)
?: .=(1 q) ;h1:"{p}"
?: .=(2 q) ;h2:"{p}"
?: .=(3 q) ;h3:"{p}"
?: .=(4 q) ;h4:"{p}"
?: .=(5 q) ;h5:"{p}"
?: .=(6 q) ;h6:"{p}"
;p:""
++ inline
|= l=inline:tp ^- manx
?+ -.l ;span;
%text (parse-text p.l)
%italic ;i:"{(trip p.l)}"
%bold ;strong:"{(trip p.l)}"
:: %strike ;del:"{(trip p.l)}"
%ship ;span.ship:"{(trip (scot %p p.l))}"
%codespan ;code:"{(trip p.l)}"
%break ;br;
%img ;a/"{(trip src.l)}"
;img@"{(trip src.l)}"(alt (trip alt.l));
==
%link ?. (is-image:parsing:sr href.l)
;a/"{(trip href.l)}"(target "_blank"):"{(trip show.l)}"
;a/"{(trip href.l)}"
=target "_blank"
;img@"{(trip href.l)}"(alt (trip show.l));
==
==
++ parse-text
|= txt=@t ^- manx
=/ tpe (trip txt)
=/ youtube (rush txt youtube:parsing:sr)
?^ youtube
:: ;a/"{tpe}"
:: ;img@"https://i.ytimg.com/vi/{u.youtube}/hqdefault.jpg";
:: ==
;iframe.youtube-frame@"https://www.youtube.com/embed/{u.youtube}";
=/ twatter-status (rush txt twatter:parsing:sr)
?^ twatter-status
;div :: goddamn twatter embeds insert themselves as last child
;a.parsed-twatter(status u.twatter-status):"{tpe}"
==
=/ trimmed (rush txt trim:parsing:sr)
?~ trimmed ~& parsing-error=txt ;span.parsing-error;
=/ link=(unit purl:eyre) (rust u.trimmed link:parsing:sr)
?^ link
?^ p.q.u.link
?: (is-img:parsing:sr u.p.q.u.link) ;img@"{u.trimmed}";
;a.parsed-link/"{tpe}"(target "_blank"):"{tpe}" :: normal link
;a.parsed-link/"{tpe}"(target "_blank"):"{tpe}" :: normal link
;span:"{tpe}"
--