Skip to content

Commit

Permalink
self closing boolean tags
Browse files Browse the repository at this point in the history
  • Loading branch information
groob committed Jan 10, 2016
1 parent 4096064 commit c271b43
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
25 changes: 22 additions & 3 deletions xml_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package plist

import (
"encoding/xml"
"fmt"
"io"
"log"
)
Expand Down Expand Up @@ -42,6 +43,9 @@ func (e *xmlEncoder) generateDocument(pval *plistValue) error {
if err := e.EncodeToken(plistStartElement); err != nil {
return err
}
if err := e.Flush(); err != nil {
return err
}
// do stuff here
if err := e.writePlistValue(pval); err != nil {
return err
Expand All @@ -55,20 +59,35 @@ func (e *xmlEncoder) generateDocument(pval *plistValue) error {
}
return nil
}

func (e *xmlEncoder) writePlistValue(pval *plistValue) error {
var key string
encodedValue := pval.value
switch pval.kind {
case String:
key = "string"
case Boolean:
return e.writeBoolValue(pval)
default:
panic(pval.kind)

}
if key == "" {
panic("nil key")
}
err := e.EncodeElement(encodedValue, xml.StartElement{Name: xml.Name{Local: key}})
e.Flush()
return err
if err := e.EncodeElement(encodedValue, xml.StartElement{Name: xml.Name{Local: key}}); err != nil {
return err
}
return nil
}

func (e *xmlEncoder) writeBoolValue(pval *plistValue) error {
// EncodeElement results in <true></true> instead of <true/>
// use writer to write self closing tags
b := pval.value.(bool)
_, err := e.writer.Write([]byte(fmt.Sprintf("<%t/>", b)))
if err != nil {
return err
}
return nil
}
7 changes: 5 additions & 2 deletions xml_writer_test.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
package plist

import (
"log"
"os"
"testing"
)

func TestGenDoc(t *testing.T) {
err := newXMLEncoder(os.Stdout).generateDocument(&plistValue{String, "foo"})
if err != nil {
log.Fatal(err)
t.Fatal(err)
}
err = newXMLEncoder(os.Stdout).generateDocument(&plistValue{Boolean, true})
if err != nil {
t.Fatal(err)
}
}

0 comments on commit c271b43

Please sign in to comment.