Skip to content

Commit 3419fb7

Browse files
authored
Added KuMir (#2760)
1 parent 45b0e82 commit 3419fb7

19 files changed

+447
-3
lines changed

components.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components.json

+5
Original file line numberDiff line numberDiff line change
@@ -661,6 +661,11 @@
661661
"require": "clike",
662662
"owner": "Golmote"
663663
},
664+
"kumir": {
665+
"title": "KuMir (КуМир)",
666+
"alias": "kum",
667+
"owner": "edukisto"
668+
},
664669
"latex": {
665670
"title": "LaTeX",
666671
"alias": ["tex", "context"],

components/prism-kumir.js

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
(function (Prism) {
2+
3+
/**
4+
* Regular expression for characters that are not allowed in identifiers.
5+
* @type {String}
6+
*/
7+
var nonId = /\s\x00-\x1f\x22-\x2f\x3a-\x3f\x5b-\x5e\x60\x7b-\x7e/.source;
8+
9+
/**
10+
* Surround a regular expression for IDs with patterns for non-ID sequences.
11+
* @param {String} pattern A regular expression for identifiers.
12+
* @param {String} [flags] The regular expression flags.
13+
* @returns {RegExp} A wrapped regular expression for identifiers.
14+
*/
15+
function wrapId(pattern, flags) {
16+
return RegExp(pattern.replace(/<nonId>/g, nonId), flags);
17+
}
18+
19+
Prism.languages.kumir = {
20+
'comment': {
21+
pattern: /\|.*/
22+
},
23+
24+
'prolog': {
25+
pattern: /#.*/,
26+
greedy: true
27+
},
28+
29+
'string': {
30+
pattern: /"[^\n\r"]*"|'[^\n\r']*'/,
31+
greedy: true
32+
},
33+
34+
'boolean': {
35+
pattern: wrapId(/(^|[<nonId>])(?:да|нет)(?=[<nonId>]|$)/.source),
36+
lookbehind: true
37+
},
38+
39+
'operator-word': {
40+
pattern: wrapId(/(^|[<nonId>])(?:и|или|не)(?=[<nonId>]|$)/.source),
41+
lookbehind: true,
42+
alias: 'keyword'
43+
},
44+
45+
'system-variable': {
46+
pattern: wrapId(/(^|[<nonId>])знач(?=[<nonId>]|$)/.source),
47+
lookbehind: true,
48+
alias: 'keyword'
49+
},
50+
51+
'type': [
52+
{
53+
pattern: wrapId(/(^|[<nonId>])(?:вещ|лит|лог|сим|цел)(?:\x20*таб)?(?=[<nonId>]|$)/.source),
54+
lookbehind: true,
55+
alias: 'builtin'
56+
},
57+
{
58+
pattern: wrapId(/(^|[<nonId>])(?:компл|сканкод|файл|цвет)(?=[<nonId>]|$)/.source),
59+
lookbehind: true,
60+
alias: 'important'
61+
}
62+
],
63+
64+
/**
65+
* Should be performed after searching for type names because of "таб".
66+
* "таб" is a reserved word, but never used without a preceding type name.
67+
* "НАЗНАЧИТЬ", "Фввод", and "Фвывод" are not reserved words.
68+
*/
69+
'keyword': {
70+
pattern: wrapId(/(^|[<nonId>])(?:алг|арг(?:\x20*рез)?|ввод|ВКЛЮЧИТЬ|вс[её]|выбор|вывод|выход|дано|для|до|дс|если|иначе|исп|использовать|кон(?:(?:\x20+|_)исп)?|кц(?:(?:\x20+|_)при)?|надо|нач|нс|нц|от|пауза|пока|при|раза?|рез|стоп|таб|то|утв|шаг)(?=[<nonId>]|$)/.source),
71+
lookbehind: true
72+
},
73+
74+
/** Should be performed after searching for reserved words. */
75+
'name': {
76+
pattern: wrapId(/(^|[<nonId>])[^\d<nonId>][^<nonId>]*(?:\x20+[^<nonId>]+)*(?=[<nonId>]|$)/.source),
77+
lookbehind: true
78+
},
79+
80+
/** Should be performed after searching for names. */
81+
'number': {
82+
pattern: wrapId(/(^|[<nonId>])(?:\B\$[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)(?=[<nonId>]|$)/.source, 'i'),
83+
lookbehind: true
84+
},
85+
86+
/** Should be performed after searching for words. */
87+
'punctuation': /:=|[(),:;\[\]]/,
88+
89+
/**
90+
* Should be performed after searching for
91+
* - numeric constants (because of "+" and "-");
92+
* - punctuation marks (because of ":=" and "=").
93+
*/
94+
'operator-char': {
95+
pattern: /\*\*?|<[=>]?|>=?|[-+/=]/,
96+
alias: 'operator'
97+
}
98+
};
99+
100+
Prism.languages.kum = Prism.languages.kumir;
101+
102+
}(Prism));

components/prism-kumir.min.js

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/prism-kumir.html

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<h2>Example</h2>
2+
3+
<pre><code>алг
4+
нач
5+
| Решение квадратного уравнения.
6+
вещ a, b, c
7+
вещ таб корни[1:2]
8+
цел индекс, число корней
9+
вывод "Укажите первый коэффициент: "
10+
ввод a
11+
вывод нс, "Укажите второй коэффициент: "
12+
ввод b
13+
вывод нс, "Укажите свободный член: "
14+
ввод c
15+
решить квур(a, b, c, число корней, корни)
16+
если число корней = -1
17+
то
18+
вывод нс, "Первый коэффициент не может быть равен нулю.", нс
19+
иначе
20+
если число корней = 0
21+
то
22+
вывод нс, "Уравнение не имеет корней.", нс
23+
иначе
24+
если число корней = 1
25+
то
26+
вывод нс, "Уравнение имеет один корень.", нс
27+
вывод "x = ", корни[1], нс
28+
иначе
29+
вывод нс, "Уравнение имеет два корня.", нс
30+
нц для индекс от 1 до число корней шаг 1
31+
вывод "x", индекс, " = ", корни[индекс], нс
32+
кц
33+
все
34+
все
35+
все
36+
кон
37+
38+
алг решить квур(арг вещ a, b, c, арг рез цел число корней, арг рез вещ таб корни[1:2])
39+
нач
40+
вещ дискриминант
41+
если a = 0
42+
то
43+
число корней := -1
44+
иначе
45+
дискриминант := b**2 - 4 * a * c
46+
если дискриминант > 0
47+
то
48+
корни[1] := (-b - sqrt(дискриминант)) / (2 * a)
49+
корни[2] := (-b + sqrt(дискриминант)) / (2 * a)
50+
число корней := 2
51+
иначе
52+
если дискриминант = 0
53+
то
54+
корни[1] := -b / (2 * a)
55+
число корней := 1
56+
иначе
57+
число корней := 0
58+
все
59+
все
60+
все
61+
кон</code></pre>

plugins/autoloader/prism-autoloader.js

+1
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@
190190
"webmanifest": "json",
191191
"kt": "kotlin",
192192
"kts": "kotlin",
193+
"kum": "kumir",
193194
"tex": "latex",
194195
"context": "latex",
195196
"ly": "lilypond",

plugins/autoloader/prism-autoloader.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/show-language/prism-show-language.js

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@
106106
"js-templates": "JS Templates",
107107
"kts": "Kotlin Script",
108108
"kt": "Kotlin",
109+
"kumir": "KuMir (КуМир)",
110+
"kum": "KuMir (КуМир)",
109111
"latex": "LaTeX",
110112
"tex": "TeX",
111113
"context": "ConTeXt",

0 commit comments

Comments
 (0)