package Ġcom . so yle . stories . pro se . pro se Editor Ċ Ċ import Ġorg . fx misc . richt ext . model . Text Ops Ċ import Ġjava . util .* Ċ Ċ class ĠContent Element Ops Ġ: ĠText Ops < Content Element , ĠCollection < String >> Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlength ( seg : ĠContent Element ?): ĠInt Ġ= Ġseg !!. text . length Ġ?: Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġchar At ( seg : ĠContent Element ?, Ġindex : ĠInt ): ĠChar Ġ= Ġseg !!. text [ index ] ĊĊĠĠĠ Ġoverride Ġfun ĠgetText ( seg : ĠContent Element ?): ĠString Ġ= Ġseg !!. text ĊĊĠĠĠ Ġoverride Ġfun Ġsub Sequence ( seg : ĠContent Element ?, Ġstart : ĠInt , Ġend : ĠInt ): ĠContent Element Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( seg ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBasic Text Ġ-> ĠBasic Text ( seg . text . substring ( start , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠM ention Ġ-> Ġseg . copy ( text Ġ= Ġseg . text . substring ( start , Ġend )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠBasic Text ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub Sequence ( seg : ĠContent Element ?, Ġstart : ĠInt ): ĠContent Element Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( seg ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBasic Text Ġ-> ĠBasic Text ( seg . text . substring ( start )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠM ention Ġ-> Ġseg . copy ( text Ġ= Ġseg . text . substring ( start )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠBasic Text ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġjoin Seg ( current Seg : ĠContent Element ?, Ġnext Seg : ĠContent Element ?): ĠOptional < Content Element > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Seg Ġ== Ġnull Ġ|| Ġnext Seg Ġ== Ġnull ) Ġreturn ĠOptional . empty () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( current Seg ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBasic Text Ġ-> Ġif Ġ( next Seg Ġis ĠBasic Text ) ĠOptional . of ( Basic Text ( current Seg . text Ġ+ Ġnext Seg . text )) Ġelse ĠOptional . empty < Content Element >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠM ention , Ġnull Ġ-> ĠOptional . empty < Content Element >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Empty Seg (): ĠContent Element Ġ= ĠBasic Text ("") ĊĊĠĠĠ Ġoverride Ġfun Ġcreate ( text : ĠString ?): ĠContent Element Ġ= ĠBasic Text ( text Ġ?: Ġ"") Ċ Ċ }