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};
							 | 
						|
								}
							 | 
						|
								
							 |