package Ġcom . github . r pr ad al . let tr ine Ċ Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Exception Ċ import Ġorg . xml pull . v 1 . Xml Pull Parser Factory Ċ import Ġjava . io . String Reader ĊĊ Ċ /** Ċ Ġ* ĠUtility Ġclass Ġused Ġto Ġextract Ġthe Ġchar Ġthat Ġhas Ġto Ġbe Ġused Ġas Ġa Ġlet tr ine Ċ Ġ* Ċ Ġ* Ġ@ author ĠR Ã© mi ĠP rad al Ġ( r pr ad al @ oct o . com ) Ċ Ġ*/ Ċ internal Ġobject ĠLet tr ine Helper Ġ{ ĊĊĠĠĠ Ġ// Ġ-------------------------------- -- ĊĠĠĠ Ġ// ĠPUBLIC ĠMETHOD ĊĠĠĠ Ġ// Ġ-------------------------------- -- ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠExtract Ġinformation Ġneeded Ġin Ġorder Ġto Ġdisplay Ġtext Ġwith Ġa Ġlet tr ine Ġstyle ĊĊĠĠĠĠ Ġ* Ġ@ param Ġsp anned Text Ġthe Ġtext Ġto Ġbe Ġparsed ĊĠĠĠĠ Ġ* Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠData Ġstructure Ġcontaining Ġthe Ġchar Ġthat Ġcan Ġbe Ġuser Ġas Ġa ĠLet tr ine Ġand Ġthe Ġtruncated ĊĠĠĠĠ Ġ* Ġ* Ġsp anned Ġtext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġparse Let tr ine Information ( span ned Text : ĠString ): ĠLet tr ine Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtruncated Sp anned Text : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġparsed : ĠParsed TextBlock ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx pp Ġ= Ġget Xml Pull Parser ( span ned Text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠeventType Ġ= Ġx pp . eventType ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( eventType Ġ!= ĠXml Pull Parser . END _ DOCUMENT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġlook Ġfor Ġthe Ġfirst Ġtext Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( eventType Ġ== ĠXml Pull Parser . TEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġletter Ġcharacter Ġmust Ġbe Ġ" let tr in ized " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is TextBlock Let tr in z able ( x pp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Char Ġ= Ġx pp . text [ 0 ]. toUpperCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtruncated First Block Ġ= Ġx pp . text . substring ( 1 , Ġx pp . text . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock ToBe Modified Ġ= Ġx pp . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Ġ= ĠParsed TextBlock ( first Char , Ġtruncated First Block , Ġblock ToBe Modified ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġany Ġcases Ġwe Ġleave Ġthe Ġxml Ġinspection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠeventType Ġ= Ġx pp . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠXml Pull Parser Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Ġ= Ġget Un pars able Modified TextBlock ( span ned Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtruncated Sp anned Text Ġ= Ġget Truncated First Block ( parsed ?. block ToBe Modified , Ġsp anned Text , Ġparsed ?. tr uncated First Block ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠLet tr ine Data ( parsed ?. first Char , Ġtruncated Sp anned Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ-------------------------------- -- ĊĠĠĠ Ġ// ĠPRIVATE ĠMETHOD ĊĠĠĠ Ġ// Ġ-------------------------------- -- ĊĊĠĠĠ Ġprivate Ġfun Ġget Xml Pull Parser ( span ned Text : ĠString ): ĠXml Pull Parser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfactory Ġ= ĠXml Pull Parser Factory . newInstance () ĊĠĠĠĠĠĠĠ Ġfactory . is Namespace Aware Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġval Ġx pp Ġ= Ġfactory . new Pull Parser () ĊĠĠĠĠĠĠĠ Ġx pp . setInput ( String Reader ( span ned Text )) ĊĠĠĠĠĠĠĠ Ġreturn Ġx pp ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Un pars able Modified TextBlock ( span ned Text : ĠString ): ĠParsed TextBlock ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparsed : ĠParsed TextBlock ? ĊĠĠĠĠĠĠĠ Ġval Ġfirst Char Ġ= Ġsp anned Text [ 0 ]. toUpperCase () ĊĠĠĠĠĠĠĠ Ġif Ġ( Character . is Letter ( first Char )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtruncated First Block Ġ= Ġsp anned Text . substring ( 1 , Ġsp anned Text . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġblock ToBe Modified Ġ= Ġsp anned Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Ġ= ĠParsed TextBlock ( first Char , Ġtruncated First Block , Ġblock ToBe Modified ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġparsed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Truncated First Block ( block ToBe Modified : ĠString ?, Ġsp anned Text : ĠString , Ġtruncated First Block : ĠString ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtruncated Sp anned Text : ĠString ĊĠĠĠĠĠĠĠ Ġif Ġ( block ToBe Modified Ġ!= Ġnull Ġ&& Ġtruncated First Block Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWe Ġcreate Ġthe Ġnew Ġremaining Ġsp anned Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtruncated Sp anned Text Ġ= Ġsp anned Text . replace ( block ToBe Modified , Ġtruncated First Block ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtruncated Sp anned Text Ġ= Ġsp anned Text ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtruncated Sp anned Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis TextBlock Let tr in z able ( x pp : ĠXml Pull Parser ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( x pp . text Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ!( x pp . text Ġas ĠCharSequence ). isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠCharacter . is Letter ( x pp . text [ 0 ])) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠData Ġclass Ġused Ġto Ġstore Ġintermediate Ġparsing Ġinformation Ċ Ġ*/ Ċ private Ġdata Ġclass ĠParsed TextBlock ( val Ġfirst Char : ĠChar ?, Ġval Ġtruncated First Block : ĠString , Ġval Ġblock ToBe Modified : ĠString ?) Ċ Ċ /** Ċ Ġ* ĠData Ġclass Ġused Ġto Ġpass Ġparsed Ġdata Ġform ĠLet tr ine Helper Ġto Ġthe Ġlet tr ine View Ċ Ġ*/ Ċ Ċ internal Ġdata Ġclass ĠLet tr ine Data ( val Ġlet tr ine Char : ĠChar ?, Ġval Ġremaining String : ĠString )