Skip to content

Commit

Permalink
Check of markdown, readme, rich customization (webdoky#14)
Browse files Browse the repository at this point in the history
Co-authored-by: Vitalii Perehonchuk <[email protected]>
Actually done by Vitalii Perehonchuk
  • Loading branch information
undead404 authored Aug 14, 2021
1 parent e73fbf8 commit a93b9c3
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 20 deletions.
4 changes: 3 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ FROM erikvl87/languagetool
# Improving the spell checker
# http://wiki.languagetool.org/hunspell-support
USER root
COPY uk_spelling_additions.txt uk_spelling_additions.txt
COPY uk_*_additions.txt .
RUN (echo; cat uk_spelling_additions.txt) >> org/languagetool/resource/uk/hunspell/spelling.txt
RUN (echo; cat uk_ignore_additions.txt) >> org/languagetool/resource/uk/hunspell/ignore.txt
RUN (echo; cat uk_prohibited_additions.txt) >> org/languagetool/resource/uk/hunspell/prohibited.txt
USER languagetool
40 changes: 39 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,39 @@
//TODO
# WebDoky - контент

## LanguageTool перевірка

У репозиторій вбудована перевірка тексту (в форматі HTML або Markdown) в репозиторії за допомогою докеризованого LanguageTool. Наразі працює лише на Unix-подібних ОС [https://github.com/webdoky/content/issues/12]

### Передумови
1. [Docker](https://www.docker.com/)
2. [Node.js](https://nodejs.org/uk/) >= 14
3. [Yarn](https://yarnpkg.com/)

### Налаштування
Команда `yarn` у директорії проєкту встановить JavaScript-залежності та підготує Docker-образ.

### Використання
Запуск команди `yarn run check` у директорії проєкту:
1. Запустить Docker-контейнер із LanguageTool.
2. Дочекається доступності LanguageTool.
3. Перевірить наявні файли перекладу у форматах HTML та Markdown.
4. Виведе результати перевірки у консоль.
5. Зупинить Docker-контейнер із LanguageTool.
6. Завершиться із кодом виходу 0 у випадку успіху, інакше - 1.

Також команда приймає шлях до певного файлу у вигляді аргументу командного рядка. Наприклад:
```
yarn run check README.md
```

### Винятки
Щоб додати слово незнайоме LanguageTool, але котре LanguageTool мусить використовувати для створення пропозицій виправлень - додайте його окремим рядком у файл `uk_spelling_additions.txt`.

Щоб додати слово незнайоме LanguageTool, котре слід просто ігнорувати - додайте його окремим рядком у файл `uk_ignore_additions.txt` (у більшості випадків слід віддавати перевагу `uk_spelling_additions.txt`).

Щоб заборонити слово, котре LanguageTool обробляє як нормативне - додайте його окремим рядком у файл `uk_prohibited_additions.txt`.

Щоб зміни у вищеназваних текстових файлах почали діяти, слід запустити команду `yarn rebuild`.

### Вимкнення правила
Щоб вимкнути певне правило LanguageTool - додайте його окремим рядком у файл `disabled_rules.txt`. Така зміна не вимагає повторного збирання Docker-образу.
2 changes: 2 additions & 0 deletions disabled_rules.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
UK_SIMPLE_REPLACE_SOFT
WHITESPACE_RULE
10 changes: 5 additions & 5 deletions files/uk/web/javascript/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ title: JavaScript
slug: Web/JavaScript
tags:
- JavaScript
- Лендінг
- Landing
- Вчити
- l10n:priority
translation_of: Web/JavaScript
Expand Down Expand Up @@ -52,7 +52,7 @@ translation_of: Web/JavaScript
### Середній рівень

- [Розуміння клієнтських фреймворків JavaScript](/en-US/docs/Learn/Tools_and_testing/Client-side_JavaScript_frameworks)
- : JavaScript фреймворки &mdash; неодмінна частина сучасної клієнтської веброзробки, що забезпечує розробників перевіреними інструментами для побудови масштабованих інтерактивних вебзастосунків. Цей модуль надає деякі фундаментальні знання про те, як влаштовані клієнські фреймворки, і як вони вписуються в ваш інструментарій, перед тим як розглянути найбільш популярні із них на сьогодні у наступних посібниках.
- : JavaScript фреймворки &mdash; неодмінна частина сучасної клієнтської веброзробки, що забезпечує розробників перевіреними інструментами для побудови масштабованих інтерактивних вебзастосунків. Цей модуль надає деякі фундаментальні знання про те, як влаштовані клієнтські фреймворки, і як вони вписуються в ваш інструментарій, перед тим як розглянути найбільш популярні із них на сьогодні у наступних посібниках.
- [Повторний вступ у JavaScript](/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)
- : Загальний огляд, націлений на тих, хто _вважає_, що знає JavaScript.
- [Структури даних у JavaScript](/en-US/docs/Web/JavaScript/Data_structures)
Expand Down Expand Up @@ -99,18 +99,18 @@ translation_of: Web/JavaScript
- [Learn JavaScript](https://learnjavascript.online/)
- : Прекрасний ресурс для веброзробників, що прагнуть навчатися. Вивчайте JavaScript в інтерактивному середовищі, з короткими лекціями та інтерактивними тестами, які дають оцінку в автоматичному режимі. Перші 40 уроків безкоштовні, а повний курс доступний за невелику одноразову плату.
- [TogetherJS](https://togetherjs.com/)
- : Проста взаємодомопога. Після додавання TogetherJS до сайту, його користувачі зможуть допомагати один одному на вебсайті у реальному часі!
- : Проста взаємодопомога. Після додавання TogetherJS до сайту, його користувачі зможуть допомагати один одному на вебсайті у реальному часі!
- [Stack Overflow](https://stackoverflow.com/questions/tagged/javascript)
- : Запитання на Stack Overflow з міткою "JavaScript".
- [JSFiddle](https://jsfiddle.net/)
- : Редагуйте JavaScript, CSS, HTML та одразу переглядайте результати. Залучайте зовнішні ресурси та співпрацюйте зі своєю командою онлайн.
- [Plunker](https://plnkr.co/)
- : Plunker &mdash; це онлайн-спільнота для створення, співпраці, та обміну вашими ідеями для веброзробки. Редагуйте ваші JavaScript-, CSS- і HTML-файли, та одразу переглядайте результати і файлову структуру.
- : Plunker &mdash; це онлайн-спільнота для створення, співпраці, та обміну вашими ідеями для веброзробки. Редагуйте ваші JavaScript-, CSS- і HTML-файли, та одразу переглядайте результати та файлову структуру.
- [JSBin](https://jsbin.com/)
- : JS Bin &mdash; це інструмент з відкритим кодом для спільного зневадження для веброзробки.
- [Codepen](https://codepen.io/)
- : Codepen &mdash; це інший інструмент для колаборативної веброзробки, що використовується як майданчик для розміщення коду, і перегляду результатів його роботи в реальному часі.
- [StackBlitz](https://stackblitz.com/)
- : StackBlitz &mdash; це іще один онлайн-майданчик та інструмент зневадження, який може розміщувати та розгортати повностекові застосунки із використанням React, Angular, тощо.
- : StackBlitz &mdash; це іще один онлайн-майданчик та інструмент зневадження, який може розміщувати та розгортати повностекові застосунки із використанням React, Angular тощо.
- [RunJS](https://runjs.app/)
- : RunJS &mdash; це комп'ютерна версія ігрового майданчика/чернетки для роботи з JavaScript, яка надає можливість виконувати код, із доступом до API браузера та Node.
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
"axios": "0.21.1",
"chalk": "~4.1.2",
"glob": "~7.1.7",
"html-to-text": "~8.0.0"
"html-to-text": "~8.0.0",
"markdown-it": "~12.2.0"
},
"engines": {
"node": ">= 14"
Expand All @@ -14,7 +15,8 @@
"repository": "https://github.com/webdoky/content",
"scripts": {
"check": "node scripts/check.js",
"postinstall": "docker build . -t lt-custom"
"postinstall": "docker build . -t lt-custom",
"rebuild": "docker build . --no-cache -t lt-custom"
},
"type": "module",
"version": "1.0.0"
Expand Down
2 changes: 1 addition & 1 deletion scripts/check-all.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import checkFile from "./utils/check-file.js";

async function getAllFiles() {
return new Promise((resolve, reject) => {
glob("files/uk/**/*.html", { nodir: true }, (err, filePaths) => {
glob("files/uk/**/*.@(html|md)", { nodir: true }, (err, filePaths) => {
console.debug(filePaths);
if (err) {
reject(err);
Expand Down
27 changes: 25 additions & 2 deletions scripts/utils/check-file.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,37 @@
import fs from "fs";

import { convert } from "html-to-text";
import MarkdownIt from "markdown-it";

import { checkText } from "./language-tool.js";
import printCorrection from "./print-correction.js";

const markdownIt = new MarkdownIt({
// breaks: true,
});

function convertHtmlToText(html) {
return convert(html, { ignoreHref: true });
}

function convertMarkdownToHtml(markdown) {
return markdownIt.render(markdown);
}

function getText(filePath) {
const content = fs.readFileSync(filePath, "utf8");
if(filePath.endsWith('.html')) {
return convertHtmlToText(content);
}
if(filePath.endsWith('.md')) {
const html = convertMarkdownToHtml(content);
return convertHtmlToText(html);
}
}

export default async function checkFile(filePath) {
console.debug(`checkFile(${filePath})`);
const html = fs.readFileSync(filePath, "utf8");
const text = convert(html, { ignoreHref: true });
const text = getText(filePath);
// console.debug(text);
const corrections = await checkText(text);
if(!corrections || corrections.length === 0) {
Expand Down
7 changes: 7 additions & 0 deletions scripts/utils/disabled-rules.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import fs from "fs";

const disabledRules = fs
.readFileSync("disabled_rules.txt", { encoding: "utf8", flag: "r" })
.split("\n");

export default disabledRules;
3 changes: 2 additions & 1 deletion scripts/utils/language-tool.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import axios from "axios";
import disabledRules from "./disabled-rules.js";
import execute from "./execute.js";
import sleep from "./sleep.js";

Expand Down Expand Up @@ -36,7 +37,7 @@ function requestLanguageTool(data) {
const params = new URLSearchParams();
Object.entries(data).forEach(([key, value]) => params.append(key, value));
// Disables check for unrecommended words
params.append("disabledRules", "UK_SIMPLE_REPLACE_SOFT");
params.append("disabledRules", disabledRules.join(','));
return axios.post("http://localhost:8010/v2/check", params, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Expand Down
22 changes: 16 additions & 6 deletions scripts/utils/print-correction.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,29 @@ export default function printCorrection(correction) {
const contextEnd = correction.context.text.slice(
correction.context.offset + correction.context.length
);
console.info(`${contextStart}${chalk.yellow(contextEssence)}${contextEnd}`);
console.info(
correction.context.text.slice(
correction.context.offset,
correction.context.offset + correction.context.length
)
`${contextStart}${chalk.bgYellow.black(contextEssence)}${contextEnd}`
);
if (correction.replacements && correction.replacements.length > 0) {
console.info(
chalk.green(
`${chalk.red(
correction.context.text.slice(
correction.context.offset,
correction.context.offset + correction.context.length
)
)} -> ${chalk.green(
correction.replacements
.map((replacement) => `${replacement.value}?`)
.join(" ")
)}`
);
} else {
console.info(
chalk.red(
correction.context.text.slice(
correction.context.offset,
correction.context.offset + correction.context.length
)
)
);
}
Expand Down
Empty file added uk_ignore_additions.txt
Empty file.
Empty file added uk_prohibited_additions.txt
Empty file.
6 changes: 5 additions & 1 deletion uk_spelling_additions.txt
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
фронтенд
фронтенд
докеризованого
Unix-подібних
веб-API
повностекові
38 changes: 38 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ ansi-styles@^4.1.0:
dependencies:
color-convert "^2.0.1"

argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==

[email protected]:
version "0.21.1"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
Expand Down Expand Up @@ -112,6 +117,11 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55"
integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==

entities@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==

follow-redirects@^1.10.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43"
Expand Down Expand Up @@ -179,6 +189,29 @@ inherits@2:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==

linkify-it@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.2.tgz#f55eeb8bc1d3ae754049e124ab3bb56d97797fb8"
integrity sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==
dependencies:
uc.micro "^1.0.1"

markdown-it@~12.2.0:
version "12.2.0"
resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.2.0.tgz#091f720fd5db206f80de7a8d1f1a7035fd0d38db"
integrity sha512-Wjws+uCrVQRqOoJvze4HCqkKl1AsSh95iFAeQDwnyfxM09divCBSXlDR1uTvyUP3Grzpn4Ru8GeCxYPM8vkCQg==
dependencies:
argparse "^2.0.1"
entities "~2.1.0"
linkify-it "^3.0.1"
mdurl "^1.0.1"
uc.micro "^1.0.5"

mdurl@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=

minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
Expand Down Expand Up @@ -258,6 +291,11 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"

uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==

wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
Expand Down

0 comments on commit a93b9c3

Please sign in to comment.