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