Skip to content

Commit

Permalink
Added KuMir (#2760)
Browse files Browse the repository at this point in the history
  • Loading branch information
edukisto committed Feb 13, 2021
1 parent 45b0e82 commit 3419fb7
Show file tree
Hide file tree
Showing 19 changed files with 447 additions and 3 deletions.
2 changes: 1 addition & 1 deletion components.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions components.json
Expand Up @@ -661,6 +661,11 @@
"require": "clike",
"owner": "Golmote"
},
"kumir": {
"title": "KuMir (КуМир)",
"alias": "kum",
"owner": "edukisto"
},
"latex": {
"title": "LaTeX",
"alias": ["tex", "context"],
Expand Down
102 changes: 102 additions & 0 deletions components/prism-kumir.js
@@ -0,0 +1,102 @@
(function (Prism) {

/**
* Regular expression for characters that are not allowed in identifiers.
* @type {String}
*/
var nonId = /\s\x00-\x1f\x22-\x2f\x3a-\x3f\x5b-\x5e\x60\x7b-\x7e/.source;

/**
* Surround a regular expression for IDs with patterns for non-ID sequences.
* @param {String} pattern A regular expression for identifiers.
* @param {String} [flags] The regular expression flags.
* @returns {RegExp} A wrapped regular expression for identifiers.
*/
function wrapId(pattern, flags) {
return RegExp(pattern.replace(/<nonId>/g, nonId), flags);
}

Prism.languages.kumir = {
'comment': {
pattern: /\|.*/
},

'prolog': {
pattern: /#.*/,
greedy: true
},

'string': {
pattern: /"[^\n\r"]*"|'[^\n\r']*'/,
greedy: true
},

'boolean': {
pattern: wrapId(/(^|[<nonId>])(?:да|нет)(?=[<nonId>]|$)/.source),
lookbehind: true
},

'operator-word': {
pattern: wrapId(/(^|[<nonId>])(?:и|или|не)(?=[<nonId>]|$)/.source),
lookbehind: true,
alias: 'keyword'
},

'system-variable': {
pattern: wrapId(/(^|[<nonId>])знач(?=[<nonId>]|$)/.source),
lookbehind: true,
alias: 'keyword'
},

'type': [
{
pattern: wrapId(/(^|[<nonId>])(?:вещ|лит|лог|сим|цел)(?:\x20*таб)?(?=[<nonId>]|$)/.source),
lookbehind: true,
alias: 'builtin'
},
{
pattern: wrapId(/(^|[<nonId>])(?:компл|сканкод|файл|цвет)(?=[<nonId>]|$)/.source),
lookbehind: true,
alias: 'important'
}
],

/**
* Should be performed after searching for type names because of "таб".
* "таб" is a reserved word, but never used without a preceding type name.
* "НАЗНАЧИТЬ", "Фввод", and "Фвывод" are not reserved words.
*/
'keyword': {
pattern: wrapId(/(^|[<nonId>])(?:алг|арг(?:\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\x20+|_)исп)?|кц(?:(?:\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[<nonId>]|$)/.source),
lookbehind: true
},

/** Should be performed after searching for reserved words. */
'name': {
pattern: wrapId(/(^|[<nonId>])[^\d<nonId>][^<nonId>]*(?:\x20+[^<nonId>]+)*(?=[<nonId>]|$)/.source),
lookbehind: true
},

/** Should be performed after searching for names. */
'number': {
pattern: wrapId(/(^|[<nonId>])(?:\B\$[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?=[<nonId>]|$)/.source, 'i'),
lookbehind: true
},

/** Should be performed after searching for words. */
'punctuation': /:=|[(),:;\[\]]/,

/**
* Should be performed after searching for
* - numeric constants (because of "+" and "-");
* - punctuation marks (because of ":=" and "=").
*/
'operator-char': {
pattern: /\*\*?|<[=>]?|>=?|[-+/=]/,
alias: 'operator'
}
};

Prism.languages.kum = Prism.languages.kumir;

}(Prism));
1 change: 1 addition & 0 deletions components/prism-kumir.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

61 changes: 61 additions & 0 deletions examples/prism-kumir.html
@@ -0,0 +1,61 @@
<h2>Example</h2>

<pre><code>алг
нач
| Решение квадратного уравнения.
вещ a, b, c
вещ таб корни[1:2]
цел индекс, число корней
вывод "Укажите первый коэффициент: "
ввод a
вывод нс, "Укажите второй коэффициент: "
ввод b
вывод нс, "Укажите свободный член: "
ввод c
решить квур(a, b, c, число корней, корни)
если число корней = -1
то
вывод нс, "Первый коэффициент не может быть равен нулю.", нс
иначе
если число корней = 0
то
вывод нс, "Уравнение не имеет корней.", нс
иначе
если число корней = 1
то
вывод нс, "Уравнение имеет один корень.", нс
вывод "x = ", корни[1], нс
иначе
вывод нс, "Уравнение имеет два корня.", нс
нц для индекс от 1 до число корней шаг 1
вывод "x", индекс, " = ", корни[индекс], нс
кц
все
все
все
кон

алг решить квур(арг вещ a, b, c, арг рез цел число корней, арг рез вещ таб корни[1:2])
нач
вещ дискриминант
если a = 0
то
число корней := -1
иначе
дискриминант := b**2 - 4 * a * c
если дискриминант > 0
то
корни[1] := (-b - sqrt(дискриминант)) / (2 * a)
корни[2] := (-b + sqrt(дискриминант)) / (2 * a)
число корней := 2
иначе
если дискриминант = 0
то
корни[1] := -b / (2 * a)
число корней := 1
иначе
число корней := 0
все
все
все
кон</code></pre>
1 change: 1 addition & 0 deletions plugins/autoloader/prism-autoloader.js
Expand Up @@ -190,6 +190,7 @@
"webmanifest": "json",
"kt": "kotlin",
"kts": "kotlin",
"kum": "kumir",
"tex": "latex",
"context": "latex",
"ly": "lilypond",
Expand Down
2 changes: 1 addition & 1 deletion plugins/autoloader/prism-autoloader.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions plugins/show-language/prism-show-language.js
Expand Up @@ -106,6 +106,8 @@
"js-templates": "JS Templates",
"kts": "Kotlin Script",
"kt": "Kotlin",
"kumir": "KuMir (КуМир)",
"kum": "KuMir (КуМир)",
"latex": "LaTeX",
"tex": "TeX",
"context": "ConTeXt",
Expand Down

0 comments on commit 3419fb7

Please sign in to comment.