Project: alg-vis
/*******************************************************************************
 * Copyright (c) 2012 Jakub Kováč, Katarína Kotrlová, Pavol Lukča, Viktor Tomkovič, Tatiana Tóthová 
 *  
 * This program is free software: you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation, either version 3 of the License, or 
 * (at your option) any later version. 
 *  
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 *  
 * You should have received a copy of the GNU General Public License 
 * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 ******************************************************************************/
package algvis.core; 
 
import java.text.Normalizer; 
import java.util.Arrays; 
import java.util.Locale; 
import java.util.Random; 
import java.util.Vector; 
import java.util.regex.Pattern; 
 
import algvis.internationalization.Languages; 
 
public class WordGenerator { 
 private final static WordGenerator INSTANCE = new WordGenerator(); 
 private Vector<String> enWords; 
 private Vector<String> skWords; 
 private Random generator; 
 
 private WordGenerator() { 
  generator = new Random(System.currentTimeMillis()); 
  initRandomEnText(); 
  initRandomSkText(); 
 
 
 private static WordGenerator getInstance() { 
  return INSTANCE.changeGenerator(); 
 
 
 private WordGenerator changeGenerator() { 
  generator = new Random(System.currentTimeMillis()); 
  return this
 
  
 private Vector<String> getEnWords() { 
  return enWords; 
 
 
 private Vector<String> getSkWords() { 
  return skWords; 
 
 
 private Random getGenerator() { 
  return generator; 
 
 
 private static String getEnWord() { 
  WordGenerator wg = WordGenerator.getInstance(); 
  return wg.getEnWords().get( 
    wg.getGenerator().nextInt(wg.getEnWords().size())); 
 
 
 public static String getSkWord() { 
  WordGenerator wg = WordGenerator.getInstance(); 
  return wg.getSkWords().get( 
    wg.getGenerator().nextInt(wg.getSkWords().size())); 
 
  
 public static String getABWord(int n) { 
  Random r = WordGenerator.getInstance().getGenerator(); 
  StringBuilder s = new StringBuilder(""); 
  for (int i=0; i<n; ++i) { 
   if (r.nextBoolean()) s.append("A"); 
   else s.append("B"); 
  
  s.append("$"); 
  return s.toString(); 
 
  
 public static String getWord(Settings s) { 
  int current_language = Languages.getCurrentLanguage(); 
  switch (current_language) { 
  case 0
   return getEnWord(); 
  case 1
   return getSkWord(); 
  
  return null
 
 
 public static Vector<String> parseString(String ss) { 
  Vector<String> ll = new Vector<String>(Arrays.asList(ss 
    .replaceAll("'"" ").split("(\\s|,)+"))); 
  Vector<String> result = new Vector<String>(); 
  Pattern p = Pattern 
    .compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+"); 
  for (String s : ll) { 
   s = Normalizer.normalize(s, Normalizer.Form.NFD); 
   s = p.matcher(s).replaceAll(""); 
   s = s.toUpperCase(Locale.ENGLISH); 
   s = s.replaceAll("[^A-Z]"""); 
   result.add(s + "$"); 
  
 
  return result; 
 
 
 private void initRandomSkText() { 
  String skText = "Pokoj vládne v tomto kraji, " 
    "mesto stráži cestu obchodnú, " 
    "výhľad pekný -- nielen v Raji, " 
    "na rodnú našu Tatru nemennú. " 
    "Slovákovi dobre je, na poli sa darí, " 
    "Uhor dane vyzbiera, no on bohatstva má dosť, " 
    "osud mu však nepraje a snahu všetku marí, " 
    "veľký, mocný Tatár, chystá zlámať mu kosť! " + " " 
    "Na rýchlom koni mu to cvála, " 
    "rezko je tu, takmer hneď. " 
    "Slovák skrytý, v hore spáva, " + "bije Tata ako meď. " 
    "A keďže Slovák nebol žiadne psisko, " 
    "na vďaku Bohu, tu, postavil Kláštorisko. "
  skText += "Krásne skaly, divé rieky, uprostred lúka je, " 
    "kostol tu trčí ako pocta všemocnému Bohu, " 
    "Slovák má radosť, a len čo ošetrí si nohu, " 
    "ďalej na poliach v pokoji usilovne pracuje. " + "" 
    "Do hôr volá mníchov, ľudí s dobrým poslaním, " 
    "oni azkéti sú, jedia ryby, chlieb a hrach, " 
    "len raz za týždeň vidia za bránami mach, " 
    "avšak najviac prekvapia Ťa mlčaním. " + "" 
    "Ora et Labora -- modli sa a pracuj, dávne heslo platilo, " 
    "písanie a modlenie sa napĺňalo život ich. " 
    "Jeden hábit, v zime ovčia koža -- to vtedy sa nosilo, " 
    "dnes sa trasiem -- nechcem byť jedným z nich. " 
    "Veľmi sa však zaujímam, ako pri tom mlčaní, " 
    "viedli život, mali slovo pri spoločnom sedení. "
  skText += "Zleteli orly z Tatry, tiahnu na podolia, " 
    "ponad vysoké hory, ponad rovné polia; " 
    "preleteli cez Dunaj, cez tú šíru vodu, " 
    "sadli tam za pomedzím slovenského rodu. " + "" 
    "Duní Dunaj a luna za lunou sa valí: " 
    "nad ním svieti pevný hrad na vysokom bralí. " 
    "Pod tým hradom Riman—cár zastal si táborom: " 
    "belia sa rady šiatrov ďalekým priestorom. " 
    "Pokraj táboru sedí cár na zlatom stolci; " 
    "okol neho cárska stráž, tuhí to paholci; " 
    "a pred cárom družina neveliká stojí: " 
    "sú to cudzí víťazi, každý v jasnej zbroji. " 
    "Pobelavé kaderie šije im obtáča, " 
    "modré ich oči bystro v okolo si páča. " 
    "Rastom sú ako jedle, pevní ako skala, " 
    "zdalo by sa ti, že ich jedna mater mala. " 
    "Krásna zem ? jej končiny valný Dunaj vlaží, " 
    "a Tatra skalnou hradbou okol nej sa väží: " 
    "Tá zem, tie pyšné hory, tie žírne moravy: " 
    "to vlasť ich, to kolíska dávna synov slávy. " 
    "Slovenský rod ich poslal, zo slávneho snemu, " 
    "aby išli s pozdravom k cárovi rímskemu. " 
    "Oni čelom nebijú, do nôh nepadajú: " 
    "taká otroč neznáma slovenskému kraju, " 
    "lež božie dary nesú, chlieb a soľ, cárovi " 
    "a smelými sa jemu primlúvajú slovy: " 
    "Národ slovenský, kňazstvo i staršina naša, " 
    "kroz nás ti, slávny cáre! svoj pozdrav prináša. " 
    "Zem tá, na ktorú kročiť mieni tvoja noha, " 
    "to je zem naša, daná Slovänom od Boha. " 
    "Pozri: tu jej končiny valný Dunaj vlaží, " 
    "tam Tatra skalnou hradbou okol nej sa väží. " 
    "A zem to požehnaná! Chvála Bohu z neba, " 
    "máme pri vernej práci voždy svoj kus chleba. " 
    "Zvyk náš je nie napadať cudzie vlasti zbojom: " 
    "Slovän na svojom seje, i žne len na svojom, " 
    "cudzie nežiada. Ale keď na naše dvere " 
    "zaklope ruka cudzia v úprimnej dôvere: " 
    "kto je, ten je; či je on zblíza, či zďaleka: " 
    "Vo dne, v noci na stole dar boží ho čaká. " 
    "Pravda, bohy vydaná, káže nám Slovänom: " 
    "pána mať je neprávosť a väčšia byť pánom. " 
    "A človek nad človeka u nás nemá práva: " 
    "sväté naše heslo je: Sloboda a sláva! ? " 
    "Neraz krásnu vlasť našu vrah napadol divý: " 
    "na púšť obrátili sa bujné naše nivy; " 
    "mestá ľahli popolom: a ľud náš úbohý, " 
    "bitý biedami, cudzím dostal sa pod nohy. " 
    "Bláhal už víťaz pyšný, že si bude pásti " 
    "vôľu svoju naveky po slovänskej vlasti, " 
    "a žiť z našich mozoľov: ale bláhal darmo! " 
    "Dal nám Boh zas dobrý deň, zlomili sme jarmo. " 
    "A tí, krutým železom čo nad nami vládli, " 
    "kdeže sú? ? My stojíme; ale oni padli. ? " 
    "Lebo ? veky to svedčia ? vo knihách osudu " 
    "tak stojí napísané o slovänskom ľudu: " 
    "Zem, ktorú v údel dali Slovänom nebesá, " 
    "tá zem hrobom každému vrahovi stane sa. ? " 
    "Nuž, povedzže nám, cáre! mocná ruka tvoja " 
    "čože nám nesie: či meč, či vetvu pokoja? " 
    "S mečom ak ideš: cáre! meče máme i my, " 
    "a poznáš, že narábať dobre vieme s nimi; " 
    "ak s pokojom: pozdrav ťa pán neba i zeme, " 
    "lepšie, ako ťa my tu pozdraviť umieme. ? " 
    "Tieto dary božie sú priazne našej znaky; " 
    "z ďaky ti ich dávame: ber ich aj ty z ďaky.? " 
    "Nevzal cár božie dary, z jeho mračnej tvári " 
    "urazená sa pýcha ľútnym hnevom žiari. " 
    "A zo stolca zlatého takovým sa heslom " 
    "ozvali ústa jeho ku slovänským poslom: " 
    "Mocný pán, ktorému boh celú zem podnožil " 
    "a osudy národov v ruku jeho vložil: " 
    "ten pán velí: Slovänia! pozrite po svete: " 
    "medzi národy jeho či jeden nájdete, " 
    "ktorý by putá minul abo nezahynul, " 
    "akže oproti Rímu prápor svoj rozvinul. " 
    "Skloníte šije i vy. ? Tie krásne roviny, " 
    "túto zem vašich dedov dostane ľud iný. " 
    "A spurné rody vaše pôjdu Rímu slúžiť, " 
    "strážiť nám naše stáda, polia naše plúžiť. " 
    "A junač vašu k mojim junákom pripojím, " 
    "a z nej krajinám rímskym obranu pristrojím. " 
    "A kto sa proti mojim rozkazom postaví, " 
    "beda mu! ten sám sebe záhubu pripraví. " 
    "Vedzte, že som pán Rímu, a Rím je pán svetu: " 
    "To moja cárska vôľa; to vám na odvetu.? " + "" 
    "Hriema pyšný cár, hriema zo stolca zlatého, " 
    "lenže Slovän nejde sa ľakať pýchy jeho. " 
    "Hoj, rozovrela tá krv slovänská divoko, " 
    "a junák ti cárovi pozrel okom v oko; " 
    "a z oka ti mu božia zablysla sa strela, " 
    "ruka sa napružila a na zbroj udrela; " 
    "a jedným veľkým citom srdcia im zahrali; " 
    "a jeden strašný ohlas ústa im vydali: " 
    "„Mor ho!? kríkla družina slovänská odrazu " 
    "a meč zasvietil v pästi každému víťazu: " 
    "„Mor ho!? kríkla a razom na cára sa metá: " 
    "To ti na rímsku pýchu slovänská odveta. " 
    "No, dokáž teraz, či máš toľko sily v meči, " 
    "koľko pýchy vo tvojej, cáre, bolo reči. ? " 
    "Ale ten nie! ? zbroje sa bojí podlá duša: " 
    "a tu ti o slobodu dobrý ľud pokúša. ? " 
    "Skočil medzi stráž svoju cár bledý od strachu: " 
    "a zlatý jeho stolec už sa váľa v prachu; " 
    "a mečom za ním Slovän cestu si preráža " 
    "a junák za junákom padá cárska stráža. " + "" 
    "Zasurmili surmity, volajú do zbroje: " 
    "povstal tábor, do šíkov zvíjajú sa voje; " 
    "a voj za vojom divým útokom ta letí, " 
    "kde boj na cára bijú tie slovänské deti. " 
    "Husté prachu kúdoly po poli valia sa, " 
    "zem dupotom a nebo rykom sa otriasa. ? " 
    "A tá naša rodinka, tá slovänská čata, " 
    "už vám je zôkol—vôkol od vrahov obstatá. " 
    "Sto mečov sa každému nado hlavou blyští, " 
    "lež Slovän nečítava vrahov na bojišti, " 
    "ale morí. ? Hoj, mor ho! detvo môjho rodu, " 
    "kto kradmou rukou siahne na tvoju slobodu: " 
    "a čo i tam dušu dáš v tom boji divokom: " 
    "Mor ty len, a voľ nebyť, ako byť otrokom. " + "" 
    "Zúri boj a našina stala si dokola: " 
    "to vie, že premoc rímsku jej moc nepredolá: " 
    "lež, brať moja, ak už len padnúť mi máš v boji, " 
    "to že mi padni, ako víťazom pristojí." + "" 
    "A môj Slovän ešte raz bystré hodil zraky " 
    "ponad tie šíre rovne, na kraj svoj ďaleký. " 
    "Tam na tých horách sivé mihajú sa väže, " 
    "čo strežú slovenského národa čierťaže. " 
    "Svätoháj, stovekými zelený lipami, " 
    "v tajné tam lono túli bohov jeho chrámy. " 
    "A nad riekou biely dom, v ňom jeho rod milý, " 
    "a v čistom poli dedov posvätné mohyly: " 
    "dedov, ktorých niekdy ľud radievali rady, " 
    "ktorých meč divých vrahov odrážal nápady. " 
    "Ich popoly dávno už čierna zem tam kryje, " 
    "ale ich meno posiaľ v piesni ľudu žije. " 
    "A sláva zašlých vekov junáka oviala; " 
    "a duša jeho svätým ohňom splápolala, " 
    "a meč v jeho pravici strašnejšie sa zvíja; " 
    "bleskom blýska na vraha, hromom ho zabíja. " 
    "Praštia zlomené raty, bité štíty zvonia " 
    "a pyšné prilby rímske do prachu sa ronia. " + "" 
    "Hynú i naši, hynú, ale sťa víťazi! " 
    "Žiadna rana zvuk bôľu z úst im nevyrazí, " 
    "vďačne lejú vernú krv po osudnom poli: " 
    "oj, veď padnúť za národ ? oj, veď to nebolí! " + "" 
    "A boj pomaly tíchne: strašná búry sila " 
    "divým svojím zúrením sama sa zničila. " 
    "? A kde naši, čo bili ten Rím svetovládny, " 
    "lebo koval úmysel na Slovänstvo zradný: ? " 
    "Kde naši? ? Hojže, Tatro, jasných orlov mati! " 
    "Nikdy sa ti tá tvoja detva už nevráti. " 
    "Páč! Nad valným Dunajom krvavô pobrežia: " 
    "tam ti tvoji synovia povraždení ležia. " 
    "Neostal, ani kto by tú zvesť niesol bratom: " 
    "Bratia vám za česť rodu padli v boji svätom. " 
    "Lež každý na junáckej spočíva posteli, " 
    "na kope vrahov, zbitých od jeho oceli. " 
    "Už nežije, a ešte hrozí tá tvár bledá, " 
    "tá ruka zmeravená meč odjať si nedá. " + "" 
    "A cár s okom sklopeným na bojišti stojí: " 
    "A čo? ? Azda tých padlých Slovänov sa bojí? ? " 
    "Nie, lež bezdušné svojich hromady tam vidí " 
    "a zo svojho víťazstva radovať sa stydí. " 
    "No zahyň, studom večným zahyň, podlá duša, " 
    "čo o slobodu dobrý ľud môj mi pokúša. " 
    "Lež večná meno toho nech ovenčí sláva, " 
    "kto seba v obeť svätú za svoj národ dáva. " 
    "A ty mor ho! ? hoj mor ho! detvo môjho rodu, " 
    "kto kradmou rukou siahne na tvoju slobodu; " 
    "a čo i tam dušu dáš v tom boji divokom: " 
    "Mor ty len, a voľ nebyť, ako byť otrokom. "
  // taken from: 
  // http://zlatyfond.sme.sk/dielo/83/Chalupka_Mor-ho/1#ixzz1nf7uhUz5 
 
  skWords = parseString(skText); 
 
 
 private void initRandomEnText() { 
  String enText = "To be, or not to be: that is the question: " 
    "Whether 'tis nobler in the mind to suffer " 
    "The slings and arrows of outrageous fortune, " 
    "Or to take arms against a sea of troubles, " 
    "And by opposing end them? To die: to sleep; " 
    "No more; and by a sleep to say we end " 
    "The heart-ache and the thousand natural shocks " 
    "That flesh is heir to, 'tis a consummation " 
    "Devoutly to be wish'd. To die, to sleep; " 
    "To sleep: perchance to dream: ay, there's the rub; " 
    "For in that sleep of death what dreams may come " 
    "When we have shuffled off this mortal coil, " 
    "Must give us pause: there's the respect " 
    "That makes calamity of so long life; " 
    "For who would bear the whips and scorns of time, " 
    "The oppressor's wrong, the proud man's contumely, " 
    "The pangs of despised love, the law's delay, " 
    "The insolence of office and the spurns " 
    "That patient merit of the unworthy takes, " 
    "When he himself might his quietus make " 
    "With a bare bodkin? who would fardels bear, " 
    "To grunt and sweat under a weary life, " 
    "But that the dread of something after death, " 
    "The undiscover'd country from whose bourn " 
    "No traveller returns, puzzles the will " 
    "And makes us rather bear those ills we have " 
    "Than fly to others that we know not of? " 
    "Thus conscience does make cowards of us all; " 
    "And thus the native hue of resolution " 
    "Is sicklied o'er with the pale cast of thought, " 
    "And enterprises of great pith and moment " 
    "With this regard their currents turn awry, " 
    "And lose the name of action. - Soft you now! " 
    "The fair Ophelia! Nymph, in thy orisons " 
    "Be all my sins remember'd."
  enWords = parseString(enText); 
 
}