Модуль:Unicode/data/doc

Данный модуль возвращает данные о символах Юникода по их десятеричному или шестнадцатеричному представлению.

Использование

править
local unicodeData = require('Module:Unicode/data').getData

unicodeData(3807) -- работает с десятеричным вводом
unicodeData('0EDF') -- если используете шестнадцатеричный ввод, то в строке должно быть минимум 4 символа (`0EDF` вместо `EDF`).

В результате вы получите данные о символе в виде таблицы.

Генерация данных

править

Для генерации данных можете воспользоваться следующим JS-скриптом и данными из этой ссылки: https://www.unicode.org/Public/15.0.0/ucd/UnicodeData.txt:

const fs = require('fs');

const input = `
<здесь вставьте текст и ссылки выше>
`.trim();

function transformToLuaTable(text) {
    const lines = text.split('\n');
    const result = [];
    
    lines.forEach(line => {
        const parts = line.split(';');
        const key = parts[0];
        const luaTable = {};
        
        for (let i = 0; i < 13; i++) {
            luaTable[i + 1] = parts[i + 1] !== undefined && parts[i + 1] !== '' ? parts[i + 1] : null;
        }

        result.push({ key, luaTable });
    });

    return result;
}

function formatLuaTable(luaTable) {
    let result = '{\n';
    
    luaTable.forEach(entry => {
        result += `    ["${entry.key}"] = {\n`;
        const entries = entry.luaTable;
        for (const index in entries) {
            result += `        [${index}] = ${entries[index] === null ? 'nil' : `"${entries[index]}"`},\n`;
        }
        result += '    },\n';
    });

    result += '}';
    return result;
}

const luaTable = transformToLuaTable(input);
const formattedLuaTable = formatLuaTable(luaTable);

fs.writeFile('unicode_data.lua', formattedLuaTable, 'utf8', (err) => {
    if (err) {
        console.error('Error writing file:', err);
    } else {
        console.log('File has been saved as unicode_data.lua');
    }
});

Полученную таблицу нужно разделить на несколько частей и записать их в подстраницы данного модуля. Также не забудьте задать границы в функции getModuleIndex(). Например в Модуль:Unicode/data/1 последним символом является 0EDF, поэтому в функции прописано следующее:

if number <= tonumber('0x0EDF') then
		return 1

Это страница документации Модуль:Unicode/data.