You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.1 KiB
70 lines
2.1 KiB
exports.readStylesXml = readStylesXml;
|
|
exports.Styles = Styles;
|
|
exports.defaultStyles = new Styles({}, {});
|
|
|
|
function Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles) {
|
|
return {
|
|
findParagraphStyleById: function(styleId) {
|
|
return paragraphStyles[styleId];
|
|
},
|
|
findCharacterStyleById: function(styleId) {
|
|
return characterStyles[styleId];
|
|
},
|
|
findTableStyleById: function(styleId) {
|
|
return tableStyles[styleId];
|
|
},
|
|
findNumberingStyleById: function(styleId) {
|
|
return numberingStyles[styleId];
|
|
}
|
|
};
|
|
}
|
|
|
|
Styles.EMPTY = new Styles({}, {}, {}, {});
|
|
|
|
function readStylesXml(root) {
|
|
var paragraphStyles = {};
|
|
var characterStyles = {};
|
|
var tableStyles = {};
|
|
var numberingStyles = {};
|
|
|
|
var styles = {
|
|
"paragraph": paragraphStyles,
|
|
"character": characterStyles,
|
|
"table": tableStyles
|
|
};
|
|
|
|
root.getElementsByTagName("w:style").forEach(function(styleElement) {
|
|
var style = readStyleElement(styleElement);
|
|
if (style.type === "numbering") {
|
|
numberingStyles[style.styleId] = readNumberingStyleElement(styleElement);
|
|
} else {
|
|
var styleSet = styles[style.type];
|
|
if (styleSet) {
|
|
styleSet[style.styleId] = style;
|
|
}
|
|
}
|
|
});
|
|
|
|
return new Styles(paragraphStyles, characterStyles, tableStyles, numberingStyles);
|
|
}
|
|
|
|
function readStyleElement(styleElement) {
|
|
var type = styleElement.attributes["w:type"];
|
|
var styleId = styleElement.attributes["w:styleId"];
|
|
var name = styleName(styleElement);
|
|
return {type: type, styleId: styleId, name: name};
|
|
}
|
|
|
|
function styleName(styleElement) {
|
|
var nameElement = styleElement.first("w:name");
|
|
return nameElement ? nameElement.attributes["w:val"] : null;
|
|
}
|
|
|
|
function readNumberingStyleElement(styleElement) {
|
|
var numId = styleElement
|
|
.firstOrEmpty("w:pPr")
|
|
.firstOrEmpty("w:numPr")
|
|
.firstOrEmpty("w:numId")
|
|
.attributes["w:val"];
|
|
return {numId: numId};
|
|
}
|
|
|