/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . text . android . animation Ċ Ċ import Ġandroid . text . Text Direction He uristic Ċ import Ġandroid . text . Text Direction He ur istics Ċ import Ġandroid . text . Text Paint Ċ import Ġandroidx . compose . ui . text . android . Internal Platform Text Api Ċ import Ġandroidx . compose . ui . text . android . Layout Helper Ċ import Ġandroidx . compose . ui . text . android . Static Layout Factory Ċ import Ġandroidx . compose . ui . text . font . test . R Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ Ċ /** Ċ Ġ* ĠIn Ġthis Ġtest Ġcases , Ġuse Ġfollowing Ġnot ations : Ċ Ġ* Ċ Ġ* Ġ- ĠL 1 - LF Ġshows Ġan Ġexample Ġstrong ĠL TR Ġcharacter . Ċ Ġ* Ġ- ĠR 1 - RF Ġshows Ġan Ġexample Ġstrong ĠRTL Ġcharacter Ċ Ġ* Ġ- ĠSP Ġshows Ġwhitespace Ġcharacter Ġ( U + 0 0 2 0 ) Ċ Ġ* Ġ- ĠL F Ġshows Ġline - feed Ġcharacter Ġ( U + 0 0 0 A ) Ċ Ġ*/ Ċ @ Small Test Ċ @ Opt In ( Internal Platform Text Api :: class ) Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠSegment Breaker Break Segment Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsample Type face Ġ= ĠResources Compat . getFont ( ĊĠĠĠĠĠĠĠ ĠInstrument ation Registry . get Instrumentation (). target Context , ĊĠĠĠĠĠĠĠ ĠR . font . sample _ font ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠReference ĠStr ong ĠL TR Ġcharacter . ĠAll Ġcharacters Ġare Ġsupported Ġby Ġsample _ font . ttf Ġand Ġthey ĊĠĠĠ Ġ// Ġhave Ġ 1 em Ġwidth . ĊĠĠĠ Ġprivate Ġval ĠL 1 Ġ= Ġ"\ u 0 0 6 1 " ĊĠĠĠ Ġprivate Ġval ĠL 2 Ġ= Ġ"\ u 0 0 6 2 " ĊĠĠĠ Ġprivate Ġval ĠL 3 Ġ= Ġ"\ u 0 0 6 3 " ĊĠĠĠ Ġprivate Ġval ĠL 4 Ġ= Ġ"\ u 0 0 6 4 " ĊĠĠĠ Ġprivate Ġval ĠL 5 Ġ= Ġ"\ u 0 0 6 5 " ĊĠĠĠ Ġprivate Ġval ĠL 6 Ġ= Ġ"\ u 0 0 6 6 " ĊĠĠĠ Ġprivate Ġval ĠL 7 Ġ= Ġ"\ u 0 0 6 7 " ĊĠĠĠ Ġprivate Ġval ĠL 8 Ġ= Ġ"\ u 0 0 6 8 " ĊĠĠĠ Ġprivate Ġval ĠL 9 Ġ= Ġ"\ u 0 0 6 9 " ĊĠĠĠ Ġprivate Ġval ĠLA Ġ= Ġ"\ u 0 0 6 A " ĊĊĠĠĠ Ġ// ĠReference ĠStr ong ĠRTL Ġcharacter . ĠAll Ġcharacters Ġare Ġsupported Ġby Ġsample _ font . ttf Ġand Ġthey ĊĠĠĠ Ġ// Ġhave Ġ 1 em Ġwidth . ĊĠĠĠ Ġprivate Ġval ĠR 1 Ġ= Ġ"\ u 0 5 D 1 " ĊĠĠĠ Ġprivate Ġval ĠR 2 Ġ= Ġ"\ u 0 5 D 2 " ĊĠĠĠ Ġprivate Ġval ĠR 3 Ġ= Ġ"\ u 0 5 D 3 " ĊĠĠĠ Ġprivate Ġval ĠR 4 Ġ= Ġ"\ u 0 5 D 4 " ĊĠĠĠ Ġprivate Ġval ĠR 5 Ġ= Ġ"\ u 0 5 D 5 " ĊĠĠĠ Ġprivate Ġval ĠR 6 Ġ= Ġ"\ u 0 5 D 6 " ĊĠĠĠ Ġprivate Ġval ĠR 7 Ġ= Ġ"\ u 0 5 D 7 " ĊĠĠĠ Ġprivate Ġval ĠR 8 Ġ= Ġ"\ u 0 5 D 8 " ĊĠĠĠ Ġprivate Ġval ĠR 9 Ġ= Ġ"\ u 0 5 D 9 " ĊĠĠĠ Ġprivate Ġval ĠRA Ġ= Ġ"\ u 0 5 DA " ĊĊĠĠĠ Ġ// ĠWhite Ġspace Ġcharacter . ĠThis Ġis Ġsupported Ġby Ġsample _ font . ttf Ġand Ġthis Ġhas Ġ 1 em Ġwidth . ĊĠĠĠ Ġprivate Ġval ĠSP Ġ= Ġ" Ġ" ĊĠĠĠ Ġprivate Ġval ĠL F Ġ= Ġ"\ n " ĊĊĠĠĠ Ġprivate Ġval ĠL TR Ġ= ĠText Direction He ur istics . LTR ĊĠĠĠ Ġprivate Ġval ĠRTL Ġ= ĠText Direction He ur istics . RTL ĊĊĠĠĠ Ġ// Ġsample _ font . ttf Ġhas Ġas cent = 1 0 0 0 Ġand Ġdesc ent =- 2 0 0 , Ġhence Ġthe Ġline Ġheight Ġis Ġ 1 . 2 em . ĊĠĠĠ Ġprivate Ġval ĠTEXT _ SIZE Ġ= Ġ 1 0 f ĊĠĠĠ Ġprivate Ġval ĠLINE _ HEIGHT Ġ= ĠTEXT _ SIZE . toInt () ĊĊĠĠĠ Ġprivate Ġfun Ġget Layout ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġdir : ĠText Direction He uristic ĊĠĠĠ Ġ): ĠLayout Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpaint Ġ= ĠText Paint (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= ĠTEXT _ SIZE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype face Ġ= Ġsample Type face ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= ĠStatic Layout Factory . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaint Ġ= Ġpaint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Dir Ġ= Ġdir , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠLayout Helper ( layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Segments ( ĊĠĠĠĠĠĠĠ Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġdir : ĠText Direction He uristic , ĊĠĠĠĠĠĠĠ Ġtype : ĠSegment Type , ĊĠĠĠĠĠĠĠ Ġdrop Spaces : ĠBoolean ĊĠĠĠ Ġ): ĠList < Segment > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġget Layout ( text Ġ= Ġtext , Ġdir Ġ= Ġdir ) ĊĠĠĠĠĠĠĠ Ġreturn ĠSegment Breaker . break Segments ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Helper Ġ= Ġlayout , Ġsegment Type Ġ= Ġtype , Ġdrop Spaces Ġ= Ġdrop Spaces ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdocument _ LTR Text _ LTR Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠSP ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ĠSP ĠL 7 ĠL 8 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 9 ĠLA ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ SP $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Document , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdocument _ LTR Text _ RTL Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠSP ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ĠSP ĠL 7 ĠL 8 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ SP $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Document , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdocument _ RTL Text _ LTR Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠSP ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 8 ĠR 7 ĠSP ĠR 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ SP $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Document , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdocument _ RTL Text _ RTL Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠSP ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 8 ĠR 7 ĠSP ĠR 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠĠĠĠĠ ĠRA ĠR 9 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ SP $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Document , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparagraph _ LTR Text _ LTR Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 Ġ( LF ) ĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Paragraph , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparagraph _ LTR Text _ RTL Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 5 ĠL 6 | Ġ( LF ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Paragraph , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparagraph _ RTL Text _ LTR Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| R 8 ĠR 7 ĠSP ĠRA ĠR 9 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Paragraph , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġparagraph _ RTL Text _ RTL Para () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Paragraph , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ LTR Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ LTR Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 5 ĠL 6 | Ġ( LF ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ RTL Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ RTL Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ LTR Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ LTR Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 5 ĠL 6 | Ġ( LF ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ RTL Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ RTL Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġline _ B idi () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠL 3 ĠL 4 ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP Ġ( SP ) ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ| R 4 ĠR 3 ĠSP ĠL 3 ĠL 4 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ L 3 $ L 4 " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Line , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 nd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ LTR Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ LTR Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 5 ĠL 6 | Ġ( LF ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ RTL Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 6 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠB idi Ġassigns ĠL F Ġcharacter Ġto ĠL TR . ĠDo Ġwe Ġwant Ġto Ġinclude Ġpreceding Ġrun ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ RTL Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ LTR Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ LTR Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| ĠĠĠĠĠĠĠĠ ĠL 5 ĠL 6 | Ġ( LF ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ RTL Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 6 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠB idi Ġassigns ĠL F Ġcharacter Ġto ĠL TR . ĠDo Ġwe Ġwant Ġto Ġinclude Ġpreceding Ġrun ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġword _ RTL Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Word , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , Ġ// Ġ 1 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , Ġ// Ġ 2 st ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 9 , Ġ// ĠL F Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 2 , Ġ// Ġ 3 rd ĠSP Ġchar Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġtext . length , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ LTR Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠL 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 5 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġlocation . Ġnot Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ LTR Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) L 5 ĠL 6 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠL 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 5 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġlocation . Ġnot Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ RTL Text _ LTR Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| R 6 ĠR 5 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠR 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 5 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġlocation . Ġnot Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ RTL Text _ RTL Para _ include Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠR 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 5 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġlocation . Ġnot Ġrendered . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ LTR Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | Ġ( SP ) ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 5 ĠL 6 ( LF ) ĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 0 ) Ġ// Ġthree Ġspaces Ġand Ġone Ġline Ġfeeds Ġare Ġexcluded ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠL 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġis Ġskipped . ĠL 3 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 4 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġis Ġskipped . ĠL 5 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ LTR Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠL 1 ĠL 2 ĠSP ĠL 3 ĠL 4 ĠSP ĠL 5 ĠL 6 ĠL F ĠL 7 ĠL 8 ĠSP ĠL 9 ĠLA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| L 1 ĠL 2 ĠSP ĠL 3 ĠL 4 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) L 5 ĠL 6 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| L 7 ĠL 8 ĠSP ĠL 9 ĠLA | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ L 1 $ L 2 $ SP $ L 3 $ L 4 $ SP $ L 5 $ L 6 $ LF $ L 7 $ L 8 $ SP $ L 9 $ LA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 0 ) Ġ// Ġthree Ġspaces Ġand Ġone Ġline Ġfeeds Ġare Ġexcluded ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠL 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġis Ġskipped . ĠL 3 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 4 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġis Ġskipped . ĠL 5 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ RTL Text _ LTR Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// Ġ( LF ) Ġ| R 6 ĠR 5 ĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠL TR , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 0 ) Ġ// Ġthree Ġspaces Ġand Ġone Ġline Ġfeeds Ġare Ġexcluded ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠR 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġis Ġskipped . ĠR 3 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 4 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġis Ġskipped . ĠR 5 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġchar _ RTL Text _ RTL Para _ exclude Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġinput Ġ( Logical ): ĠR 1 ĠR 2 ĠSP ĠR 3 ĠR 4 ĠSP ĠR 5 ĠR 6 ĠL F ĠR 7 ĠT 8 ĠSP ĠR 9 ĠRA ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// Ġ( SP ) Ġ| R 4 ĠR 3 ĠSP ĠR 2 ĠR 1 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| ĠĠĠĠ Ġ( LF ) R 6 ĠR 5 | ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠ Ġ| RA ĠR 9 ĠSP ĠR 8 ĠR 7 | ĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġ// ĠNote Ġthat Ġtrailing Ġwhitespace Ġis Ġnot Ġcounted Ġin Ġline Ġwidth . ĠThe Ġcharacters Ġwith ĊĠĠĠĠĠĠĠ Ġ// Ġparent hesis Ġare Ġnot Ġcounted Ġas Ġwidth . ĊĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġ"$ R 1 $ R 2 $ SP $ R 3 $ R 4 $ SP $ R 5 $ R 6 $ LF $ R 7 $ R 8 $ SP $ R 9 $ RA " ĊĠĠĠĠĠĠĠ Ġval Ġsegments Ġ= Ġget Segments ( text , ĠRTL , ĠSegment Type . Character , Ġdrop Spaces Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments . size ). isEqualTo ( 1 0 ) Ġ// Ġthree Ġspaces Ġand Ġone Ġline Ġfeeds Ġare Ġexcluded ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 0 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// ĠR 1 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 2 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 1 st ĠSP Ġis Ġskipped . ĠR 3 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertThat ( segments [ 4 ]). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSegment ( Ġ// Ġ 2 nd ĠSP Ġis Ġskipped . ĠR 5 Ġcharacter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Offset Ġ= Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Offset Ġ= Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġ= Ġ 4 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Ġ= ĠLINE _ HEIGHT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġright Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Ġ= ĠLINE _ HEIGHT Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }