docs: function parse_borders(t, styles, themes, opts) {
  	styles.Borders = [];
  	var border = {}/*, sub_border = {}*/;
  	var pass = false;
  	t[0].match(tagregex).forEach(function(x) {
  		var y = parsexmltag(x);
  		switch(strip_ns(y[0])) {
  			case '<borders': case '<borders>': case '</borders>': break;
  
  			/* 18.8.4 border CT_Border */
  			case '<border': case '<border>': case '<border/>':
  				border = {};
  				if (y.diagonalUp) { border.diagonalUp = y.diagonalUp; }
  				if (y.diagonalDown) { border.diagonalDown = y.diagonalDown; }
  				styles.Borders.push(border);
  				break;
  			case '</border>': break;
  
  			/* note: not in spec, appears to be CT_BorderPr */
  			case '<left/>': break;
  			case '<left': case '<left>': break;
  			case '</left>': break;
  
  			/* note: not in spec, appears to be CT_BorderPr */
  			case '<right/>': break;
  			case '<right': case '<right>': break;
  			case '</right>': break;
  
  			/* 18.8.43 top CT_BorderPr */
  			case '<top/>': break;
  			case '<top': case '<top>': break;
  			case '</top>': break;
  
  			/* 18.8.6 bottom CT_BorderPr */
  			case '<bottom/>': break;
  			case '<bottom': case '<bottom>': break;
  			case '</bottom>': break;
  
  			/* 18.8.13 diagonal CT_BorderPr */
  			case '<diagonal': case '<diagonal>': case '<diagonal/>': break;
  			case '</diagonal>': break;
  
  			/* 18.8.25 horizontal CT_BorderPr */
  			case '<horizontal': case '<horizontal>': case '<horizontal/>': break;
  			case '</horizontal>': break;
  
  			/* 18.8.44 vertical CT_BorderPr */
  			case '<vertical': case '<vertical>': case '<vertical/>': break;
  			case '</vertical>': break;
  
  			/* 18.8.37 start CT_BorderPr */
  			case '<start': case '<start>': case '<start/>': break;
  			case '</start>': break;
  
  			/* 18.8.16 end CT_BorderPr */
  			case '<end': case '<end>': case '<end/>': break;
  			case '</end>': break;
  
  			/* 18.8.? color CT_Color */
  			case '<color': case '<color>': break;
  			case '<color/>': case '</color>': break;
  
  			/* 18.2.10 extLst CT_ExtensionList ? */
  			case '<extLst': case '<extLst>': case '</extLst>': break;
  			case '<ext': pass = true; break;
  			case '</ext>': pass = false; break;
  			default: if(opts && opts.WTF) {
  				if(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');
  			}
  		}
  	});
  }