Advertisement
Guest User

Подстветка кода МК-61 на JS

a guest
Apr 29th, 2021
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (() => {
  2.     const Мнемоники_команд = [
  3.         [   0x15,
  4.             ["10^x", "10x", "F10^x", "F10x"],
  5.             0, 3, 2, [2, 3]
  6.         ],
  7.         [   0x54,
  8.             ["НОП", "KНОП", "КНОП"],
  9.             0, 1, 1, [1, 2]
  10.         ],
  11.         [   0x16,
  12.             ["e^x", "ex", "Fe^x", "Fex"],
  13.             0, 3, 2, [2, 3]
  14.         ],
  15.         [   0x17,
  16.             ["lg", "Flg"],
  17.             0, 3, 1, [1]
  18.         ],
  19.         [   0x18,
  20.             ["ln", "Fln"],
  21.             0, 3, 1, [1]
  22.         ],
  23.         [   0x30,
  24.             ["ЧМ", "KЧМ", "КЧМ"],
  25.             0, 3, 1, [1, 2]
  26.         ],
  27.         [   0x19,
  28.             ["arcsin", "Farcsin"],
  29.             0, 3, 1, [1]
  30.         ],
  31.         [   0x31,
  32.             ["|x|", "K|x|", "К|x|"],
  33.             0, 3, 1, [1, 2]
  34.         ],
  35.         [   0x1A,
  36.             ["arccos", "Farccos"],
  37.             0, 3, 1, [1]
  38.         ],
  39.         [   0x32,
  40.             ["ЗН", "KЗН", "КЗН"],
  41.             0, 3, 1, [1, 2]
  42.         ],
  43.         [   0x1B,
  44.             ["arctg", "Farctg"],
  45.             0, 3, 1, [1]
  46.         ],
  47.         [   0x33,
  48.             ["ГМ", "KГМ", "КГМ"],
  49.             0, 3, 1, [1, 2]
  50.         ],
  51.         [   0x1C,
  52.             ["sin", "Fsin"],
  53.             0, 3, 1, [1]
  54.         ],
  55.         [   0x34,
  56.             ["[x]", "K[x]", "К[x]"],
  57.             0, 3, 1, [1, 2]
  58.         ],
  59.         [   0x1D,
  60.             ["cos", "Fcos"],
  61.             0, 3, 1, [1]
  62.         ],
  63.         [   0x35,
  64.             ["{x}", "(x)", "K{x}", "К{x}", "K(x)", "К(x)"],
  65.             0, 3, 2, [2, 3, 4, 5]
  66.         ],
  67.         [   0x1E,
  68.             ["tg", "Ftg"],
  69.             0, 3, 1, [1]
  70.         ],
  71.         [   0x36,
  72.             ["max", "Kmax", "Кmax"],
  73.             0, 3, 1, [1, 2]
  74.         ],
  75.         [   0x10,
  76.             ["+"],
  77.             0, 3, 0, []
  78.         ],
  79.         [   0x11,
  80.             ["-", "–"],
  81.             0, 3, 0, []
  82.         ],
  83.         [   0x12,
  84.             ["*", "x", "х", "×", "⋅"],
  85.             0, 3, 1, []
  86.         ],
  87.         [   0x13,
  88.             ["/", ":", "÷"],
  89.             0, 3, 1, []
  90.         ],
  91.         [   0x20,
  92.             ["пи", "π", "Fпи", "Fπ"],
  93.             0, 0, 2, [2, 3]
  94.         ],
  95.         [   0x26,
  96.             ["МГ", "KМГ", "КМГ"],
  97.             0, 3, 1, [1, 2]
  98.         ],
  99.         [   0x21,
  100.             ["КвКор", "квкор", "корень", "√", "FКвКор", "Fквкор", "Fкорень", "F√"],
  101.             0, 3, 4, [4, 5, 6, 7]
  102.         ],
  103.         [   0x22,
  104.             ["x^2", "x2", "x²", "Fx^2", "Fx2", "Fx²"],
  105.             0, 3, 3, [3, 4, 5]
  106.         ],
  107.         [   0x23,
  108.             ["1/x", "F1/x"],
  109.             0, 3, 1, [1]
  110.         ],
  111.         [   0x14,
  112.             ["<->", "XY", "↔", "X↔Y"],
  113.             0, 1, 0, []
  114.         ],
  115.         [   0x0E,
  116.             ["^", "В^", "↑", "В↑"],
  117.             0, 1, 1, []
  118.         ],
  119.         [   0x24,
  120.             ["x^y", "xy", "Fx^y", "Fxy"],
  121.             0, 3, 2, [2, 3]
  122.         ],
  123.         [   0x27,
  124.             ["K-", "К-"],
  125.             0, 0, 0, []
  126.         ],
  127.         [   0x28,
  128.             ["Kx", "Кх", "K*", "К*"],
  129.             0, 0, 0, []
  130.         ],
  131.         [   0x29,
  132.             ["K/", "К/", "K:", "К:", "K÷", "К÷"],
  133.             0, 0, 2, []
  134.         ],
  135.         [   0x2A,
  136.             ["МЧ", "KМЧ", "КМЧ"],
  137.             0, 3, 1, [1, 2]
  138.         ],
  139.         [   0x0F,
  140.             ["Вx", "FВx"],
  141.             0, 1, 1, [1]
  142.         ],
  143.         [   0x3B,
  144.             ["СЧ", "KСЧ", "КСЧ"],
  145.             0, 0, 1, [1, 2]
  146.         ],
  147.         [   0x0A,
  148.             [",", "."],
  149.             0, 0, 0, []
  150.         ],
  151.         [   0x0B,
  152.             ["/-/", "+/-"],
  153.             0, 0, 0, []
  154.         ],
  155.         [   0x0C,
  156.             ["ВП"],
  157.             0, 0, 0, []
  158.         ],
  159.         [   0x0D,
  160.             ["Сx"],
  161.             0, 1, 0, []
  162.         ],
  163.         [   0x25,
  164.             ["->", "↻", "→", "F->", "F↻", "F→"],
  165.             0, 1, 3, [3, 4, 5]
  166.         ],
  167.         [   0x37,
  168.             ["/\\", "⋀", "K/\\", "К/\\", "K⋀", "К⋀"],
  169.             0, 3, 2, [2, 3, 4, 5]
  170.         ],
  171.         [   0x38,
  172.             ["\\/", "⋁", "K\\/", \\/", "K⋁", "К⋁"],
  173.             0, 3, 2, [2, 3, 4, 5]
  174.         ],
  175.         [   0x39,
  176.             ["(+)", "⊕", "K(+)", "К(+)", "K⊕", "К⊕"],
  177.             0, 3, 2, [2, 3, 4, 5]
  178.         ],
  179.         [   0x3A,
  180.             ["ИНВ", "KИНВ", "КИНВ"],
  181.             0, 3, 1, [1, 2]
  182.         ],
  183.         [   0x52,
  184.             ["В/О", "В/0"],
  185.             0, 4, 0, []
  186.         ],
  187.         [   0x50,
  188.             ["С/П"],
  189.             0, 4, 0, []
  190.         ],
  191.         [   0x59,
  192.             ["x>=0", "x≥0", "x≥0", "x⩾0", "Fx>=0", "Fx≥0", "Fx≥0", "Fx⩾0"],
  193.             2, 4, 4, [4, 5, 6, 7]
  194.         ],
  195.         [   0x57,
  196.             ["x#0", "x!=0", "x<>0", "x≠0", "Fx#0", "Fx!=0", "Fx<>0", "Fx≠0"],
  197.             2, 4, 4, [4, 5, 6, 7]
  198.         ],
  199.         [   0x51,
  200.             ["БП"],
  201.             2, 4, 0, []
  202.         ],
  203.         [   0x53,
  204.             ["ПП"],
  205.             2, 4, 0, []
  206.         ],
  207.         [   0x58,
  208.             ["L2", "FL2"],
  209.             2, 4, 1, [1]
  210.         ],
  211.         [   0x5A,
  212.             ["L3", "FL3"],
  213.             2, 4, 1, [1]
  214.         ],
  215.         [   0x5C,
  216.             ["x<0", "Fx<0"],
  217.             2, 4, 1, [1]
  218.         ],
  219.         [   0x5E,
  220.             ["x=0", "Fx=0"],
  221.             2, 4, 1, [1]
  222.         ],
  223.         [   0x5D,
  224.             ["L0", "FL0"],
  225.             2, 4, 1, [1]
  226.         ],
  227.         [   0x5B,
  228.             ["L1", "FL1"],
  229.             2, 4, 1, [1]
  230.         ],
  231.         [   0x40,
  232.             ["П", "XП"],
  233.             1, 2, 0, []
  234.         ],
  235.         [   0x60,
  236.             ["ИП", "ПX", "Пx"],
  237.             1, 2, 0, []
  238.         ],
  239.         [   0x70,
  240.             ["Kx#0", "Кx#0", "Kx!=0", "Кx!=0", "Kx<>0", "Кx<>0", "Kx≠0", "Кx≠0",],
  241.             1, 4, 0, []
  242.         ],
  243.         [   0x80,
  244.             ["KБП", "КБП"],
  245.             1, 4, 0, []
  246.         ],
  247.         [   0x90,
  248.             ["Kx>=0", "Кx>=0", "Kx≥0", "Кx≥0", "Kx⩾0", "Кx⩾0"],
  249.             1, 4, 0, []
  250.         ],
  251.         [   0xA0,
  252.             ["KПП", "КПП"],
  253.             1, 4, 0, []
  254.         ],
  255.         [   0xB0,
  256.             ["KП", "КП", "KXП", "КXП"],
  257.             1, 2, 0, []
  258.         ],
  259.         [   0xC0,
  260.             ["Kx<0", "Кx<0"],
  261.             1, 4, 0, []
  262.         ],
  263.         [   0xD0,
  264.             ["KИП", "КИП", "KПX", "КПX"],
  265.             1, 2, 0, []
  266.         ],
  267.         [   0xE0,
  268.             ["Kx=0", "Кx=0"],
  269.             1, 4, 0, []
  270.         ]
  271.     ],
  272.     Подсветка = {
  273.         номер: "font-size: 75%; color: #A0A0A0;",
  274.         адрес: "text-decoration: underline; color: #A000A0;",
  275.         команды: ["color: #000000;", "color: #A0A000;", "color: #00A000;", "color: #A00000;", "color: #0000A0;"],
  276.         префикс: "font-weight: lighter; font-size: 90%; color: #404040;"
  277.     };
  278.  
  279.     function Подсветить_блок(блок) {
  280.         const
  281.             код = блок.innerHTML.split(/\s+/).filter(команда => команда.length > 0);
  282.         let
  283.             подсв_код = "",
  284.             с_адресом = код[0].length == 2 && !/[^[0-9A\.]/.test(код[0]),
  285.             найдено, номер_в_списке;
  286.         for (let i = 0; i < код.length; i++) {
  287.             if (i > 0)
  288.                 подсв_код += i % 10 == 0 ? "\r\n" :"\t";
  289.             if (код[i].length > 3 && код[i][2] == ".") {
  290.                 подсв_код += "<span style='" + Подсветка.номер + "'>" + код[i].slice(0, 3) + "</span>";
  291.                 код[i] = код[i].slice(3);
  292.             }
  293.             if (с_адресом) {
  294.                 подсв_код += "<span style='" + Подсветка.адрес + "'>" + код[i] + "</span>";
  295.                 с_адресом = false;
  296.             }
  297.             else {
  298.                 найдено = false;
  299.                 код[i] = код[i].replace(/&lt;/g, "<");
  300.                 код[i] = код[i].replace(/&gt;/g, ">");
  301.                 for (let j = 0; j < Мнемоники_команд.length; j++) {
  302.                     номер_в_списке = Мнемоники_команд[j][1].indexOf(код[i]);
  303.                     if (номер_в_списке != -1) {
  304.                         с_адресом = Мнемоники_команд[j][2] == 2;
  305.                         if (Мнемоники_команд[j][5].indexOf(номер_в_списке) != -1)
  306.                             подсв_код += "<span style='" + Подсветка.префикс + "'>" + код[i].slice(0, 1) + "</span><span style='" + Подсветка.команды[Мнемоники_команд[j][3]] + "'>" + код[i].slice(1) + "</span>";
  307.                         else
  308.                             подсв_код += "<span style='" + Подсветка.команды[Мнемоники_команд[j][3]] + "'>" + код[i] + "</span>";
  309.                         найдено = true;
  310.                         break;
  311.                     }
  312.                 }
  313.                 if (!найдено)
  314.                     for (let j = 0; j < Мнемоники_команд.length; j++) {
  315.                         if (Мнемоники_команд[j][2] != 1)
  316.                             continue;
  317.                         номер_в_списке = Мнемоники_команд[j][1].indexOf(код[i].slice(0, код[i].length - 1));
  318.                         if (номер_в_списке != -1) {
  319.                             с_адресом = Мнемоники_команд[j][2] == 2;
  320.                             if (Мнемоники_команд[j][5].indexOf(номер_в_списке) != -1)
  321.                                 подсв_код += "<span style='" + Подсветка.префикс + "'>" + код[i].slice(0, 1) + "</span><span style='" + Подсветка.команды[Мнемоники_команд[j][3]] + "'>" + код[i].slice(1) + "</span>";
  322.                             else
  323.                                 подсв_код += "<span style='" + Подсветка.команды[Мнемоники_команд[j][3]] + "'>" + код[i] + "</span>";
  324.                             найдено = true;
  325.                             break;
  326.                         }
  327.                     }
  328.                 if (!найдено)
  329.                     подсв_код += "<span style='" + Подсветка.команды[0] + "'>" + код[i] + "</span>";
  330.             }
  331.         }
  332.         блок.innerHTML = "<pre>" + подсв_код + "</pre>";
  333.     }
  334.  
  335.     document.addEventListener("DOMContentLoaded", () => {
  336.         [...document.getElementsByClassName("Код_ПМК")].forEach(
  337.             блок => Подсветить_блок(блок)
  338.         );
  339.     });
  340. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement