// ĠCopyright Ġ 2 0 0 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ import Ġcom . google . gson .* Ċ import Ġcom . google . gson . stream . Json Reader Ċ import Ġcom . intellij . application . options . Code Style Ċ import Ġcom . intellij . documentation . md n .* Ċ import Ġcom . intellij . ide . highlighter . Html FileType Ċ import Ġcom . intellij . lang . html . HTML Language Ċ import Ġcom . intellij . lang . javascript . library . J SC ore Pre defined Libraries Provider Ċ import Ġcom . intellij . lang . javascript . psi . J SP si Element Base Ċ import Ġcom . intellij . lang . javascript . psi . stubs . J SS ymbol Index 2 Ċ import Ġcom . intellij . lang . javascript . psi . types . JS Named Type Factory Ċ import Ġcom . intellij . lang . javascript . psi . types . JS Type Context Ċ import Ġcom . intellij . lang . javascript . psi . types . JS Type Source Factory Ċ import Ġcom . intellij . openapi . application . Path Manager Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . util . text . StringUtil Ċ import Ġcom . intellij . psi .* Ċ import Ġcom . intellij . psi . code Style . Code Style Settings Manager Ċ import Ġcom . intellij . psi . code Style . Common Code Style Settings Ċ import Ġcom . intellij . psi . formatter . xml . Html Code Style Settings Ċ import Ġcom . intellij . psi . impl . source . html . Html File Impl Ċ import Ġcom . intellij . psi . stubs . Stub Index Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . intellij . psi . xml .* Ċ import Ġcom . intellij . test Framework . fixtures . Base Platform TestCase Ċ import Ġcom . intellij . util . cast S af ely To Ċ import Ġcom . intellij . util . text . CharSequence Sub Sequence Ċ import Ġcom . intellij . util . text . Name Util Core Ċ import Ġjava . io . File Ċ import Ġjava . io . FileReader Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util .* Ċ Ċ val Ġmissing Doc Ġ= Ġmap Of ( ĊĠ Ġ// HTML ĊĠ Ġ" area " Ġto Ġset Of (" media "), ĊĠ Ġ" audio " Ġto Ġset Of (" buffered ", Ġ" moz current sample offset ", Ġ" play ed ", Ġ" volume "), ĊĠ Ġ" colgroup " Ġto Ġset Of (" width "), ĊĠ Ġ" div " Ġto Ġset Of (" align "), ĊĠ Ġ" ol " Ġto Ġset Of (" compact "), ĊĠ Ġ" img " Ġto Ġset Of (" onerror "), ĊĠ Ġ" script " Ġto Ġset Of (" text "), ĊĠ Ġ" video " Ġto Ġset Of (" play ed "), ĊĊĠ Ġ// Math ML ĊĠ Ġ" mm ult is cript s " Ġto Ġset Of (" dir ", Ġ" math size "), ĊĠ Ġ" mo " Ġto Ġset Of (" move able limits "), ĊĠ Ġ" m style " Ġto Ġset Of (" infix break style "), ĊĊĠ Ġ// ĠSVG ĊĠ Ġ" fe composite " Ġto Ġset Of (" light er for error "), ĊĠ Ġ" h atch " Ġto Ġset Of (" h atch content units ", Ġ" h atch units ", Ġ" pitch "), ĊĠ Ġ" h atch path " Ġto Ġset Of (" offset "), ĊĠ Ġ" switch " Ġto Ġset Of (" allow reorder "), Ċ ) Ċ Ċ val Ġhtml Special Mappings Ġ= Ġmap Of ( ĊĠ Ġ" heading _ elements " Ġto Ġset Of (" h 1 ", Ġ" h 2 ", Ġ" h 3 ", Ġ" h 4 ", Ġ" h 5 ", Ġ" h 6 ") Ċ ) Ċ Ċ val Ġweb Api Block List Ġ= Ġset Of (" index ") Ċ Ċ val Ġjs Runtime s Map Ġ= ĠM dn JavaScript Runtime . values (). associate By Ġ{ Ġit . md n Id Ġ} Ċ Ċ val ĠM DN _ CONTENT _ ROOT Ġ= ĠPath Manager . get Community Home Path () Ġ+ Ġ"/ xml / xml - psi - impl / md n - doc - gen / work / md n - content / files " Ċ val ĠY ARI _ BUILD _ PATH Ġ= ĠPath Manager . get Community Home Path () Ġ+ Ġ"/ xml / xml - psi - impl / md n - doc - gen / work / y ari / client / build " Ċ const Ġval ĠBU IL T _ LANG Ġ= Ġ" en - us " Ċ const Ġval ĠWEB _ DOCS Ġ= Ġ" docs / web " Ċ const Ġval ĠM DN _ DOCS _ URL _ PREFIX Ġ= Ġ"\ $ MD N _ URL \ $" Ċ const Ġval ĠOUTPUT _ DIR Ġ= Ġ" xml / xml - psi - impl / gen / com / intellij / documentation / md n /" Ċ Ċ /* ĠIt 's Ġso Ġmuch Ġeasier Ġto Ġrun Ġa Ġtest , Ġthan Ġto Ġsetup Ġthe Ġwhole ĠI J Ġenvironment Ġ*/ Ċ class ĠGenerate M dn Documentation Ġ: ĠBase Platform TestCase () Ġ{ ĊĊĠ Ġ/* ĠRun Ġthese Ġtests Ġto Ġgenerate Ġdocumentation . ĠPrepare ĠM DN Ġdocumentation Ġrepositories Ġwith Ġ` prepare - md n . sh ` Ġ*/ ĊĠ Ġfun Ġtest Gen Html () Ġ{ ĊĠĠĠ Ġval Ġattributes Ġ= Ġextract Information Simple (" html / global _ attributes ", ĠlistOf ('_ ', Ġ'- '), Ġthis :: extract Attribute Documentation ) ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Html . name , Ġmap Of ( ĊĠĠĠĠĠ Ġ" attrs " Ġto Ġattributes , ĊĠĠĠĠĠ Ġ" tags " Ġto Ġextract Information Simple (" html / element ", ĠlistOf ('_ ', Ġ'- '), Ġallow List Ġ= Ġhtml Special Mappings . keys ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . extract Element Documentation ( it , Ġattributes ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġ" tag Aliases " Ġto Ġreversed Aliases Map ( html Special Mappings ) ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Math ML () Ġ{ ĊĠĠĠ Ġval Ġattributes Ġ= Ġextract Information Simple (" math ml / attribute ", Ġempty List (), Ġthis :: extract Attribute Documentation ) ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Math ML . name , Ġmap Of ( ĊĠĠĠĠĠ Ġ" attrs " Ġto Ġattributes , ĊĠĠĠĠĠ Ġ" tags " Ġto Ġextract Information Simple (" math ml / element ", Ġempty List ()) Ġ{ Ġthis . extract Element Documentation ( it , Ġattributes ) Ġ} ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Svg () Ġ{ ĊĠĠĠ Ġval Ġattributes Ġ= Ġextract Information Simple (" svg / attribute ", ĠlistOf ('_ '), Ġthis :: extract Attribute Documentation ) ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Svg . name , Ġmap Of ( ĊĠĠĠĠĠ Ġ" attrs " Ġto Ġattributes , ĊĠĠĠĠĠ Ġ" tags " Ġto Ġextract Information Simple (" svg / element ", ĠlistOf ('_ ')) Ġ{ Ġthis . extract Element Documentation ( it , Ġattributes ) Ġ} ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Js WebApi () Ġ{ ĊĠĠĠ Ġval Ġsymbols Ġ= Ġextract Information (" api ", ĠlistOf ('_ ', Ġ'- '), Ġblock List Ġ= Ġweb Api Block List ) Ġ{ Ġextract Javascript Documentation ( it , Ġit . name ) Ġ} ĊĠĠĠ Ġval Ġfragments Ġ= Ġweb Api Fragment Starts . map Ġ{ ĠPair ( it , Ġsorted Map Of < String , ĠM dn Js Symbol Documentation >()) Ġ}. toMap ( TreeMap ()) ĊĠĠĠ Ġsymbols . forEach Ġ{ Ġ( name , Ġdoc ) Ġ-> ĊĠĠĠĠĠ Ġfragments . floor Entry ( name [ 0 ]). value [ name ] Ġ= Ġdoc ĊĠĠĠ Ġ} ĊĠĠĠ Ġfragments . forEach Ġ{ Ġ( prefix , Ġsymbols ) Ġ-> ĊĠĠĠĠĠ Ġoutput Json ("${ M dn Api Namespace . WebApi . name }- $ prefix ", Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" symbols " Ġto Ġsymbols ĊĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġindex Ġ= Ġcreate D ts M dn Index ( symbols ) ĊĠĠĠ ĠFile Util . write ToFile ( Path . of ( Path Manager . get Community Home Path (), ĠOUTPUT _ DIR , Ġ"${ M dn Api Namespace . WebApi . name }- index . json "). to File (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson Builder (). set Pretty Print ing (). disable Html Esc aping (). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toJson ( index )) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Js Global Objects () Ġ{ ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Global Objects . name , Ġmap Of ( ĊĠĠĠĠĠ Ġ" symbols " Ġto Ġextract Information (" javascript / reference / global _ objects ", ĠlistOf ('- ', Ġ'_ ')) Ġ{ ĊĠĠĠĠĠĠĠ Ġextract Javascript Documentation ( it , Ġit . name ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Css () Ġ{ ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Css . name , Ġbuild Css Docs ()) ĊĠ Ġ} ĊĊĠ Ġfun Ġtest Gen Dom Events () Ġ{ ĊĠĠĠ Ġoutput Json ( M dn Api Namespace . Dom Events . name , Ġmap Of ( ĊĠĠĠĠĠ Ġ" events " Ġto Ġextract Dom Events (), ĊĠĠĠ Ġ)) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠ Ġsuper . setUp () ĊĠĠĠ Ġval Ġmanager Ġ= ĠCode Style Settings Manager . getInstance ( project ) ĊĠĠĠ Ġval Ġcurr Settings Ġ= Ġmanager . current Settings ĊĠĠĠ Ġval Ġclone Ġ= ĠCode Style . create Test Settings ( curr Settings ) ĊĠĠĠ Ġmanager . set Temporary Settings ( clone ) ĊĠĠĠ Ġval Ġhtml Settings Ġ= Ġclone . get Custom Settings ( Html Code Style Settings :: class . java ) ĊĠĠĠ Ġhtml Settings . HTML _ ATTRIBUTE _ WRAP Ġ= ĠCommon Code Style Settings . DO _ NOT _ WRAP ĊĠĠĠ Ġhtml Settings . HTML _ TEXT _ WRAP Ġ= ĠCommon Code Style Settings . DO _ NOT _ WRAP ĊĠĠĠ Ġclone . get Common Settings ( HTML Language . INSTANCE ). soft Margins . clear () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠ ĠCode Style Settings Manager . getInstance ( project ). drop Temporary Settings () ĊĠĠĠ Ġsuper . te ar Down () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġoutput Json ( outputFile : ĠString , Ġdata : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠ ĠFile Util . write ToFile ( Path . of ( Path Manager . get Community Home Path (), ĠOUTPUT _ DIR , Ġ"$ outputFile . json "). to File (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGson Builder (). set Pretty Print ing (). disable Html Esc aping (). create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toJson ( additional Metadata () Ġ+ Ġdata )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġ< T > Ġextract Information Simple ( md n Path : ĠString , Ġdis allowed Chars : ĠList < Char >, Ġextractor : Ġ( File ) Ġ-> ĠT ): ĠMap < String , ĠT > Ġ= ĊĠĠĠ Ġextract Information Simple ( md n Path , Ġdis allowed Chars , Ġempty Set (), Ġextractor ) ĊĊĠ Ġprivate Ġfun Ġ< T > Ġextract Information Simple ( md n Path : ĠString , Ġdis allowed Chars : ĠList < Char >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow List : ĠSet < String >, Ġextractor : Ġ( File ) Ġ-> ĠT ): ĠMap < String , ĠT > Ġ= ĊĠĠĠ Ġextract Information ( md n Path , Ġdis allowed Chars , Ġallow List ) Ġ{ Ġdoc Dir Ġ-> ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠlistOf ( Pair ( doc Dir . name , Ġextractor ( doc Dir ))) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . err . println (" Error Ġfor Ġ$ doc Dir : Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget M dn Dir ( md n Path : ĠString ): ĠFile Ġ= ĊĠĠĠ ĠPath . of ( Y ARI _ BUILD _ PATH , ĠBU IL T _ LANG , ĠWEB _ DOCS , Ġm dn Path ). to File () ĊĊĠ Ġprivate Ġfun Ġ< T > Ġextract Information ( md n Path : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis allowed Chars : ĠList < Char >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow List : ĠSet < String > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock List : ĠSet < String > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor : Ġ( File ) Ġ-> ĠList < Pair < String , ĠT >> ): ĠMap < String , ĠT > Ġ= ĊĠĠĠ Ġextract Information Full ( getM dn Dir ( md n Path ), Ġdis allowed Chars , Ġallow List , Ġblock List , Ġextractor ) ĊĊĠ Ġprivate Ġfun Ġ< T > Ġextract Information Full ( dir : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdis allowed Chars : ĠList < Char >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow List : ĠSet < String > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock List : ĠSet < String > Ġ= Ġempty Set (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor : Ġ( File ) Ġ-> ĠList < Pair < String , ĠT >> ): ĠMap < String , ĠT > Ġ= ĊĠĠĠ Ġextract Information Full ( dir , Ġ{ Ġ( dis allowed Chars . none Ġ{ Ġch Ġ-> Ġit . contains ( ch ) Ġ} Ġ|| Ġallow List . contains ( it )) Ġ&& Ġ! blockList . contains ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor ) ĊĊĠ Ġprivate Ġfun Ġ< T > Ġextract Information Full ( dir : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Filter : Ġ( String ) Ġ-> ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextractor : Ġ( File ) Ġ-> ĠList < Pair < String , ĠT >> ): ĠMap < String , ĠT > Ġ= ĊĠĠĠ Ġdir . list Files () !!. as Sequence () ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ Ġfile . isDirectory ĊĠĠĠĠĠĠĠ Ġ&& Ġfile . name . toLowerCase ( Locale . US ). let ( name Filter ) ĊĠĠĠĠĠĠĠ Ġ&& ĠFile ( file , Ġ" index . json "). exists () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. flatMap ( extractor ) ĊĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠ Ġ. toMap () ĊĊĊĠ Ġprivate Ġfun Ġadditional Metadata (): ĠMap < String , ĠAny > Ġ= ĊĠĠĠ Ġmap Of ( ĊĠĠĠĠĠ Ġ" license " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" CC - BY - SA Ġ 2 . 5 ", ĊĠĠĠĠĠĠĠ Ġ" url " Ġto Ġ" https :// creativecommons . org / licenses / by - sa / 2 . 5 /", ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġ" author " Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġ" name " Ġto Ġ" Mo zz ila ĠContributors ", ĊĠĠĠĠĠĠĠ Ġ" url " Ġto Ġ" https :// github . com / md n / content " ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġ" lang " Ġto ĠBU IL T _ LANG , ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun Ġextract Element Documentation ( dir : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Attributes : ĠMap < String , ĠM dn Html Attribute Documentation >): ĠM dn Html Element Documentation Ġ{ ĊĠĠĠ Ġval Ġ( compat Data , Ġindex Data Pro se Values ) Ġ= Ġget Compat Data And Pro se Values ( dir ) ĊĊĠĠĠ Ġval Ġelement Doc Ġ= Ġindex Data Pro se Values . first (). get Pro se Content () ĊĊĠĠĠ Ġval Ġattributes Doc Ġ= Ġfilter Pro se ById ( index Data Pro se Values , Ġ" attributes ", Ġ" attributes _ for _ form _ submission ", Ġ" deprecated _ attributes ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ob solete _ attributes ", Ġ" non - standard _ attributes ") ĊĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ{ Ġit . get Pro se Content (). content Ġ} ĊĠĠĠĠĠ Ġ. let Ġ{ ĠRaw Pro se ( it ) Ġ} ĊĊĠĠĠ Ġval Ġstatus Ġ= Ġextract Status ( compat Data ) ĊĠĠĠ Ġval Ġcompatibility Ġ= Ġextract Compatibility Info ( compat Data ) ĊĠĠĠ Ġval Ġdoc Ġ= Ġprocess Element Documentation ( element Doc , Ġget Pro se Content ById ( index Data Pro se Values , Ġ" summary ")) ĊĊĠĠĠ Ġval Ġdocumentation Ġ= Ġdoc . first ĊĠĠĠ Ġval Ġproperties Ġ= Ġdoc . second . take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfilter Pro se ById ( index Data Pro se Values , Ġ" properties ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get Pro se Content () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġprocess Element Documentation ( it , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . second ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĊĠĠĠ Ġreturn ĠM dn Html Element Documentation ( getM dn Docs Url ( dir ), Ġstatus , Ġcompatibility , Ġdocumentation , Ġproperties , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Attributes ( dir , Ġattributes Doc , Ġcompat Data , Ġcommon Attributes )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Attribute Documentation ( dir : ĠFile ): ĠM dn Html Attribute Documentation Ġ{ ĊĠĠĠ Ġval Ġ( compat Data , Ġindex Data Pro se Values ) Ġ= Ġget Compat Data And Pro se Values ( dir ) ĊĠĠĠ Ġreturn ĠM dn Html Attribute Documentation ( getM dn Docs Url ( dir ), Ġextract Status ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Compatibility Info ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Description ( index Data Pro se Values )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Dom Events (): ĠMap < String , ĠM dn Dom Event Documentation > Ġ{ ĊĠĠĠ Ġval Ġprefix Ġ= Ġ"/ $ BUIL T _ LANG /$ WEB _ DOCS / events /" ĊĠĠĠ Ġreturn Ġredirects . as Sequence (). filter Ġ{ Ġit . key . startsWith ( prefix ) Ġ&& Ġ! it . key . contains ("_ ") Ġ&& Ġ! it . value . contains ("# ") Ġ} ĊĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠ ĠPair ( it . key . substring ( prefix . length ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Dom Event Documentation ( Path . of ( Y ARI _ BUILD _ PATH , Ġit . value ). to File ()) Ġ?: Ġreturn @ map NotNull Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. toMap () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Dom Event Documentation ( dir : ĠFile ): ĠM dn Dom Event Documentation ? Ġ{ ĊĠĠĠ Ġval Ġ( compat Data , Ġindex Data Pro se Values ) Ġ= Ġget Compat Data And Pro se Values ( dir ) ĊĠĠĠ Ġreturn ĠM dn Dom Event Documentation ( getM dn Docs Url ( dir ), Ġextract Status ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Compatibility Info ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Event Description ( index Data Pro se Values ) Ġ?: Ġreturn Ġnull ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Javascript Documentation ( dir : ĠFile , Ġname : ĠString ): ĠList < Pair < String , ĠM dn Js Symbol Documentation >> Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġ( compat Data , Ġindex Data Pro se Values ) Ġ= Ġget Compat Data And Pro se Values ( dir ) ĊĠĠĠĠĠ Ġreturn Ġextract Information Full ( dir , ĠlistOf ('_ ', Ġ'- '), Ġblock List Ġ= Ġweb Api Block List ) Ġ{ Ġsub Dir Ġ-> ĊĠĠĠĠĠĠĠ Ġextract Javascript Documentation ( sub Dir , Ġ"$ name .${ sub Dir . name }") ĊĠĠĠĠĠ Ġ}. toList () Ġ+ ĠPair ( name , ĠM dn Js Symbol Documentation ( getM dn Docs Url ( dir ), Ġextract Status ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Compatibility Info ( compat Data ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Description ( index Data Pro se Values ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Parameters ( index Data Pro se Values ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Returns ( index Data Pro se Values )?. patch (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Throws ( index Data Pro se Values ))) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ ĠSystem . err . println (" Error Ġfor Ġ$ dir : Ġ${ e . message }") ĊĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġbuild Css Docs (): ĠMap < String , ĠMap < String , ĠM dn Raw Symbol Documentation >> Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠTreeMap < String , ĠMutable Map < String , ĠM dn Raw Symbol Documentation >>() ĊĠĠĠ Ġval Ġcss M dn Dir Ġ= Ġget M dn Dir (" CSS ") ĊĠĠĠ Ġextract Information Full ( css M dn Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġit . startsWith ("_ colon _ ") Ġ|| Ġit . startsWith ("_ double colon _ ") Ġ|| Ġ! it . contains ('_ ') Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdoc Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Pair ( doc Dir . name , Ġextract Css Element Documentation ( doc Dir ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" Error Ġfor Ġ$ doc Dir : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠ Ġ. forEach Ġ{ Ġ( name , Ġdoc ) Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġname . startsWith ("_ colon _ ") Ġ-> ĠPair (" pseudo Classes ", Ġname . substring ("_ colon _ ". length )) ĊĠĠĠĠĠĠĠĠĠ Ġname . startsWith ("_ double colon _ ") Ġ-> ĠPair (" pseudo Elements ", Ġname . substring ("_ double colon _ ". length )) ĊĠĠĠĠĠĠĠĠĠ Ġname . startsWith ("@ ") Ġ-> ĠPair (" at Rules ", Ġname . substring ( 1 )) ĊĠĠĠĠĠĠĠĠĠ Ġname . endsWith (" () ") Ġ-> ĠPair (" functions ", Ġname . substring ( 0 , Ġname . length Ġ- Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( File ( css M dn Dir , Ġ"$ name / bcd . json "). take If Ġ{ Ġit . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJson Parser . parse Reader ( Json Reader ( FileReader ( file )). also Ġ{ Ġit . is Len ient Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as JsonObject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAs Json Primitive (" query ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . asString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . startsWith (" css . types .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" data Types ", Ġname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" properties ", Ġname ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġ( kind , Ġsimple Name ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġresult . get Or Put ( kind , Ġ:: TreeMap )[ simple Name ] Ġ= Ġdoc ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Css Element Documentation ( dir : ĠFile ): ĠM dn Raw Symbol Documentation Ġ{ ĊĠĠĠ Ġval Ġ( compat Data , Ġindex Data Pro se Values ) Ġ= Ġget Compat Data And Pro se Values ( dir ) ĊĠĠĠ Ġval Ġurl Ġ= Ġget M dn Docs Url ( dir ) ĊĠĠĠ Ġval Ġstatus Ġ= Ġextract Status ( compat Data ) ĊĠĠĠ Ġval Ġcompatibility Ġ= Ġextract Compatibility Info ( compat Data ) ĊĠĠĠ Ġval Ġdescription Ġ= Ġextract Description ( index Data Pro se Values ) ĊĠĠĠ Ġval Ġdir Name Ġ= Ġdir . name ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġdir Name . startsWith ('_ ') Ġ|| Ġdir Name . endsWith (" () ") Ġ-> ĊĠĠĠĠĠĠĠ ĠM dn Css Basic Symbol Documentation ( url , Ġstatus , Ġcompatibility , Ġdescription ) ĊĠĠĠĠĠ Ġdir Name . startsWith ('@ ') Ġ-> ĊĠĠĠĠĠĠĠ ĠM dn Css At Rule Symbol Documentation ( ĊĠĠĠĠĠĠĠĠĠ Ġurl , Ġstatus , Ġcompatibility , Ġdescription , ĊĠĠĠĠĠĠĠĠĠ Ġextract Information Full ( dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ! it . contains ('_ ') Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdoc Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Pair ( doc Dir . name , Ġextract Css Element Documentation ( doc Dir ) Ġas ĠM dn Css Property Symbol Documentation )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" Error Ġfor Ġ$ doc Dir : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠ ĠM dn Css Property Symbol Documentation ( ĊĠĠĠĠĠĠĠĠĠ Ġurl , Ġstatus , Ġcompatibility , Ġdescription , Ġextract Formal Syntax ( index Data Pro se Values ), Ġextract Property Values ( index Data Pro se Values )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Description ( index Data Pro se Values : ĠList < JsonObject >): ĠString Ġ= ĊĠĠĠ Ġindex Data Pro se Values . first (). get Pro se Content () ĊĠĠĠĠĠ Ġ. let Ġ{ Ġcreate Html File ( it ). patched Text () Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Formal Syntax ( index Data Pro se Values : ĠList < JsonObject >): ĠString ? Ġ= ĊĠĠĠ Ġget Pro se Content ById ( index Data Pro se Values , Ġ" form al _ syntax ") ĊĠĠĠĠĠ Ġ? . let Ġ{ Ġcreate Html File ( it ) Ġ} ĊĠĠĠĠĠ Ġ? . let Ġ{ ĠPsi Tree Util . find Child OfType ( it , ĠXml Tag :: class . java ) Ġ} ĊĠĠĠĠĠ Ġ? . let Ġ{ Ġextract Text ( it ) Ġ} ĊĠĠĠĠĠ Ġ? . patch Pro se () ĊĠĠĠĠĠ Ġ? . replace (" Ġ", Ġ" Âł ") ĊĠĠĠĠĠ Ġ? . let Ġ{ Ġformat Formal Css Syntax ( it ) Ġ} ĊĊĠ Ġprivate Ġfun Ġformat Formal Css Syntax ( str : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠ Ġresult . append ( str [ 0 ]) ĊĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠ Ġvar Ġindentation Ġ= Ġ 0 ĊĠĠĠ Ġwhile Ġ( i Ġ< Ġstr . length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġseq Ġ= ĠCharSequence Sub Sequence ( str , Ġi , Ġstr . length ) ĊĠĠĠĠĠ Ġif Ġ( str [ i Ġ- Ġ 1 ]. let Ġ{ Ġit Ġ!= Ġ' Âł ' Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( seq . startsWith (" where Âł ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( indentation Ġ== Ġ 2 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ" where Âł ". length ĊĠĠĠĠĠĠĠĠĠ Ġresult . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠ Ġrepeat ( ++ indentation ) Ġ{ Ġresult . append (" Âł Âł ") Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( seq . startsWith ("& lt ; ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresult . append ("\ n ") ĊĠĠĠĠĠĠĠĠĠ Ġrepeat ( indentation ) Ġ{ Ġresult . append (" Âł Âł ") Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġresult . append ("& lt ; ") ĊĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ"& lt ; ". length ĊĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġresult . append ( str [ i ++ ]) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult . toString () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Event Description ( index Data Pro se Values : ĠList < JsonObject >): ĠString ? Ġ= ĊĠĠĠ Ġindex Data Pro se Values . first (). get Pro se Content () ĊĠĠĠĠĠ Ġ. let Ġ{ Ġcreate Html File ( it ) Ġ} ĊĠĠĠĠĠ Ġ. children [ 0 ]. children . filter Ġ{ Ġit Ġis ĠXml Tag Ġ&& Ġit . name Ġ== Ġ" p " Ġ} ĊĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠ Ġ? . join ToString ("\ n ") Ġ{ Ġit . patched Text () Ġ} ĊĊĠ Ġprivate Ġfun Ġfilter Pro se ById ( sections : ĠList < JsonObject >, Ġvar arg Ġids : ĠString ): ĠSequence < JsonObject > Ġ= ĊĠĠĠ Ġsections . as Sequence (). filter Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠ Ġvalue . get (" id ") ĊĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit Ġis ĠJson Primitive Ġ} ĊĠĠĠĠĠĠĠ Ġ? . asString ?. toLowerCase ( Locale . US )?. let Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġids . any Ġ{ Ġid Ġ== Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ== Ġtrue ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Pro se Content ById ( sections : ĠList < JsonObject >, Ġid : ĠString ) Ġ= ĊĠĠĠ Ġfilter Pro se ById ( sections , Ġid ). first OrNull ()?. get Pro se Content () ĊĊĠ Ġprivate Ġfun Ġreversed Aliases Map ( special Mappings : ĠMap < String , ĠSet < String >> ): ĠMap < String , ĠString > Ġ= ĊĠĠĠ Ġspecial Mappings . entries . as Sequence (). flatMap Ġ{ Ġmapping Ġ-> Ġmapping . value . as Sequence (). map Ġ{ ĠPair ( it , Ġmapping . key ) Ġ} Ġ}. toMap () ĊĊĠ Ġprivate Ġfun Ġget M dn Docs Url ( dir : ĠFile ): ĠString Ġ= ĊĠĠĠ ĠM DN _ DOCS _ URL _ PREFIX Ġ+ Ġdir . path . replace ('\\ ', Ġ'/ '). let Ġ{ Ġit . substring ( it . indexOf ("/ docs /") Ġ+ Ġ 5 ) Ġ} ĊĊĠ Ġprivate Ġfun Ġget Compat Data And Pro se Values ( dir : ĠFile ): ĠPair < JsonObject ?, ĠList < JsonObject >> Ġ= ĊĠĠĠ ĠPair ( ĊĠĠĠĠĠ ĠFile ( dir , Ġ" bcd . json "). take If Ġ{ Ġit . exists () Ġ} ?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠ ĠJson Parser . parse Reader ( Json Reader ( FileReader ( file )). also Ġ{ Ġit . is Len ient Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġ. as JsonObject ĊĠĠĠĠĠĠĠĠĠ Ġ. getAs JsonObject (" data ") ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ ĠJson Parser . parse Reader ( Json Reader ( FileReader ( File ( dir , Ġ" index . json ")) ). also Ġ{ Ġit . is Len ient Ġ= Ġtrue Ġ}) ĊĠĠĠĠĠĠĠ Ġ. as JsonObject ĊĠĠĠĠĠĠĠ Ġ. getAs JsonObject (" doc ") ĊĠĠĠĠĠĠĠ Ġ. getAs JsonArray (" body ") !! ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . as JsonObject Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . getAs Json Primitive (" type "). asString Ġ== Ġ" pro se " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . getAs JsonObject (" value ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ) ĊĊĠ Ġprivate Ġfun Ġbuild Attributes ( tag Dir : ĠFile , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattributes Doc : ĠRaw Pro se ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement Compat Data : ĠJsonObject ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Attributes : ĠMap < String , ĠM dn Html Attribute Documentation >): ĠMap < String , ĠM dn Html Attribute Documentation >? Ġ{ ĊĠĠĠ Ġval Ġdoc Attrs Ġ= Ġprocess DataList ( attributes Doc ). flatMap Ġ{ Ġ( name , Ġdoc ) Ġ-> ĊĠĠĠĠĠ Ġif Ġ( name . contains (',' )) ĊĠĠĠĠĠĠĠ Ġname . split To Sequence (',' ). map Ġ{ ĠPair ( it . trim (), Ġdoc ) Ġ} ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġsequence Of ( Pair ( name , Ġdoc )) ĊĠĠĠ Ġ}. toMap () ĊĠĠĠ Ġval Ġcompat Attrs Ġ= Ġelement Compat Data ?. entrySet ()?. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġdata Ġ-> Ġ! data . key . any Ġ{ Ġit Ġ== Ġ'_' Ġ|| Ġit Ġ== Ġ'-' Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( it . key . toLowerCase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( extract Status ( it . value . as JsonObject ), Ġextract Compatibility Info ( it . value . as JsonObject ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . toMap () Ġ?: Ġempty Map () ĊĊĠĠĠ Ġval ĠtagName Ġ= Ġtag Dir . name ĊĠĠĠ Ġval Ġmissing Ġ= Ġ((( compat Attrs . keys Ġ- Ġdoc Attrs . keys )) Ġ- Ġcommon Attributes . keys ) Ġ- Ġ( missing Doc [ tagName ] Ġ?: Ġempty Set ()) ĊĠĠĠ Ġif Ġ( missing . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ ĠSystem . err . println ("$ tagName Ġ- Ġmissing Ġattrs Ġpresent Ġin ĠB CD : Ġ${ missing }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġurl Prefix Ġ= Ġget M dn Docs Url ( tag Dir ) Ġ+ Ġ"# attr -" ĊĠĠĠ Ġreturn Ġdoc Attrs . keys . as Sequence () ĊĠĠĠĠĠ Ġ. plus ( compat Attrs . keys ). distinct () ĊĠĠĠĠĠ Ġ. map Ġ{ ĠString Util . toLowerCase ( it ) Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it , ĠM dn Html Attribute Documentation ( url Prefix Ġ+ Ġit , Ġcompat Attrs [ it ]?. first , Ġcompat Attrs [ it ]?. second , Ġdoc Attrs [ it ])) Ġ} ĊĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠ Ġ. toMap () ĊĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Element Documentation ( element Doc : ĠRaw Pro se , Ġsummary Doc : ĠRaw Pro se ?): ĠPair < String , ĠMap < String , ĠString >> Ġ{ ĊĠĠĠ Ġval Ġsections Ġ= Ġmutable Map Of < String , ĠString >() ĊĊĠĠĠ Ġfun Ġprocess Properties Table ( table : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠ Ġtable . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag . name Ġ== Ġ" tr ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtitle Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag . sub Tags . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" th " Ġ-> Ġtitle Ġ+= Ġit . inner Html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" td " Ġ-> Ġcontent Ġ+= Ġit . inner Html () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsections [ title . patch Pro se ()] Ġ= Ġcontent . patch Pro se () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġhtml File Ġ= Ġcreate Html File ( element Doc ) ĊĠĠĠ Ġhtml File . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tag . name Ġ== Ġ" table " Ġ&& Ġtag . getAttribute Value (" class ") Ġ== Ġ" properties ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocess Properties Table ( tag ) ĊĠĠĠĠĠĠĠĠĠ Ġtag . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġif Ġ( summary Doc Ġ!= Ġnull Ġ&& Ġhtml File . firstChild . children . none Ġ{ Ġ( it Ġas ? ĠXml Tag )?. name Ġ== Ġ" p " Ġ}) Ġ{ ĊĠĠĠĠĠ Ġreturn ĠPair ( fix Spaces ( html File . patched Text () Ġ+ Ġcreate Html File ( summary Doc ). patched Text ()), Ġsections ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠPair ( fix Spaces ( html File . patched Text ()), Ġsections ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Html File ( contents : ĠRaw Pro se ): ĠHtml File Impl Ġ{ ĊĠĠĠ Ġval Ġhtml File Ġ= ĠPsi File Factory . getInstance ( project ) ĊĠĠĠĠĠ Ġ. create File FromText (" dummy . html ", ĠHTML Language . INSTANCE , Ġcontents . content , Ġfalse , Ġtrue ) ĊĠĠĠ Ġval Ġto Remove Ġ= Ġmutable Set Of < Psi Element >() ĊĠĠĠ Ġval Ġto Simpl ify Ġ= Ġmutable Set Of < Xml Tag >() ĊĠĠĠ Ġhtml File . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Comment ( comment : ĠXml Comment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġto Remove . add ( comment ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tag . name Ġ== Ġ" pre " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtag . getAttribute Value (" class ") ?. matches ( Regex (" brush : Ġ? ( js | html | css | xml )[ a - z 0 - 9 - ; \\ [ \\ ] Ġ] * ")) Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtag . find Sub Tag (" code ") ?. let Ġ{ Ġto Simpl ify . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ(( tag . getAttribute Value (" class ") ?. contains (" hidden ", Ġtrue ) Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtag . getAttribute Value (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġit Ġ== Ġ" top Example " Ġ|| Ġit Ġ== Ġ" Exe emple " Ġ|| Ġit Ġ== Ġ" Example " Ġ|| Ġit Ġ== Ġ" Ex emple " Ġ|| Ġit Ġ== Ġ" Live Sample " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( tag . name Ġ== Ġ" span " Ġ&& Ġtag . getAttribute Value (" class ") Ġ== Ġ" not ec ard Ġinline Ġwarning ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġ( tag . name Ġ== Ġ" p " Ġ&& Ġtag . inner Html (). trim (). startsWith (" The Ġsource Ġfor Ġthis Ġinteract ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtag . name Ġ== Ġ" iframe " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtag . name Ġ== Ġ" img ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġto Remove . add ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( tag . name Ġ== Ġ" svg ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcls Ġ= Ġtag . getAttribute Value (" class ") ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( cls Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . contains (" ob solete ") Ġ-> Ġ" ðŁ Ĺ ĳ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . contains (" deprecated ") Ġ-> Ġ" ðŁĳ İ " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . contains (" non - standard ") Ġ-> Ġ" â ļłï¸ı " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . contains (" experimental ") Ġ-> Ġ" ðŁ § ª " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Unknown ĠSVG Ġclass : Ġ$ cls ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag . parent Tag !!. add Before ( XmlElement Factory . getInstance ( project ). create Display Text ( it ), Ġtag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" SVG Ġwith Ġno Ġclass ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġtag . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit XmlAttribute ( attribute : ĠXml Attribute ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attribute . name . let Ġ{ Ġit Ġ== Ġ" data - fl aw - src " Ġ|| Ġit Ġ== Ġ" title " Ġ|| Ġit Ġ== Ġ" alt " Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġto Remove . add ( attribute ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( attribute . value ?. let Ġ{ Ġit . contains ("& quot ; ") Ġ|| Ġit . contains ("& apos ; ") Ġ} Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( attribute . name . let Ġ{ Ġit Ġ== Ġ" id " Ġ|| Ġit Ġ== Ġ" style " Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Remove . add ( attribute ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException (" Entities : Ġ" Ġ+ Ġattribute . text ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġto Remove . forEach Ġ{ Ġit . delete () Ġ} ĊĠĠĠ Ġremove Empty Tags ( html File ) ĊĠĠĠ Ġto Simpl ify . forEach (:: simplify Tag ) ĊĠĠĠ Ġval Ġtext Ġ= Ġfix Spaces ( html File . text ) ĊĠĠĠ Ġif Ġ( text . contains (" The Ġsource Ġfor Ġthis Ġinteract ")) ĊĠĠĠĠĠ Ġthrow ĠException (" Un hidden Ġstuff !") ĊĠĠĠ Ġif Ġ( text . contains (" class =\" token Ġpunctuation \"" )) ĊĠĠĠĠĠ Ġthrow ĠException (" Code Ġfragment ") ĊĠĠĠ Ġreturn ĠPsi File Factory . getInstance ( project ) ĊĠĠĠĠĠ Ġ. create File FromText (" dummy . html ", ĠHtml FileType . INSTANCE , Ġtext , ĠSystem . currentTimeMillis (), Ġfalse , Ġtrue ) ĊĠĠĠĠĠ Ġas ĠHtml File Impl ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġremove Empty Tags ( html File : ĠPsi File ) Ġ{ ĊĠĠĠ Ġval Ġto Remove Ġ= Ġmutable Set Of < Xml Tag >() ĊĠĠĠ Ġhtml File . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isEmpty Tag ( tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġto Remove . add ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġto Remove . forEach Ġ{ Ġit . delete () Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġsimplify Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠ Ġtag . replace ( ĊĠĠĠĠĠ ĠXml Element Factory . getInstance ( tag . project ). create Tag FromText (""" < ${ tag . name }> ${ extract Text ( tag )}</ ${ tag . name }> """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠ ĠHTML Language . INSTANCE )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Text ( tag : ĠXml Tag ): ĠString Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠ Ġtag . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Text ( text : ĠXml Text ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . append ( text . text . replace (' Ġ', Ġ' Âł ')) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġreturn Ġresult . toString () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠisEmpty Tag ( tag : ĠXml Tag ): ĠBoolean Ġ= ĊĠĠĠ Ġtag . name . let Ġ{ Ġit Ġ!= Ġ" br " Ġ&& Ġit Ġ!= Ġ" hr " Ġ} ĊĠĠĠ Ġ&& Ġ! tag . children . map Ġ{ ĊĠĠĠĠĠ Ġ( it Ġis ĠXml Attribute Ġ&& Ġit . name Ġ!= Ġ" class ") ĊĠĠĠĠĠ Ġ|| Ġ( it Ġis ĠXml Text Ġ&& Ġit . text . isNotBlank ()) ĊĠĠĠĠĠ Ġ|| Ġ( it Ġis ĠXml Tag Ġ&& Ġ! isEmpty Tag ( it )) ĊĠĠĠ Ġ}. any Ġ{ Ġit Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Parameters ( sections : ĠList < JsonObject >): ĠMap < String , ĠString >? Ġ= ĊĠĠĠ Ġextract From DataList ( sections , Ġ" parameters ") ĊĊĠ Ġprivate Ġfun Ġextract Returns ( sections : ĠList < JsonObject >): ĠRaw Pro se ? Ġ= ĊĠĠĠ Ġfilter Pro se ById ( sections , Ġ" return _ value "). first OrNull () ĊĠĠĠĠĠ Ġ? . get Pro se Content () ĊĊĠ Ġprivate Ġfun Ġextract Throws ( sections : ĠList < JsonObject >): ĠMap < String , ĠString >? Ġ= ĊĠĠĠ Ġextract From DataList ( sections , Ġ" exceptions ") ĊĊĠ Ġprivate Ġfun Ġextract Property Values ( sections : ĠList < JsonObject >): ĠMap < String , ĠString >? Ġ= ĊĠĠĠ Ġextract From DataList ( sections , Ġ" values ") ĊĊĠ Ġprivate Ġfun Ġextract From DataList ( sections : ĠList < JsonObject >, Ġid : ĠString ): ĠMap < String , ĠString >? Ġ= ĊĠĠĠ Ġprocess DataList ( get Pro se Content ById ( sections , Ġid )) ĊĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠ Ġ? . map Values Ġ{ Ġ(_, Ġdoc ) Ġ-> Ġdoc . replace ( Regex ("< p >( .* )</ p > "), Ġ"$ 1 < br > "). patch Pro se () Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess DataList ( doc : ĠRaw Pro se ?): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠ Ġif Ġ( doc Ġ!= Ġnull Ġ&& Ġdoc . content . isNotBlank ()) Ġ{ ĊĠĠĠĠĠ Ġvar Ġlast Title Ġ= Ġ"" ĊĠĠĠĠĠ Ġcreate Html File ( doc ) ĊĠĠĠĠĠĠĠ Ġ. document ?. children ?. as Sequence () ĊĠĠĠĠĠĠĠ Ġ? . filter Is Instance < Xml Tag >() ĊĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . name Ġ== Ġ" dl " Ġ|| Ġit . name Ġ== Ġ" table " Ġ} ĊĠĠĠĠĠĠĠ Ġ? . flatMap Ġ{ Ġit . sub Tags . as Sequence () Ġ} ĊĠĠĠĠĠĠĠ Ġ? . flatMap Ġ{ Ġif Ġ( it . name Ġ== Ġ" tbody ") Ġit . sub Tags . as Sequence () Ġelse Ġsequence Of ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( data . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dt " Ġ-> Ġlast Title Ġ= Ġextract Identifier ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dd " Ġ-> Ġif Ġ( last Title . isNotBlank ()) Ġresult [ last Title ] Ġ= Ġresult . get OrDefault ( last Title , Ġ"") Ġ+ Ġdata . inner Html () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" tr " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcells Ġ= Ġdata . find Sub Tags (" td ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cells . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġextract Identifier ( cells [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . isNotBlank ()) Ġresult [ title ] Ġ= Ġresult . get OrDefault ( title , Ġ"") Ġ+ Ġcells [ 1 ]. inner Html () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult . as Sequence (). map Ġ{ ĠPair ( it . key . patch Pro se (), Ġit . value . patch Pro se ()) Ġ}. toMap () ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" RegExp Duplicate Altern ation Branch ") ĊĠ Ġprivate Ġfun Ġextract Identifier ( data : ĠXml Tag ): ĠString Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠStringBuilder () ĊĠĠĠ Ġvar Ġok Ġ= Ġtrue ĊĠĠĠ Ġvar Ġstop Ġ= Ġfalse ĊĠĠĠ Ġdata . accept Children ( object Ġ: ĠXml Recursive Element Visitor () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Tag ( tag : ĠXml Tag ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtagName Ġ= Ġtag . name ĊĠĠĠĠĠĠĠ Ġif Ġ( tagName Ġ== Ġ" br ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġresult . append (" {{ br }} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( tagName Ġ== Ġ" table ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġok Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( tagName Ġ!= Ġ" span " Ġ|| Ġtag . getAttribute Value (" class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġcls Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcls . contains (" badge ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġcls . contains (" inline Indicator ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġcls . contains (" not ec ard ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . visit Xml Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġstop Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġvisit Xml Text ( text : ĠXml Text ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġinfo Index Ġ= Ġtext . text . indexOf Any ( listOf (" ðŁ Ĺ ĳ ", Ġ" ðŁĳ İ ", Ġ" â ļłï¸ı ", Ġ" ðŁ § ª ")) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( info Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( text . text . substring ( 0 , Ġinfo Index )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . append ( text . text ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġif Ġ( result . contains ("> ")) ĊĠĠĠĠĠ Ġthrow ĠException (" Something Ġwent Ġwrong !") ĊĠĠĠ Ġreturn Ġif Ġ( ok ) ĊĠĠĠĠĠ Ġresult . toString (). replace (" {{ br }} ", Ġ"< br > "). trim () ĊĠĠĠ Ġelse Ġ"" ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġextract Status ( compat Data : ĠJsonObject ?): ĠSet < M dn Api Status >? Ġ= ĊĠĠĠ Ġcompat Data ?. get ("__ compat ") ĊĠĠĠĠĠ Ġ? . cast S af ely To < JsonObject >() ĊĠĠĠĠĠ Ġ? . getAs JsonObject (" status ") ĊĠĠĠĠĠ Ġ? . entrySet () ĊĠĠĠĠĠ Ġ? . as Sequence () ĊĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . value . as Boolean Ġ} ĊĠĠĠĠĠ Ġ? . map Ġ{ ĠM dn Api Status . valueOf ( it . key . to Pas cal Case ()) Ġ} ĊĠĠĠĠĠ Ġ? . toSet () ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġprivate Ġfun Ġextract Compatibility Info ( compat Data : ĠJsonObject ?): ĠMap < M dn JavaScript Runtime , ĠString >? Ġ= ĊĠĠĠ Ġcompat Data ?. get ("__ compat ") ĊĠĠĠĠĠ Ġ? . cast S af ely To < JsonObject >() ĊĠĠĠĠĠ Ġ? . getAs JsonObject (" support ") ĊĠĠĠĠĠ Ġ? . entrySet () ĊĠĠĠĠĠ Ġ? . as Sequence () ĊĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠ Ġjs Runtime s Map [ entry . key ]?. let Ġ{ Ġruntime Ġ-> ĊĠĠĠĠĠĠĠĠĠ ĠPair ( runtime , Ġentry . value ?. let Ġ{ Ġextract Browser Version ( runtime , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ? . toMap () ĊĠĠĠĠĠ Ġ? . take If Ġ{ Ġmap Ġ-> Ġmap . values . any Ġ{ Ġit Ġ== Ġnull Ġ|| Ġit . isNotEmpty () Ġ} Ġ} ĊĠĠĠĠĠ Ġ? . filter Values Ġ{ Ġit Ġ!= Ġnull Ġ} Ġas ĠMap < M dn JavaScript Runtime , ĠString >? ĊĊĠ Ġprivate Ġfun Ġextract Browser Version ( runtime : ĠM dn JavaScript Runtime , Ġversion Info : ĠJson Element ): ĠString ? Ġ{ ĊĠĠĠ Ġfun Ġextract Version ( element : ĠJson Element ?): ĠString ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ( element Ġ== Ġnull Ġ|| Ġelement . is Json Null ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠ Ġelse Ġif Ġ( element Ġis ĠJson Primitive ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( element . is Boolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element . as Boolean ) Ġ"" Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( element . isString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġelement . asString ĊĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . isEmpty () Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġruntime . first Version Ġ-> Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue . remove Prefix (" âī ¤ ") ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException ( element . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġversions Ġ= Ġ( if Ġ( version Info Ġis ĠJson Array ) Ġversion Info . as Sequence () Ġelse Ġsequence Of ( version Info )) ĊĠĠĠĠĠ Ġ. on Each Ġ{ Ġif Ġ( it Ġ! is ĠJsonObject ) Ġthrow ĠIllegalStateException ( it . toString ()) Ġ} ĊĠĠĠĠĠ Ġ. filter Is Instance < JsonObject >() ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . has (" prefix ") Ġ&& Ġ! it . has (" flags ") Ġ&& Ġ! it . has (" alternative _ name ") Ġ&& Ġ! it . has (" partial _ implementation ") Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠ ĠTrip le ( extract Version ( it . get (" version _ added ")), Ġextract Version ( it . get (" version _ removed ")), Ġit . has (" notes ")) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġ!= Ġnull Ġ&& Ġit . second Ġ== Ġnull Ġ} ĊĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . first !! Ġ} ĊĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġif Ġ( versions . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( versions . all Ġ{ Ġit . third Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġversions . join ToString (",") Ġ{ Ġit . first !! Ġ+ Ġ"*" Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġwithout Notes Ġ= Ġversions . filter Ġ{ Ġ! it . third Ġ} ĊĠĠĠĠĠ Ġif Ġ( without Notes . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwithout Notes [ 0 ]. first !! ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġthrow ĠIllegalStateException ( version Info . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġif Ġ( versions . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġversions [ 0 ]. first ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate D ts M dn Index ( symbols : ĠMap < String , ĠM dn Js Symbol Documentation >): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠJ SC ore Pre defined Libraries Provider . getAll J SP re defined Library Files () ĊĠĠĠĠĠ Ġ. find Ġ{ Ġit . name Ġ== Ġ" lib . dom . d . ts " Ġ} ĊĠĠĠĠĠ Ġ? . let Ġ{ ĠPsi Manager . getInstance ( project ). find File ( it ) Ġ} ĊĊĠĠĠ Ġval Ġreal Name Map Ġ= ĠStub Index . getInstance (). getAll Keys ( J SS ymbol Index 2 . KEY , Ġproject ) ĊĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it . toLowerCase ( Locale . US ), Ġit ) Ġ} ĊĠĠĠĠĠ Ġ. toMap () ĊĊĠĠĠ Ġreturn Ġsymbols . keys . as Sequence () ĊĠĠĠĠĠ Ġ. filter Ġ{ Ġit . contains ('.') Ġ} ĊĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġsymbol Name Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġnamespace Ġ= Ġsymbol Name . take While Ġ{ Ġit Ġ!= Ġ'.' Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmember Ġ= Ġsymbol Name . take Last While Ġ{ Ġit Ġ!= Ġ'.' Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual Namespace Ġ= Ġreal Name Map [ namespace ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn @ map NotNull Ġnull ĊĠĠĠĠĠĠĠ Ġ( JS Named Type Factory . create Type ( actual Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJS Type Source Factory . create Type Source ( context , Ġfalse ), ĠJS Type Context . INSTANCE ) ĊĠĠĠĠĠĠĠĠĠ Ġ. as Record Type () ĊĠĠĠĠĠĠĠĠĠ Ġ. properties ĊĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . member Name . equals ( member , Ġtrue ) Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġ? . member Source ĊĠĠĠĠĠĠĠĠĠ Ġ? . single Element ĊĠĠĠĠĠĠĠĠĠ Ġ? . cast S af ely To < J SP si Element Base >() ĊĠĠĠĠĠĠĠĠĠ Ġ? . qualified Name ĊĠĠĠĠĠĠĠĠĠ Ġ? . take If Ġ{ Ġ! it . equals ( symbol Name , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ? . toLowerCase ( Locale . US ) ĊĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠPair ( it , Ġsymbol Name ) Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. toMap ( TreeMap ()) ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġredirects Ġ= ĠFile Util . load File ( Path . of ( MD N _ CONTENT _ ROOT , ĠBU IL T _ LANG , Ġ"_ redirects . txt "). to File ()) ĊĠĠĠ Ġ. split To Sequence ('\ n ') ĊĠĠĠ Ġ. map NotNull Ġ{ Ġline Ġ-> ĊĠĠĠĠĠ Ġline . split To Sequence ('\ t ') ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠString Util . toLowerCase ( it . trim ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . size Ġ== Ġ 2 Ġ&& Ġ! it [ 0 ]. startsWith ("# ") Ġ} ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠPair ( it [ 0 ], Ġit [ 1 ]) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ. toMap () Ċ } Ċ Ċ private Ġfun ĠXml Tag . inner Html (): ĠString Ġ= Ġthis . children . as Sequence () ĊĠ Ġ. filter Ġ{ Ġit Ġis ĠXml Tag Ġ|| Ġit Ġis ĠXml Text Ġ}. map Ġ{ Ġit . text Ġ}. join ToString ("\ n "). let Ġ{ Ġfix Spaces ( it ) Ġ} Ċ Ċ private Ġfun ĠXml Element . find Sub Tag ( name : ĠString ): ĠXml Tag ? Ġ= Ġthis . children . find Ġ{ Ġ( it Ġas ? ĠXml Tag )?. name Ġ== Ġname Ġ} Ġas ? ĠXml Tag Ċ Ċ private Ġfun Ġfix Spaces ( doc : ĠString ): ĠString Ġ= Ġdoc . replace ( Regex ("[ Ġ\ t ]* \ n [ Ġ\ t \ n ]* "), Ġ"\ n "). trim () Ċ Ċ private Ġfun ĠString . to Pas cal Case (): ĠString Ġ= Ġget Words (). map Ġ{ Ġit . toLowerCase () Ġ}. join ToString ( separator Ġ= Ġ"", Ġtransform Ġ= ĠString :: capitalize ) Ċ private Ġfun ĠString . get Words () Ġ= ĠName Util Core . name To Words ( this ). filter Ġ{ Ġit . isNotEmpty () Ġ&& ĠCharacter . is Letter Or Digit ( it [ 0 ]) Ġ} Ċ Ċ private Ġdata Ġclass ĠRaw Pro se ( val Ġcontent : ĠString ) Ġ{ ĊĠ Ġfun Ġpatch (): ĠString Ġ= Ġcontent . patch Pro se () Ċ } Ċ Ċ private Ġfun ĠPsi Element . patched Text () Ġ= ĊĠ Ġtext . patch Pro se () Ċ Ċ private Ġfun ĠJsonObject . get Pro se Content (): ĠRaw Pro se Ġ= ĊĠ Ġthis . getAs Json Primitive (" content "). asString ĊĠĠĠ Ġ. let Ġ{ ĠRaw Pro se ( it ) Ġ} Ċ Ċ private Ġfun ĠString . patch Pro se (): ĠString Ġ= ĊĠ Ġreplace ("/ en - US / docs ", ĠM DN _ DOCS _ URL _ PREFIX , Ġtrue ) ĊĠĠĠ Ġ. replace ("& apos ;", Ġ"' ") ĊĠĠĠ Ġ. replace ("& quot ;", Ġ"\" ") ĊĠĠĠ Ġ. replace ("& nbsp ;", Ġ" Âł ") ĊĠĠĠ Ġ. also Ġ{ Ġfixed Pro se Ġ-> ĊĠĠĠĠĠ ĠRegex ("& (? ! lt | gt | amp )[ a - z ]* ; "). find ( fixed Pro se )?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠException (" Unknown Ġentity Ġfound Ġin Ġpro se : Ġ${ it . value }") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}