Revision 03558478

b/webodf/lib/dom/RelaxNG.js
148 148
            if (e.length === 1 && (name === "choice" || name === "group" ||
149 149
                    name === "interleave")) {
150 150
                name = e[0].name;
151
                names = e[0].names;
151 152
                a = e[0].a;
152 153
                text = e[0].text;
153 154
                e = e[0].e;
......
259 260
                runtime.log(err);
260 261
                return err;
261 262
            }
262
            //runtime.log(JSON.stringify(start, null, "  "));
263
//            runtime.log(JSON.stringify(start, null, "  "));
263 264
            return null;
264 265
        }
265 266
        return main();
......
389 390
            return [new RelaxNGParseError("Found " + node.nodeName +
390 391
                    " instead of " + elementdef.names + ".", node)];
391 392
        }
393
//runtime.log(p.slice(0, depth) + qName(node));
392 394
        // the right element was found, now parse the contents
393 395
        if (walker.firstChild()) {
394 396
            // currentNode now points to the first child node of this element
......
480 482
     * @param elementdef
481 483
     * @param walker
482 484
     * @param {Element} element
485
     * @return {Array.<RelaxNGParseError>}
486
     */
487
    function validateText(elementdef, walker, element) {
488
        var /**@type{Node}*/ node = walker.currentNode,
489
            /**@type{number}*/ type = node ? node.nodeType : 0,
490
            error = null;
491
        // find the next element, skip text nodes with only whitespace
492
        while (type !== 3) {
493
            if (type === 1) {
494
                return [new RelaxNGParseError("Element not allowd here.", element)];
495
            }
496
            node = walker.nextSibling();
497
            type = node ? node.nodeType : 0;
498
        }
499
        walker.nextSibling();
500
        return null;
501
    }
502
    /**
503
     * @param elementdef
504
     * @param walker
505
     * @param {Element} element
483 506
     * @param {string=} data
484 507
     * @return {Array.<RelaxNGParseError>}
485 508
     */
......
487 510
                element, data) {
488 511
        var name = elementdef.name, err = null;
489 512
        if (name === "text") {
490
            throw "text not implemented.";
513
            err = validateText(elementdef, walker, element);
491 514
        } else if (name === "data") {
492 515
            err = null; // data not implemented
493 516
        } else if (name === "value") {
494 517
            if (data !== elementdef.text) {
495
                err = [new RelaxNGParseError("Wrong value, should be " +
496
                        elementdef.text, element)];
518
                err = [new RelaxNGParseError("Wrong value, should be '" +
519
                        elementdef.text + "', not '" + data + "'", element)];
497 520
            }
498 521
        } else if (name === "list") {
499 522
            err = null; // list not implemented

Also available in: Unified diff