summaryrefslogtreecommitdiff
path: root/lib/docx/styles-reader.js
blob: dc90bc11412670b22c576182b8ea37cce03a16cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
exports.readStylesXml = readStylesXml;
exports.Styles = Styles;
exports.defaultStyles = new Styles({}, {});

function Styles(paragraphStyles, characterStyles) {
    return {
        findParagraphStyleById: function(styleId) {
            return paragraphStyles[styleId];
        },
        findCharacterStyleById: function(styleId) {
            return characterStyles[styleId];
        }
    };
}

function readStylesXml(xml) {
    var paragraphStyles = {};
    var characterStyles = {};
    
    var styles = {
        "paragraph": paragraphStyles,
        "character": characterStyles
    };
    
    xml.root.getElementsByTagName("w:style").forEach(function(styleElement) {
        var style = readStyleElement(styleElement);
        var styleSet = styles[style.type];
        if (styleSet) {
            styleSet[style.styleId] = style;
        }
    });
    
    return new Styles(paragraphStyles, characterStyles);
}

function readStyleElement(styleElement) {
    var type = styleElement.attributes["w:type"];
    var styleId = styleElement.attributes["w:styleId"];
    var name = styleElement.first("w:name").attributes["w:val"];
    return {type: type, styleId: styleId, name: name};
}