/* 18.8.5 borders CT_Borders */
function parse_borders(t, styles, themes, opts) {
	styles.Borders = [];
	var border = {}, sub_border = {};
	t[0].match(tagregex).forEach(function(x) {
		var y = parsexmltag(x);
		switch (y[0]) {
			case '': case '': break;
			/* 18.8.4 border CT_Border */
			case '':
				border = {};
				if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; }
				if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; }
				styles.Borders.push(border);
				break;
			case '': break;
			/* note: not in spec, appears to be CT_BorderPr */
			case '': break;
			case '': break;
			/* note: not in spec, appears to be CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.43 top CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.6 bottom CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.13 diagonal CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.25 horizontal CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.44 vertical CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.37 start CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.16 end CT_BorderPr */
			case '': break;
			case '': break;
			/* 18.8.? color CT_Color */
			case '': break;
			case '': break;
			default: if(opts && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in borders');
		}
	});
}
/* 18.8.21 fills CT_Fills */
function parse_fills(t, styles, themes, opts) {
	styles.Fills = [];
	var fill = {};
	t[0].match(tagregex).forEach(function(x) {
		var y = parsexmltag(x);
		switch(y[0]) {
			case '': case '': break;
			/* 18.8.20 fill CT_Fill */
			case '': break;
			case '': styles.Fills.push(fill); fill = {}; break;
			/* 18.8.24 gradientFill CT_GradientFill */
			case '': break;
			case '': styles.Fills.push(fill); fill = {}; break;
			/* 18.8.32 patternFill CT_PatternFill */
			case '':
				if(y.patternType) fill.patternType = y.patternType;
				break;
			case '': case '': break;
			/* 18.8.3 bgColor CT_Color */
			case '': case '': break;
			/* 18.8.19 fgColor CT_Color */
			case '': case '': break;
			/* 18.8.38 stop CT_GradientStop */
			case '': break;
			case '': break;
			/* 18.8.? color CT_Color */
			case '': break;
			case '': break;
			default: if(opts && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in fills');
		}
	});
}
/* 18.8.23 fonts CT_Fonts */
function parse_fonts(t, styles, themes, opts) {
	styles.Fonts = [];
	var font = {};
	t[0].match(tagregex).forEach(function(x) {
		var y = parsexmltag(x);
		switch (y[0]) {
			case '': case '': break;
			/* 18.8.22 font CT_Font */
			case '': break;
			case '': case '':
				styles.Fonts.push(font);
				font = {};
				break;
			/* 18.8.29 name CT_FontName */
			case '': case '': break;
			/* 18.8.2 b CT_BooleanProperty */
			case '': font.bold = true; break;
			/* 18.8.26 i CT_BooleanProperty */
			case '': font.italic = true; break;
			/* 18.4.13 u CT_UnderlineProperty */
			case '': font.underline = true; break;
			/* 18.4.10 strike CT_BooleanProperty */
			case '