Browse Source

Add count to style/Fonts element.

Geoffrey J. Teale 11 years ago
parent
commit
9a6a124b52
3 changed files with 17 additions and 11 deletions
  1. 3 3
      file_test.go
  2. 3 3
      sheet_test.go
  3. 11 5
      xmlStyle.go

+ 3 - 3
file_test.go

@@ -71,10 +71,10 @@ func (l *FileSuite) TestReadStylesFromZipFile(c *C) {
 	c.Assert(err, IsNil)
 	c.Assert(xlsxFile.styles, NotNil)
 
-	fontCount = len(xlsxFile.styles.Fonts)
+	fontCount = len(xlsxFile.styles.Fonts.Font)
 	c.Assert(fontCount, Equals, 4)
 
-	font = xlsxFile.styles.Fonts[0]
+	font = xlsxFile.styles.Fonts.Font[0]
 	c.Assert(font.Sz.Val, Equals, "11")
 	c.Assert(font.Name.Val, Equals, "Calibri")
 
@@ -393,7 +393,7 @@ func (l *FileSuite) TestMarshalFile(c *C) {
 	// spreadsheet.  Style support will follow.
 	expectedStyles := `<?xml version="1.0" encoding="UTF-8"?>
   <xlsxStyles>
-    <fonts>
+    <fonts count="2">
       <font>
         <sz val="12"></sz>
         <name val="Verdana"></name>

+ 3 - 3
sheet_test.go

@@ -77,9 +77,9 @@ func (s *SheetSuite) TestMakeXLSXSheetAlsoPopulatesXLSXSTyles(c *C) {
 	styles := &xlsxStyles{}
 	worksheet := sheet.makeXLSXSheet(refTable, styles)
 
-	c.Assert(len(styles.Fonts), Equals, 2)
-	c.Assert(styles.Fonts[0].Sz.Val, Equals, "10")
-	c.Assert(styles.Fonts[0].Name.Val, Equals, "Verdana")
+	c.Assert(len(styles.Fonts.Font), Equals, 2)
+	c.Assert(styles.Fonts.Font[0].Sz.Val, Equals, "10")
+	c.Assert(styles.Fonts.Font[0].Name.Val, Equals, "Verdana")
 
 	c.Assert(len(styles.Fills), Equals, 2)
 	c.Assert(styles.Fills[0].PatternFill.PatternType, Equals, "solid")

+ 11 - 5
xmlStyle.go

@@ -17,7 +17,7 @@ import (
 // currently I have not checked it for completeness - it does as much
 // as I need.
 type xlsxStyles struct {
-	Fonts        []xlsxFont   `xml:"fonts>font,omitempty"`
+	Fonts        xlsxFonts    `xml:"fonts,omitempty"`
 	Fills        []xlsxFill   `xml:"fills>fill,omitempty"`
 	Borders      []xlsxBorder `xml:"borders>border,omitempty"`
 	CellStyleXfs []xlsxXf     `xml:"cellStyleXfs>xf,omitempty"`
@@ -34,6 +34,11 @@ type xlsxNumFmt struct {
 	FormatCode string `xml:"formatCode,omitempty"`
 }
 
+type xlsxFonts struct {
+	Count int        `xml:"count,attr"`
+	Font  []xlsxFont `xml:"font,omitempty"`
+}
+
 // xlsxFont directly maps the font element in the namespace
 // http://schemas.openxmlformats.org/spreadsheetml/2006/main -
 // currently I have not checked it for completeness - it does as much
@@ -162,8 +167,8 @@ func (styles *xlsxStyles) getStyle(styleIndex int) (style Style) {
 			style.Fill.BgColor = xFill.PatternFill.BgColor.RGB
 		}
 
-		if xf.FontId > -1 && xf.FontId < len(styles.Fonts) {
-			xfont := styles.Fonts[xf.FontId]
+		if xf.FontId > -1 && xf.FontId < len(styles.Fonts.Font) {
+			xfont := styles.Fonts.Font[xf.FontId]
 			style.Font.Size, _ = strconv.Atoi(xfont.Sz.Val)
 			style.Font.Name = xfont.Name.Val
 			style.Font.Family, _ = strconv.Atoi(xfont.Family.Val)
@@ -188,8 +193,9 @@ func (styles *xlsxStyles) getNumberFormat(styleIndex int, numFmtRefTable map[int
 }
 
 func (styles *xlsxStyles) addFont(xFont xlsxFont) int {
-	styles.Fonts = append(styles.Fonts, xFont)
-	return len(styles.Fonts) - 1
+	styles.Fonts.Font = append(styles.Fonts.Font, xFont)
+	styles.Fonts.Count += 1
+	return len(styles.Fonts.Font) - 1
 }
 
 func (styles *xlsxStyles) addFill(xFill xlsxFill) int {