p(line: string = '', indent: number = 0) { let tabs = ''; for (let i = 0; i < indent; ++i) tabs += '\t'; let data = new Buffer(tabs + line + '\n'); fs.writeSync(this.out, data, 0, data.length, null); }
async function actionPrime(hunspellDicFilename: string, options: Options) { displayHelp = false; const { sort = false, unique = false, output: outputFile, lower_case: lowerCase = false, transform = true, infix = false, rules = false, progress: showProgress = false, } = options; logStream = outputFile ? process.stdout : process.stderr; const log = notify; log('Write words'); log(`Sort: ${yesNo(sort)}`); log(`Unique: ${yesNo(unique)}`); const baseFile = hunspellDicFilename.replace(/\.(dic|aff)$/, ''); const dicFile = baseFile + '.dic'; const affFile = baseFile + '.aff'; log(`Dic file: ${dicFile}`); log(`Aff file: ${affFile}`); log(`Generating Words...`); const reader = await IterableHunspellReader.createFromFiles(affFile, dicFile); const transformers: ((_: AffWord) => AffWord)[] = []; if (infix) { transformers.push(affWordToInfix); } if (lowerCase) { transformers.push(mapWord(a => a.toLowerCase())); } if (rules) { transformers.push(appendRules); } transformers.push(mapWord(a => a.trim())); const dicSize = reader.dic.length; let current = 0; const calcProgress = () => '\r' + current + ' / ' + dicSize; const reportProgressRate = 253; const callback = showProgress ? () => { current++; !(current % reportProgressRate) && process.stderr.write(calcProgress(), 'UTF-8'); } : () => {}; const seqWords = transform ? reader.seqAffWords(callback) : reader.seqRootWords().map(asAffWord); const filterUnique = unique ? uniqueFilter(uniqueHistorySize, (aff: AffWord) => aff.word) : (_: AffWord) => true; const applyTransformers = (aff: AffWord) => transformers.reduce((aff, fn) => fn(aff), aff); const words = seqWords .map(applyTransformers) .filter(filterUnique) .filter(a => !!a.word) .map(a => a.word + '\n') ; if (sort) { log('Sorting...'); const data = words.toArray().sort().join(''); const fd = outputFile ? fs.openSync(outputFile, 'w') : 1; fs.writeSync(fd, data); } else { await writeSeqToFile(words, outputFile); } if (showProgress) { console.error(calcProgress()); } log('Done.'); }