Lao silly

Break Lao script into syllables

by hippietrail

HTML

<script src="http://xregexp.com/xregexp-all.js"></script>
<body>
    <div id="content">
        <fieldset id="LeftPanel">
            <div id="div_A" class="window top">
                <textarea id="input" class="code">ຕະເວັນອອກ
ຕາເວັນອອກ</textarea>
            </div>
            <button id="submit" onclick="someBit();">submit</button>
            <div id="output" class="window bottom">
                <!--<textarea id="output" class="code">B</textarea>-->
            </div>
        </fieldset>
    </div>
</body>

CSS

body {
    background: none repeat scroll 0 0 #EFEFEF;
    overflow: hidden;
    position: relative;
    margin: 0px;
    padding: 10px;
}
div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
    margin: 0;
    padding: 0;
}
#content {
    height:200px;
}
fieldset, textarea {
    border: 0 none;
}
#LeftPanel {
    width: 48%;
    float: left;
    height:100%;
}
.window {
    border: 1px solid #ADADAD;
    width: 100%;
    float: left;
}
.top {
    height: 47%;
}
.bottom {
    height: 75%;
}
.code {
    width:100%;
    height:100%;
}

JavaScript

'use strict';

// break Lao text into syllables

//var XRegExp = require('xregexp').XRegExp;

var stagger = 0;

//processText(' 169 A ໂດ້ ຂັອຍໂດ້ ຂັອຍບໍ່ໂດ້ ເຈົ້າໂດ້ບໍ່...  ປະມານ ທາງເທິງ ຢູ່ເທິງ ຕ່າງປະເທດ ຮັບ ຂັອຍຮັບ ເຈົ້າຮັບບໍ່ ອຸບັດຕິເຫດ ບ່ອນພັກ ເສບຕິດ ທີ່ຢູ່ ການຈັດຕັ້ງ ຜ່ານເຂົ້າ ຄ່າຜ່ານປະຕູ ອະນຸຍາດເຂົ້າ ຜູ້ໃຫຍ່ ປະຈົນໄພ ເຮືອບິນ ໂດຍເຮືອບິນ ຫຼັງຈາກ 170 ອີກ ຕ້ານ ເຫັນດີ ຂ້ອຍເຫັນດີ ເຈົ້າຫັນດີບໍ່ ຕົກລົງ ກະສິກຳ ກ່ອນ ຊ່ວຍເຫຼືອ ໂລກເອດສ ສາຍການບິນ ທາງອາກາດ ໂດຍທາງອາກາດ ໂມງປຸກ ທັງໝົດ ພູມແພ້ ອະນຸມັດ ເກືອບ ໂດດດ່ຽວ ຄື/ຕື່ມ ຫາງເລືອກ ເລື້ອຍໆ ມະຫັດສະຈັນ ເອກອັກຄະລັດຖະທູດ ລົດໂຮງໝໍ ລະຫວ່າງ ໂບຮານ ແລະ 171 ຮ້າຍ ເຄື່ອງໂບຮານ ອື່ນໃດ ເວລາໃດກໍ່ໄດ້ ອາຄານ ການນັດພົບ ປະມານ ບູຮານນະຄະດີ ຖົກຖຽງ ການຖົກຖຽງ ມາຮອດ ສີລະປະ ຖາມ ຢູ່ທີ່ ໃນເວລາ ໂອໂຕໂນມັດ B ເດັກມ້ອຍ ຫລັງ ບາໂລ; ຖົງເປ້ ຊົ່ວ ເຄື່ອງ/ຖົງ ');

function someBit() {
    $("#submit").attr("disabled", true);
    $("#output").html('');

    processText( $('#input')[0].value );

    $("#submit").removeAttr("disabled");
}

function processText(input) {
    var tok;

    while (1) {
        tok = getTok(input);

        if (!tok) {
            console.error('no token');
            break;
        }

        emit(tok);

        if (tok.status === 'end') {
            console.warn('end');
            break;
        }
        if (tok.status === 'error') {
            console.error('error');
            break;
        }
        if (tok.status !== 'ok' && tok.status !== 'warn' && tok.status !== 'nonlao') {
            console.warn('not ok');
            break;
        }
        if (!tok.status) {
            console.error('no status');
            break;
        }

        input = tok.rest;

        if (input === '') break;
    }
}

function getTok(input) {
    var tok = {};

    var m;
    var syll = '';

    function acceptSyllable() {
        console.log('syll', syll);
        tok.text = syll;
        tok.status = 'ok';
    }

    function acceptJunk() {
        console.log('junk', syll);
        tok.text = syll;
        tok.status = 'warn';
    }

   ...