Advertisement
Guest User

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

a guest
Jan 25th, 2018
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. var мнемоники_команд = [
  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. var подсв_ном = "font-size: 75%; color: #A0A0A0;";
  274. var подсв_адр = "text-decoration: underline; color: #A000A0;";
  275. var подсв = ["color: #000000;", "color: #A0A000;", "color: #00A000;", "color: #A00000;", "color: #0000A0;"];
  276. var подсв_преф = "font-weight: lighter; font-size: 90%; color: #404040;";
  277.  
  278. function Подсветить_блок_кода_МК_61(блок) {
  279.     var текст = блок.innerHTML;
  280.     текст = текст.split(/\s+/);
  281.     var код = [];
  282.     for (var сч = 0; сч < текст.length; сч++)
  283.         if (текст[сч].length > 0)
  284.             код.push(текст[сч]);
  285.     var подсвеченный_код = "";
  286.     var команда_с_адресом = (код[0].length == 2 && !/[^[0-9A\.]/.test(код[0]));
  287.     var найдено, номер_мнемоники;
  288.     for (var сч = 0; сч < код.length; сч++) {
  289.         if (сч > 0) {
  290.             if (сч % 10 == 0)
  291.                 подсвеченный_код += "\r\n";
  292.             else
  293.                 подсвеченный_код += "\t";
  294.         }
  295.         if (код[сч].length > 3 && код[сч][2] == ".") {
  296.             подсвеченный_код += "<span style='" + подсв_ном + "'>" + код[сч].slice(0, 3) + "</span>";
  297.             код[сч] = код[сч].slice(3);
  298.         }
  299.         if (команда_с_адресом) {
  300.             подсвеченный_код += "<span style='" + подсв_адр + "'>" + код[сч] + "</span>";
  301.             команда_с_адресом = false;
  302.         }
  303.         else {
  304.             найдено = false;
  305.             код[сч] = код[сч].replace(/&lt;/g, "<");
  306.             код[сч] = код[сч].replace(/&gt;/g, ">");
  307.             for (var сч_м = 0; сч_м < мнемоники_команд.length; сч_м++) {
  308.                 номер_мнемоники = мнемоники_команд[сч_м][1].indexOf(код[сч]);
  309.                 if (номер_мнемоники != -1) {
  310.                     команда_с_адресом = мнемоники_команд[сч_м][2] == 2;
  311.                     if (мнемоники_команд[сч_м][5].indexOf(номер_мнемоники) != -1)
  312.                         подсвеченный_код += "<span style='" + подсв_преф + "'>" + код[сч].slice(0, 1) + "</span><span style='" + подсв[мнемоники_команд[сч_м][3]] + "'>" + код[сч].slice(1) + "</span>";
  313.                     else
  314.                         подсвеченный_код += "<span style='" + подсв[мнемоники_команд[сч_м][3]] + "'>" + код[сч] + "</span>";
  315.                     найдено = true;
  316.                     break;
  317.                 }
  318.             }
  319.             if (!найдено)
  320.                 for (var сч_м = 0; сч_м < мнемоники_команд.length; сч_м++) {
  321.                     if (мнемоники_команд[сч_м][2] != 1)
  322.                         continue;
  323.                     номер_мнемоники = мнемоники_команд[сч_м][1].indexOf(код[сч].slice(0, код[сч].length - 1));
  324.                     if (номер_мнемоники != -1) {
  325.                         команда_с_адресом = мнемоники_команд[сч_м][2] == 2;
  326.                         if (мнемоники_команд[сч_м][5].indexOf(номер_мнемоники) != -1)
  327.                             подсвеченный_код += "<span style='" + подсв_преф + "'>" + код[сч].slice(0, 1) + "</span><span style='" + подсв[мнемоники_команд[сч_м][3]] + "'>" + код[сч].slice(1) + "</span>";
  328.                         else
  329.                             подсвеченный_код += "<span style='" + подсв[мнемоники_команд[сч_м][3]] + "'>" + код[сч] + "</span>";
  330.                         найдено = true;
  331.                         break;
  332.                     }
  333.                 }
  334.             if (!найдено)
  335.                 подсвеченный_код += "<span style='" + подсв[0] + "'>" + код[сч] + "</span>";
  336.         }
  337.     }
  338.  
  339.     блок.innerHTML = "<pre>" + подсвеченный_код + "</pre>";
  340. }
  341.  
  342. function Подсветить_код_МК_61() {
  343.     var блоки = document.getElementsByName("Код_МК-61");
  344.     for (var сч = 0; сч < блоки.length; сч++)
  345.         Подсветить_блок_кода_МК_61(блоки[сч]);
  346. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement