浏览代码

add implementation of blindtext generator

mightyplow 6 年之前
当前提交
51f2a70548
共有 2 个文件被更改,包括 153 次插入0 次删除
  1. 1 0
      .gitignore
  2. 152 0
      blindtext.js

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+.idea/

+ 152 - 0
blindtext.js

@@ -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
+};