blindtext.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /**
  2. * A blindtext generator written in JavaScript. It uses a set of latin words to create either a given amount
  3. * of words or sentences.
  4. *
  5. * @author mightyplow
  6. */
  7. const DEFAULT_MIN_WORDS_PER_SENTENCE = 3;
  8. const DEFAULT_MAX_WORDS_PER_SENTENCE = 9;
  9. const availableWords = [
  10. 'post', 'emensos', 'insuperabilis', 'expeditionis', 'eventus', 'languentibus',
  11. 'partium', 'animis', 'quas', 'periculorum', 'varietas', 'fregerat',
  12. 'et', 'laborum', 'nondum', 'tubarum', 'cessante', 'clangore',
  13. 'vel', 'milite', 'locato', 'per', 'stationes', 'hibernas',
  14. 'fortunae', 'saevientis', 'procellae', 'tempestates', 'alias', 'rebus',
  15. 'infudere', 'communibus', 'multa', 'illa', 'dira', 'facinora',
  16. 'caesaris', 'galli', 'qui', 'ex', 'squalore', 'imo',
  17. 'miseriarum', 'in', 'aetatis', 'adultae', 'primitiis', 'ad',
  18. 'principale', 'culmen', 'insperato', 'saltu', 'provectus', 'ultra',
  19. 'terminos', 'potestatis', 'delatae', 'procurrens', 'asperitate', 'nimia',
  20. 'cuncta', 'foedabat', 'propinquitate', 'enim', 'regiae', 'stirpis',
  21. 'gentilitateque', 'etiam', 'tum', 'constantini', 'nominis', 'efferebatur',
  22. 'fastus', 'si', 'plus', 'valuisset', 'ausurus', 'hostilia',
  23. 'auctorem', 'suae', 'felicitatis', 'ut', 'videbatur', 'cuius',
  24. 'acerbitati', 'uxor', 'grave', 'accesserat', 'incentivum', 'germanitate',
  25. 'augusti', 'turgida', 'supra', 'modum', 'quam', 'hannibaliano',
  26. 'regi', 'fratris', 'filio', 'antehac', 'constantinus', 'iunxerat',
  27. 'pater', 'megaera', 'quaedam', 'mortalis', 'inflammatrix', 'adsidua',
  28. 'humani', 'cruoris', 'avida', 'nihil', 'mitius', 'maritus',
  29. 'paulatim', 'eruditiores', 'facti', 'processu', 'temporis', 'nocendum',
  30. 'clandestinos', 'versutosque', 'rumigerulos', 'conpertis', 'leviter', 'addere',
  31. 'male', 'suetos', 'falsa', 'placentia', 'sibi', 'discentes',
  32. 'adfectati', 'regni', 'artium', 'nefandarum', 'calumnias', 'insontibus',
  33. 'adfligebant', 'eminuit', 'autem', 'inter', 'humilia', 'supergressa',
  34. 'iam', 'impotentia', 'fines', 'mediocrium', 'delictorum', 'nefanda',
  35. 'clematii', 'cuiusdam', 'alexandrini', 'nobilis', 'mors', 'repentina',
  36. 'socrus', 'cum', 'misceri', 'generum', 'flagrans', 'eius',
  37. 'amore', 'non', 'impetraret', 'ferebatur', 'palatii', 'pseudothyrum',
  38. 'introducta', 'oblato', 'pretioso', 'reginae', 'monili', 'id',
  39. 'adsecuta', 'est', 'honoratum', 'comitem', 'orientis', 'formula',
  40. 'missa', 'letali', 'omnino', 'scelere', 'nullo', 'contactus',
  41. 'idem', 'clematius', 'nec', 'hiscere', 'loqui', 'permissus',
  42. 'occideretur', 'post', 'hoc', 'impie', 'perpetratum', 'quod',
  43. 'aliis', 'quoque', 'timebatur', 'tamquam', 'licentia', 'crudelitati',
  44. 'indulta', 'suspicionum', 'nebulas', 'aestimati', 'quidam', 'noxii',
  45. 'damnabantur', 'quorum', 'pars', 'necati', 'alii', 'puniti',
  46. 'bonorum', 'multatione', 'actique', 'laribus', 'suis', 'extorres',
  47. 'relicto', 'praeter', 'querelas', 'lacrimas', 'stipe', 'conlaticia',
  48. 'victitabant', 'civili', 'iustoque', 'imperio', 'voluntatem', 'converso',
  49. 'cruentam', 'claudebantur', 'opulentae', 'domus', 'clarae', 'vox',
  50. 'accusatoris', 'ulla', 'licet', 'subditicii', 'his', 'malorum',
  51. 'quaerebatur', 'acervis', 'saltem', 'specie', 'tenus', 'crimina',
  52. 'praescriptis', 'legum', 'committerentur', 'aliquotiens', 'fecere', 'principes',
  53. 'saevi', 'sed', 'quicquid', 'caesaris', 'implacabilitati', 'sedisset',
  54. 'velut', 'fas', 'iusque', 'perpensum', 'confestim', 'urgebatur',
  55. 'impleri', 'excogitatum', 'super', 'homines', 'ignoti', 'vilitate',
  56. 'ipsa', 'parum', 'cavendi', 'colligendos', 'rumores', 'antiochiae',
  57. 'latera', 'destinarentur', 'relaturi', 'quae', 'audirent', 'hi',
  58. 'peragranter', 'dissimulanter', 'honoratorum', 'circulis', 'adsistendo', 'pervadendoque',
  59. 'divites', 'egentium', 'habitu', 'noscere', 'poterant', 'audire',
  60. 'latenter', 'intromissi', 'posticas', 'regiam', 'nuntiabant', 'observantes',
  61. 'conspiratione', 'concordi', 'fingerent', 'cognita', 'duplicarent', 'peius',
  62. 'laudes', 'vero', 'supprimerent', 'caesaris', 'invitis', 'conpluribus',
  63. 'formido', 'inpendentium', 'exprimebat', 'interdum', 'acciderat', 'siquid',
  64. 'penetrali', 'secreto', 'citerioris', 'vitae', 'ministro', 'praesente',
  65. 'paterfamilias', 'uxori', 'susurrasset', 'aurem', 'amphiarao', 'referente',
  66. 'aut', 'marcio', 'quondam', 'vatibus', 'inclitis', 'postridie',
  67. 'disceret', 'imperator', 'ideoque', 'parietes', 'arcanorum', 'soli',
  68. 'conscii', 'timebantur', 'adolescebat', 'obstinatum', 'propositum', 'erga',
  69. 'haec', 'similia', 'scrutanda', 'stimulos', 'admovente', 'regina',
  70. 'abrupte', 'mariti', 'fortunas', 'trudebat', 'exitium', 'praeceps',
  71. 'eum', 'potius', 'lenitate', 'feminea', 'veritatis', 'humanitatisque',
  72. 'viam', 'reducere', 'utilia', 'suadendo', 'deberet', 'gordianorum',
  73. 'actibus', 'factitasse', 'maximini', 'truculenti', 'illius', 'imperatoris',
  74. 'rettulimus', 'coniugem', 'novo', 'denique', 'perniciosoque', 'exemplo',
  75. 'gallus', 'ausus', 'inire', 'flagitium', 'romae', 'ultimo',
  76. 'dedecore', 'temptasse', 'aliquando', 'dicitur', 'gallienus', 'adhibitis',
  77. 'paucis', 'clam', 'ferro', 'succinctis', 'vesperi', 'tabernas',
  78. 'palabatur', 'conpita', 'quaeritando', 'graeco', 'sermone', 'erat',
  79. 'inpendio', 'gnarus', 'quid', 'de', 'caesare', 'quisque',
  80. 'sentiret', 'confidenter', 'agebat', 'urbe', 'ubi', 'pernoctantium',
  81. 'luminum', 'claritudo', 'dierum', 'solet', 'imitari', 'fulgorem',
  82. 'postremo', 'agnitus', 'saepe', 'iamque', 'prodisset', 'conspicuum',
  83. 'se', 'fore', 'contemplans', 'nisi', 'luce', 'palam',
  84. 'egrediens', 'agenda', 'putabat', 'seria', 'cernebatur', 'quidem',
  85. 'medullitus', 'multis', 'gementibus', 'agebantur'
  86. ];
  87. const punctuationMarks = ['.', '!', '?'];
  88. function randomInt (min, max) {
  89. return min + Math.round(Math.random() * max);
  90. }
  91. function getRandomArrayValue (source) {
  92. const randomIndex = randomInt(0, source.length - 1);
  93. return source[randomIndex];
  94. }
  95. const getRandomPunctuationMark = getRandomArrayValue.bind(null, punctuationMarks);
  96. const getRandomWord = getRandomArrayValue.bind(null, availableWords);
  97. function createSentence (minWords = DEFAULT_MIN_WORDS_PER_SENTENCE, maxWords = DEFAULT_MAX_WORDS_PER_SENTENCE) {
  98. const numWords = randomInt(minWords, maxWords);
  99. const sentenceWords = [];
  100. for (let i = 0, randomWord = ''; i < numWords; i += 1) {
  101. do {
  102. randomWord = getRandomWord();
  103. } while(sentenceWords.includes(randomWord));
  104. // capitalize first letter when first word of sentence
  105. // also capitalize when a random number between 0 and 3 is 0 -> just to get more capital letters
  106. sentenceWords.push(
  107. (i !== 0 && randomInt(0, 3) > 0)
  108. ? randomWord
  109. : randomWord.toUpperCase()
  110. );
  111. }
  112. return sentenceWords.join(' ') + getRandomPunctuationMark;
  113. }
  114. const Unit = {
  115. SENTENCE: 'sentence',
  116. WORD: 'word'
  117. };
  118. const UnitFunction = {
  119. [Unit.SENTENCE]: createSentence,
  120. [Unit.WORD]: getRandomWord
  121. };
  122. function createText (num, unit = Unit.WORD) {
  123. if (!UnitFunction.hasOwnProperty(unit)) {
  124. throw new Exception('Invalid unit parameter');
  125. }
  126. const unitCreator = UnitFunction[unit];
  127. const texts = [];
  128. for (let i = 0; i < num; i += 1) {
  129. texts.push(unitCreator());
  130. }
  131. return texts.join(' ');
  132. }
  133. export {
  134. createText
  135. };