17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 1996-2012, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.rbbi; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.ListResourceBundle; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.BreakIterator; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.RuleBasedBreakIterator; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// TODO: {dlf} this test currently doesn't test anything! 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// You'll notice that the resource that uses the dictionary isn't even on the resource path, 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// so the dictionary never gets used. Good thing, too, because it would throw a security 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// exception if run with a security manager. Not that it would matter, the dictionary 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resource isn't even in the icu source tree! 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// In order to fix this: 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 1) make sure english.dict matches the current dictionary format required by dbbi 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 2) make sure english.dict gets included in icu4jtests.jar 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 3) have this test use getResourceAsStream to get a stream on the dictionary, and 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// directly instantiate a DictionaryBasedBreakIterator. It can use the rules from 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the appropriate section of ResourceBundle_en_US_TEST. I'd suggest just copying 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the rules into this file. 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 4) change the test text by inserting '|' at word breaks, and '||' at line breaks. 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 5) process this text to a) create tables of break indices, and b) clean up the test 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// for the break iterator to work on 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// This would NOT test the ability to load dictionary-based break iterators through our 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// normal resource mechanism. One could install such a break iterator and its 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resources into the icu4j jar, and it would work, but there's no way to register entire 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resources from outside yet. Even if there were, the access restrictions are a bit 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// difficult to manage, if one wanted to register a break iterator whose code and data 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// resides outside the icu4j jar. Since the code to instantiate would be going through 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// two protection domains, each domain would have to allow access to the data-- but 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// icu4j's domain wouldn't know about ours. So we could instantiate before registering 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the break iterator, but this would mean we'd have to fully initialize the dictionary(s) 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// at instantiation time, rather than let this be deferred until they are actually needed. 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// I've done items 2 and 3 above. Unfortunately, since I haven't done item 1, the 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// dictionary builder crashes. So for now I'm disabling this test. This is not 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// that important, since we have a thai dictionary that we do test thoroughly. 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class SimpleBITest extends TestFmwk{ 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final String testText = 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// "The rain in Spain stays mainly on the plain. The plains in Spain are mainly pained with rain."; 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"one-two now-- Hah! You owe me exactly $1,345.67... Pay up, huh? By the way, why don't I send you my re\u0301sume\u0301? This is a line\r\nbreak."; 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"nowisthetimeforallgoodmen... tocometothehelpoftheircountry"; 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert"When, in the course of human events, it becomes necessary for one people to dissolve the political bonds which have " 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//"When,inthecourseofhumanevents,itbecomesnecessaryforonepeopletodissolvethepoliticalbondswhichhave" 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "connectedthemwithanother,andtoassumeamongthepowersoftheearth,theseparateandequalstationtowhichthelaws" 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ofnatureandofnature'sGodentitlethem,adecentrespecttotheopinionsofmankindrequiresthattheyshoulddeclarethe" 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "causeswhichimpelthemtotheseparation\n" 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Weholdthesetruthstobeself-evident,thatallmenarecreatedequal,thattheyareendowedbytheirCreatorwithcertain" 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "unalienablerights,thatamongthesearelife,libertyandthepursuitofhappiness.Thattosecuretheserights,governmentsare" 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "institutedamongmen,derivingtheirjustpowersfromtheconsentofthegoverned.Thatwheneveranyformofgovernment" 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "becomesdestructivetotheseends,itistherightofthepeopletoalterortoabolishit,andtoinstitutenewgovernment,laying" 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "itsfoundationonsuchprinciplesandorganizingitspowersinsuchform,astothemshallseemmostlikelytoeffecttheirsafety" 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "andhappiness.Prudence,indeed,willdictatethatgovernmentslongestablishedshouldnotbechangedforlightandtransient" 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "causes;andaccordinglyallexperiencehathshownthatmankindaremoredisposedtosuffer,whileevilsaresufferable,than" 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "torightthemselvesbyabolishingtheformstowhichtheyareaccustomed.Butwhenalongtrainofabusesandusurpations," 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "pursuinginvariablythesameobjectevincesadesigntoreducethemunderabsolutedespotism,itistheirright,itistheirduty," 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "tothrowoffsuchgovernment,andtoprovidenewguardsfortheirfuturesecurity.--Suchhasbeenthepatientsufferanceof" 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "thesecolonies;andsuchisnowthenecessitywhichconstrainsthemtoaltertheirformersystemsofgovernment.Thehistory" 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ofthepresentKingofGreatBritainisahistoryofrepeatedinjuriesandusurpations,allhavingindirectobjectthe" 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "establishmentofanabsolutetyrannyoverthesestates.Toprovethis,letfactsbesubmittedtoacandidworld.\n" 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedhisassenttolaws,themostwholesomeandnecessaryforthepublicgood.\n" 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasforbiddenhisgovernorstopasslawsofimmediateandpressingimportance,unlesssuspendedintheiroperationtill" 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "hisassentshouldbeobtained;andwhensosuspended,hehasutterlyneglectedtoattendtothem.\n" 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedtopassotherlawsfortheaccommodationoflargedistrictsofpeople,unlessthosepeoplewouldrelinquish" 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "therightofrepresentationinthelegislature,arightinestimabletothemandformidabletotyrantsonly.\n" 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehascalledtogetherlegislativebodiesatplacesunusual,uncomfortable,anddistantfromthedepositoryoftheirpublic" 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "records,forthesolepurposeoffatiguingthemintocompliancewithhismeasures.\n" 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasdissolvedrepresentativehousesrepeatedly,foropposingwithmanlyfirmnesshisinvasionsontherightsofthepeople.\n" 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasrefusedforalongtime,aftersuchdissolutions,tocauseotherstobeelected;wherebythelegislativepowers," 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "incapableofannihilation,havereturnedtothepeopleatlargefortheirexercise;thestateremaininginthemeantimeexposed" 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "toallthedangersofinvasionfromwithout,andconvulsionswithin.\n" 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasendeavoredtopreventthepopulationofthesestates;forthatpurposeobstructingthelawsfornaturalizationof" 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "foreigners;refusingtopassotherstoencouragetheirmigrationhither,andraisingtheconditionsofnewappropriationsof" 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "lands.\n" 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasobstructedtheadministrationofjustice,byrefusinghisassenttolawsforestablishingjudiciarypowers.\n" 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasmadejudgesdependentonhiswillalone,forthetenureoftheiroffices,andtheamountandpaymentoftheirsalaries.\n" 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehaserectedamultitudeofnewoffices,andsenthitherswarmsofofficerstoharassourpeople,andeatouttheir" 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "substance.\n" 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehaskeptamongus,intimesofpeace,standingarmieswithouttheconsentofourlegislature.\n" 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasaffectedtorenderthemilitaryindependentofandsuperiortocivilpower.\n" 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehascombinedwithotherstosubjectustoajurisdictionforeigntoourconstitution,andunacknowledgedbyourlaws;" 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "givinghisassenttotheiractsofpretendedlegislation:\n" 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forquarteringlargebodiesofarmedtroopsamongus:\n" 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forprotectingthem,bymocktrial,frompunishmentforanymurderswhichtheyshouldcommitontheinhabitantsofthese" 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "states:\n" 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forcuttingoffourtradewithallpartsoftheworld:\n" 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forimposingtaxesonuswithoutourconsent:\n" 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fordeprivingusinmanycases,ofthebenefitsoftrialbyjury:\n" 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fortransportingusbeyondseastobetriedforpretendedoffenses:\n" 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "ForabolishingthefreesystemofEnglishlawsinaneighboringprovince,establishingthereinanarbitrarygovernment,and" 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "enlargingitsboundariessoastorenderitatonceanexampleandfitinstrumentforintroducingthesameabsoluteruleinthese" 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "colonies:\n" 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Fortakingawayourcharters,abolishingourmostvaluablelaws,andalteringfundamentallytheformsofourgovernments:\n" 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Forsuspendingourownlegislatures,anddeclaringthemselvesinvestedwithpowertolegislateforusinallcaseswhatsoever.\n" 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasabdicatedgovernmenthere,bydeclaringusoutofhisprotectionandwagingwaragainstus.\n" 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasplunderedourseas,ravagedourcoasts,burnedourtowns,anddestroyedthelivesofourpeople.\n" 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Heisatthistimetransportinglargearmiesofforeignmercenariestocompletetheworksofdeath,desolationandtyranny," 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "alreadybegunwithcircumstancesofcrueltyandperfidyscarcelyparalleledinthemostbarbarousages,andtotalyunworth" 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "theheadofacivilizednation.\n" 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasconstrainedourfellowcitizenstakencaptiveonthehighseastobeararmsagainsttheircountry,tobecomethe" 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "executionersoftheirfriendsandbrethren,ortofallthemselvesbytheirhands.\n" 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Hehasexciteddomesticinsurrectionsamongstus,andhasendeavoredtobringontheinhabitantsofourfrontiers,the" 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "mercilessIndiansavages,whoseknownruleofwarfare,isundistinguisheddestructionofallages,sexesandconditions.\n" 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "Ineverystageoftheseoppressionswehavepetitionedforredressinthemosthumbleterms:ourrepeatedpetitionshave" 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "beenansweredonlybyrepeatedinjury.Aprince,whosecharacteristhusmarkedbyeveryactwhichmaydefineatyrant,is" 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "unfittobetherulerofafreepeople.\n" 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "NorhavewebeenwantinginattentiontoourBritishbrethren.Wehavewarnedthemfromtimetotimeofattemptsbytheir" 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "legislaturetoextendanunwarrantablejurisdictionoverus.Wehaveremindedthemofthecircumstancesofouremigration" 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "andsettlementhere.Wehaveappealedtotheirnativejusticeandmagnanimity,andwehaveconjuredthembythetiesofour" 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "commonkindredtodisavowtheseusurpations,which,wouldinevitablyinterruptourconnectionsandcorrespondence.We" 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "must,therefore,acquiesceinthenecessity,whichdenouncesourseparation,andholdthem,asweholdtherestofmankind," 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "enemiesinwar,inpeacefriends.\n" 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "We,therefore,therepresentativesoftheUnitedStatesofAmerica,inGeneralCongress,assembled,appealingtothe" 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "SupremeJudgeoftheworldfortherectitudeofourintentions,do,inthename,andbytheauthorityofthegoodpeopleof" 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "thesecolonies,solemnlypublishanddeclare,thattheseunitedcoloniesare,andofrightoughttobefreeandindependent" 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "states;thattheyareabsolvedfromallallegiancetotheBritishCrown,andthatallpoliticalconnectionbetweenthemandthe" 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "stateofGreatBritain,isandoughttobetotallydissolved;andthatasfreeandindependentstates,theyhavefullpowerto" 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "leveywar,concludepeace,contractalliances,establishcommerce,andtodoallotheractsandthingswhichindependent" 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "statesmayofrightdo.Andforthesupportofthisdeclaration,withafirmrelianceontheprotectionofDivineProvidence,we" 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert+ "mutuallypledgetoeachotherourlives,ourfortunesandoursacredhonor.\n"; 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new SimpleBITest().run(args); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert protected boolean validate() { 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: remove when english.dict gets fixed 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return false; 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private BreakIterator createTestIterator(int kind) { 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String bname = "com.ibm.icu.dev.test.rbbi.BreakIteratorRules_en_US_TEST"; 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator iter = null; 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ListResourceBundle bundle = null; 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Class cls = Class.forName(bname); 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bundle = (ListResourceBundle)cls.newInstance(); 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create bundle: " + bname + "exception: " + e.getMessage()); 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return null; 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[] kindNames = { 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "Character", "Word", "Line", "Sentence" 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rulesName = kindNames[kind] + "BreakRules"; 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] classNames = bundle.getStringArray("BreakIteratorClasses"); 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String rules = bundle.getString(rulesName); 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (classNames[kind].equals("RuleBasedBreakIterator")) { 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert iter = new RuleBasedBreakIterator(rules); 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iter == null) { 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("could not create iterator"); 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return iter; 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testWordBreak() throws Exception { 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator wordBreak = createTestIterator(BreakIterator.KIND_WORD); 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int breaks = doTest(wordBreak); 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.valueOf(breaks)); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testLineBreak() throws Exception { 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator lineBreak = createTestIterator(BreakIterator.KIND_LINE); 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int breaks = doTest(lineBreak); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.valueOf(breaks)); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testSentenceBreak() throws Exception { 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator sentenceBreak = createTestIterator(BreakIterator.KIND_SENTENCE); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int breaks = doTest(sentenceBreak); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(String.valueOf(breaks)); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private int doTest(BreakIterator bi) { 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // forward 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText(testText); 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int p = bi.first(); 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int lastP = p; 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String fragment; 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int breaks = 0; 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Forward..."); 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (p != BreakIterator.DONE) { 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = bi.next(); 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE) { 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fragment = testText.substring(lastP, p); 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fragment = testText.substring(lastP); 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert debugPrintln(": >" + fragment + "<"); 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++breaks; 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert lastP = p; 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return breaks; 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void debugPrintln(String s) { 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String zeros = "0000"; 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp; 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer out = new StringBuffer(); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < s.length(); i++) { 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char c = s.charAt(i); 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (c >= ' ' && c < '\u007f') 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append(c); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else { 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append("\\u"); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert temp = Integer.toHexString((int)c); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append(zeros.substring(0, 4 - temp.length())); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append(temp); 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(out.toString()); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* private void debugPrintln2(String s) { 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer out = new StringBuffer(); 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < s.length(); i++) { 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char c = s.charAt(i); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (c >= '\u0100') 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append("<" + ((int)c - 0x100) + ">"); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out.append(c); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(out.toString()); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }*/ 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 243