function Раскладка()
{
    this.версия = "";
    this.ширина = 0;
    this.высота = 0;
    this.глубина = 0;
    this.позиции = [];
    
    // Для внутреннего пользования.
    this.поля = [];
};
Раскладка.prototype.разобратьСлужебнуюИнформацию = function(содержимое)
{
    const ключи = {
        "версия": "kmahjongg-layout-v",
        "комментарий": "#",
        "ширина": "w",
        "высота": "h",
        "глубина": "d"
    };

    // ВНИМАНИЕ Версия 1.0 предполагает заданные заранее ширину и высоту.
    this.версия = "";
    this.глубина = 0;
    this.ширина = 32;
    this.высота = 16;
    this.поля = [];
    
    var поле = [];
    var строки = содержимое.split("\n");
    for (var номер in строки)
    {
        var строка = строки[номер].trim();
        
        // Пропуск.
        if (строка.startsWith(ключи.комментарий))
        {
            continue;
        }
        
        // Служебная информация.
        if (строка.startsWith(ключи.версия))
        {
            this.версия = строка.split(ключи.версия)[1];
        }
        else if (строка.startsWith(ключи.ширина))
        {
            this.ширина = строка.split(ключи.ширина)[1];
        }
        else if (строка.startsWith(ключи.высота))
        {
            this.высота = строка.split(ключи.высота)[1];
        }
        else if (строка.startsWith(ключи.глубина))
        {
            this.глубина = строка.split(ключи.глубина)[1];
        }
        // Поле.
        else
        {
            поле.push(строка);
            if (поле.length >= this.высота)
            {
                this.поля.push(поле.slice());
                поле = [];
            }
        }
    }
        
    if (this.глубина == 0)
    {
        this.глубина = this.поля.length;
    }
}
Раскладка.prototype.разобратьПозиции = function()
{
    this.позиции = [];
    for (var номер in this.поля)
    {
        var поле = this.поля[номер];
        for (var строка = 0; строка < this.высота - 1; ++строка)
        {
            for (var столбец = 0; столбец < this.ширина - 1; ++столбец)
            {
                if (
                    поле[строка][столбец] == "1" &&
                    поле[строка][столбец + 1] == "2" &&
                    поле[строка + 1][столбец] == "4" &&
                    поле[строка + 1][столбец + 1] == "3"
                ) {
                    this.позиции.push([номер, строка, столбец]);
                }
            }
        }
    }
}
Раскладка.prototype.разобрать = function(содержимое)
{
    this.разобратьСлужебнуюИнформацию(содержимое);
    this.разобратьПозиции();
}
Раскладка.prototype.отладка = function()
{
    var о = "";
    о += "Отладочная информация о раскладке:\n";
    о += " версия: '" + this.версия + "'\n";
    о += " ширина: '" + this.ширина + "'\n";
    о += " высота: '" + this.высота + "'\n";
    о += " глубина: '" + this.глубина + "'\n";
    о += " позиции:\n";
    for (var номер in this.позиции)
    {
        var п = this.позиции[номер];
        о += "  п(" + номер + "): '" + п[0] + ", " + п[1] + ", " + п[2] + "'\n";
    }
    return о;
}
