package Ġcom . github . kor ni lo va 2 0 3 . matlab Ċ Ċ import Ġcom . github . kor ni lo va 2 0 3 . matlab . psi . Mat lab File Ċ import Ġcom . github . kor ni lo va 2 0 3 . matlab . psi . Mat lab Types Ċ import Ġcom . intellij . lang . AST Node Ċ import Ġcom . intellij . lang . fold ing . Custom Fold ing Builder Ċ import Ġcom . intellij . lang . fold ing . Fold ing Descriptor Ċ import Ġcom . intellij . openapi . editor . Document Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . TokenType . WHITE _ SPACE ĊĊ Ċ class ĠMat lab Fold ing Builder Ġ: ĠCustom Fold ing Builder () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild Language Fold Regions ( descriptors : ĠMutable List < Fold ing Descriptor >, Ġroot : ĠPsi Element , Ġdocument : ĠDocument , Ġquick : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( root Ġ! is ĠMat lab File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġappend Descriptors ( root . node , Ġdescriptors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Descriptors ( node : ĠAST Node , Ġdescriptors : ĠMutable List < Fold ing Descriptor >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġnode . elementType ĊĠĠĠĠĠĠĠ Ġval Ġparent Type Ġ= Ġnode . tree Parent ?. elementType ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMat lab Types . BLOCK Ġ&& Ġparent Type Ġ!= ĠMat lab Types . CASE _ BLOCK Ġ&& Ġparent Type Ġ!= ĠMat lab Types . OTHER WISE _ BLOCK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtype Ġ== ĠMat lab Types . SWITCH _ BLOCK Ġ|| Ġtype Ġ== ĠMat lab Types . CLASS _ DECL AR ATION Ġ|| Ġtype Ġ== ĠMat lab Types . EVENTS _ LIST ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtype Ġ== ĠMat lab Types . PROPERTIES _ LIST Ġ|| Ġtype Ġ== ĠMat lab Types . METHO DS _ LIST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġget Start Offset ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġget End Offset ( node ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ> Ġstart ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Range Ġ= ĠText Range ( start , Ġend ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptors . add ( Fold ing Descriptor ( node , Ġtext Range )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġchild Ġ= Ġnode . firstChild Node ĊĠĠĠĠĠĠĠ Ġwhile Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend Descriptors ( child , Ġdescriptors ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġ= Ġchild . tree Next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Start Offset ( node : ĠAST Node ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġwhen Ġ( node . elementType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMat lab Types . SWITCH _ BLOCK Ġ-> Ġnode . find Child ByType ( Mat lab Types . SWITCH _ EXPRESSION ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMat lab Types . CLASS _ DECL AR ATION Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . find Child ByType ( Mat lab Types . SUPER _ CLASSES ) Ġ!= Ġnull ) Ġnode . find Child ByType ( Mat lab Types . SUPER _ CLASSES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnode . find Child ByType ( Mat lab Types . IDENTIFIER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( child Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild . text Range . end Offset ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġprev Ġ= Ġnode . tree Prev ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prev Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġprev . elementType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= ĠWH ITE _ SPACE Ġ&& Ġtype Ġ!= ĠMat lab Types . NEW LINE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprev . text Range . end Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Ġ= Ġprev . tree Prev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnode . text Range . start Offset ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget End Offset ( node : ĠAST Node ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġnode . elementType ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠMat lab Types . SWITCH _ BLOCK Ġ|| Ġtype Ġ== ĠMat lab Types . CLASS _ DECL AR ATION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode . text Range . end Offset Ġ- ĠMat lab Types . END . toString (). length ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Not Space End ( node ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Not Space End ( node : ĠAST Node ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnext Ġ= Ġnode . tree Next ĊĠĠĠĠĠĠĠ Ġwhile Ġ( next Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġnext . elementType ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ!= ĠWH ITE _ SPACE Ġ&& Ġtype Ġ!= ĠMat lab Types . NEW LINE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnext . text Range . start Offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ= Ġnext . tree Next ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( node . tree Parent Ġ!= Ġnull ) Ġfind Not Space End ( node . tree Parent ) Ġelse Ġnode . text Range . end Offset ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Region Collapsed ByDefault ( node : ĠAST Node ): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġget Language Placeholder Text ( node : ĠAST Node , Ġrange : ĠText Range ): ĠString Ġ= Ġ" ..." Ċ } Ċ