// ĠCopyright Ġ( c ) Ġ 2 0 1 5 - 2 0 2 0 ĠV lad im ir ĠSch ne ider Ġ< vl ad im ir . sch ne ider @ gmail . com > ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ċ package Ġcom . vl ad sch . md . nav . util . format Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi File Ċ import Ġcom . intellij . psi . code Style . Code Style Settings Ċ import Ġcom . intellij . psi . code Style . Code Style Settings Manager Ċ import Ġcom . vl ad sch . md . nav . psi . element . Md Comment Ċ import Ġcom . vl ad sch . md . nav . psi . util . Md Token Sets Ċ import Ġcom . vl ad sch . plugin . util . psi . is Type In Ċ Ċ class ĠFormat Control Processor ( val Ġpsi File : ĠPsi File ) Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmy Formatter Off Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Suppress (" unused ") ĊĠĠĠ Ġval Ġsettings : ĠCode Style Settings Ġby Ġlazy Ġ{ ĠCode Style Settings Manager . get Settings ( psi File . project ) Ġ} ĊĊĠĠĠ Ġval Ġis Formatting Off : ĠBoolean Ġget () Ġ= Ġmy Formatter Off ĊĠĠĠ Ġval Ġis Formatting Region : ĠBoolean Ġget () Ġ= Ġ! my Formatter Off ĊĠĠĠ Ġval Ġformatter On Tag : ĠString Ġ= Ġsettings . FORMAT TER _ ON _ TAG ĊĠĠĠ Ġval Ġformatter Off Tag : ĠString Ġ= Ġsettings . FORMAT TER _ OFF _ TAG ĊĠĠĠ Ġval Ġformatter Tags Enabled Ġ= Ġsettings . FORMAT TER _ TAGS _ ENABLED ĊĠĠĠ Ġval Ġformatter Reg Ex Enabled Ġ= Ġsettings . FORMAT TER _ TAGS _ ACCEPT _ REG EXP ĊĠĠĠ Ġval Ġformatter On Pattern Ġ= Ġsettings . formatter On Pattern ĊĠĠĠ Ġval Ġformatter Off Pattern Ġ= Ġsettings . formatter Off Pattern ĊĠĠĠ Ġvar Ġjust Turn ed Off Formatting Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġfun Ġis Formatter Off Tag ( comment Text : ĠCharSequence ?): ĠBoolean ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġcomment Text ?. toString ()?. trim () Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ( formatter Reg Ex Enabled Ġ&& Ġformatter Off Pattern Ġ!= Ġnull Ġ&& Ġformatter On Pattern Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatter On Pattern . matcher ( text ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( formatter Off Pattern . matcher ( text ). matches ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( formatter Tags Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text Ġ== Ġformatter On Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( text Ġ== Ġformatter Off Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinitialize From ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Formatter Off Ġ= Ġelement Ġis ĠPsi File Ġ&& Ġ! is Formatting Region ( element . text Offset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprocess Format Control ( element : ĠPsi Element ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjust Turn ed Off Formatting Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ(( element Ġis ĠMd Comment ) Ġ&& Ġformatter Tags Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcould Ġbe Ġformatter Ġcontrol ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Off Ġ= Ġmy Formatter Off ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Formatter Off Ġ= Ġis Formatter Off Tag ( element . comment Text ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! formatter Off Ġ&& Ġmy Formatter Off ) Ġjust Turn ed Off Formatting Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Formatting Region ( offset : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġfind Ġthe Ġfirst ĠHTML Ġcomment Ġwith Ġa Ġformatter Ġdirective ĊĠĠĠĠĠĠĠ Ġif Ġ(! formatter Tags Enabled Ġ|| Ġoffset Ġ== Ġ 0 ) Ġreturn Ġtrue ĊĊĠĠĠĠĠĠĠ Ġvar Ġnode Ġ= Ġpsi File . node . last Child Node ĊĠĠĠĠĠĠĠ Ġwhile Ġ( node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . start Offset Ġ+ Ġnode . text Length Ġ<= Ġoffset ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġnode . tree Prev ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( node Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . is Type In ( Md Token Sets . COMMENT _ FOR _ COMMENT _ SET )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Off Ġ= Ġis Formatter Off Tag ( node . getChildren ( Md Token Sets . COMMENT _ FOR _ TODO _ SET ). last OrNull ()?. text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( formatter Off Ġ!= Ġnull ) Ġreturn Ġ! formatter Off ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ= Ġnode . tree Prev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ