import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . gest ures . detect Tap Gest ures Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . Spacer Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . draw Be hind Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . graphics . Image Bitmap Ċ import Ġandroidx . compose . ui . graphics . p ainter . Bitmap Painter Ċ import Ġandroidx . compose . ui . graphics . p ainter . Painter Ċ import Ġandroidx . compose . ui . graphics . to Compose Image Bitmap Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . platform . Local Uri Handler Ċ import Ġandroidx . compose . ui . text . Paragraph Style Ċ import Ġandroidx . compose . ui . text . Span Style Ċ import Ġandroidx . compose . ui . text . Text Layout Result Ċ import Ġandroidx . compose . ui . text . build Annotated String Ċ import Ġandroidx . compose . ui . text . font . FontStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . style . Text Align Ċ import Ġandroidx . compose . ui . text . style . Text Decoration Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . mike pen z . markdown . Code Ċ import Ġcom . mike pen z . markdown . Markdown Ċ import Ġcom . mike pen z . markdown . Markdown Defaults Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġkotlinx . serialization . json . jsonObject Ċ import Ġkotlinx . serialization . json . json Primitive Ċ import Ġorg . jetbrains . sk ia . Image Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Http URLConnection Ċ import Ġjava . net . URL Ċ Ċ @ Composable Ċ internal Ġfun ĠArticle Markdown Block ( elem : ĠJsonObject ) Ġ{ ĊĠĠĠ Ġelem [" markdown "] ?. json Primitive ?. content ?. let Ġ{ Ġcontent Ġ-> ĊĠĠĠĠĠĠĠ ĠMarkdown ( content ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ internal Ġfun ĠArticle Code Block ( elem : ĠJsonObject ) Ġ{ ĊĠĠĠ Ġelem [" code "] ?. json Primitive ?. content ?. let Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠ ĠCode ( code , Ġcolors Ġ= ĠMarkdown Defaults . markdown Colors ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ internal Ġfun ĠArticle Quote Block ( elem : ĠJsonObject ) Ġ{ ĊĠĠĠ Ġval Ġquote Ġ= Ġelem [" quote "] ?. json Primitive ?. content ĊĠĠĠ Ġval Ġsource Ġ= Ġelem [" link name "] ?. json Primitive ?. content ?. take If Ġ{ Ġs Ġ-> Ġs . isNotEmpty () Ġ} ĊĠĠĠ Ġval Ġlink Ġ= Ġelem [" link url "] ?. json Primitive ?. content ĊĊĠĠĠ Ġ// ĠUri Handler Ġparse Ġand Ġopens ĠURI Ġinside ĠAnnot ated String ĠItem Ġin ĠB rowse ĊĠĠĠ Ġval Ġuri Handler Ġ= ĠLocal Uri Handler . current ĊĠĠĠ Ġval Ġlayout Result Ġ= Ġremember Ġ{ Ġmutable State Of < Text Layout Result ? >( null ) Ġ} ĊĊĠĠĠ Ġval Ġcolor Ġ= ĠMaterial Theme . colors . on Background ĊĠĠĠ ĠBox ( modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 1 6 . dp , Ġbottom Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠ Ġ. draw Be hind Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Line ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 4 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġ= ĠOffset ( 8 . dp . value , Ġ 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġ= ĠOffset ( 8 . dp . value , Ġsize . height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. padding ( start Ġ= Ġ 1 2 . dp )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuild Annotated String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style ( Material Theme . typography . body 1 . to Span Style (). plus ( Span Style ( font Style Ġ= ĠFont Style . Italic ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( quote Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink ?. let Ġ{ Ġpush String Annotation (" url ", Ġlink ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style ( Paragraph Style ( textAlign Ġ= ĠText Align . End )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Style ( Material Theme . typography . body 2 . to Span Style (). plus ( Span Style ( text Decoration Ġ= ĠText Decoration . Underline , ĠfontWeight Ġ= ĠFontWeight . Bold ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠText ( text , ĠModifier . pointer Input ( Unit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Tap Gest ures Ġ{ Ġpos Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Result . value ?. let Ġ{ Ġlayout Result Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġlayout Result . get Offset For Position ( pos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . getString Annotations ( position , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġa Ġ-> Ġa . tag Ġ== Ġ" url " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġa Ġ-> Ġuri Handler . open Uri ( a . item ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġon Text Layout Ġ= Ġ{ Ġlayout Result . value Ġ= Ġit Ġ}) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Composable Ċ internal Ġfun ĠArticle Image Block ( elem : ĠJsonObject ) Ġ{ ĊĠĠĠ Ġval Ġurl Ġ= Ġelem [" image "] ?. jsonObject ?. get (" filename ") ?. json Primitive ?. content ĊĊĠĠĠ Ġif Ġ( url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Painter ( url )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . padding ( 4 . dp )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" Image ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Fill Width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . padding ( 4 . dp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ internal Ġfun Ġimage Painter ( url : ĠString ): ĠP ainter ? Ġ{ ĊĠĠĠ Ġreturn Ġfetch Image ( url )?. let Ġ{ ĠBitmap Painter ( it ) Ġ} Ċ } Ċ Ċ @ Composable Ċ fun Ġfetch Image ( url : ĠString ): ĠImage Bitmap ? Ġ{ ĊĠĠĠ Ġvar Ġimage Ġby Ġremember ( url ) Ġ{ Ġmutable State Of < Image Bitmap ? >( null ) Ġ} ĊĠĠĠ ĠLa unched Effect ( url ) Ġ{ ĊĠĠĠĠĠĠĠ Ġimage Ġ= Ġload Picture ( url ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġimage Ċ } Ċ Ċ suspend Ġfun Ġload Picture ( url : ĠString ): ĠImage Bitmap ? Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠ Ġreturn @ with Context Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnection : ĠHttp URLConnection Ġ= ĠURL ( url ). open Connection () Ġas ĠHttp URLConnection ĊĠĠĠĠĠĠĠ Ġconnection . connect Timeout Ġ= Ġ 5 0 0 0 ĊĠĠĠĠĠĠĠ Ġconnection . connect () ĊĊĠĠĠĠĠĠĠ Ġval Ġinput : ĠInputStream Ġ= Ġconnection . inputStream ĊĠĠĠĠĠĠĠ ĠImage . make From Encoded ( input . read Bytes ()). to Compose Image Bitmap () ĊĠĠĠ Ġ}. get OrNull () Ċ }