Răsfoiți Sursa

заложил генератор

kpmy 10 ani în urmă
părinte
comite
fce8fa7850
5 a modificat fișierele cu 58 adăugiri și 5 ștergeri
  1. 11 0
      generators/gen.go
  2. 12 2
      mappers/attr.go
  3. 14 2
      mappers/fmt.go
  4. 13 0
      odf_test.go
  5. 8 1
      xmlns/office/office.go

+ 11 - 0
generators/gen.go

@@ -0,0 +1,11 @@
+package generators
+
+import (
+	"io"
+	"odf/model"
+	"odf/xmlns"
+)
+
+func Generate(m model.Model, out io.Writer, mimetype xmlns.Mime) {
+
+}

+ 12 - 2
mappers/attr.go

@@ -6,8 +6,13 @@ import (
 )
 )
 
 
 type Attr struct {
 type Attr struct {
-	doc model.Model
-	ds  model.Leaf //document styles
+	doc  model.Model
+	ds   model.Leaf //document styles
+	ffd  model.Leaf //font-face decls
+	as   model.Leaf //automatic styles
+	ms   model.Leaf //master styles
+	asc  model.Leaf //automatic styles
+	ffdc model.Leaf //font-face decls
 }
 }
 
 
 func (a *Attr) Init(m model.Model) {
 func (a *Attr) Init(m model.Model) {
@@ -16,4 +21,9 @@ func (a *Attr) Init(m model.Model) {
 	wr.Pos(a.doc.Root())
 	wr.Pos(a.doc.Root())
 	a.ds = wr.WritePos(New(office.DocumentStyles))
 	a.ds = wr.WritePos(New(office.DocumentStyles))
 	wr.Attr(office.Version, "1.0")
 	wr.Attr(office.Version, "1.0")
+	a.ffd = wr.WritePos(New(office.FontFaceDecls))
+	a.as = wr.WritePos(New(office.AutomaticStyles))
+	a.ms = wr.WritePos(New(office.MasterStyles))
+	a.asc = wr.WritePos(New(office.AutomaticStyles))
+	a.ffdc = wr.WritePos(New(office.FontFaceDecls))
 }
 }

+ 14 - 2
mappers/fmt.go

@@ -3,6 +3,7 @@ package mappers
 import (
 import (
 	"odf/model"
 	"odf/model"
 	"odf/xmlns"
 	"odf/xmlns"
+	"odf/xmlns/office"
 	"ypk/assert"
 	"ypk/assert"
 )
 )
 
 
@@ -10,16 +11,19 @@ var New func(name model.LeafName) model.Leaf
 
 
 type Formatter struct {
 type Formatter struct {
 	m        model.Model
 	m        model.Model
-	inner    model.Writer
+	rider    model.Writer
 	MimeType xmlns.Mime
 	MimeType xmlns.Mime
 	attr     *Attr
 	attr     *Attr
+	text     model.Node
+	ready    bool
 }
 }
 
 
 func (f *Formatter) ConnectTo(m model.Model) {
 func (f *Formatter) ConnectTo(m model.Model) {
 	assert.For(m.Root().NofChild() == 0, 20, "only new documents for now")
 	assert.For(m.Root().NofChild() == 0, 20, "only new documents for now")
 	f.m = m
 	f.m = m
-	f.inner = f.m.NewWriter()
+	f.rider = f.m.NewWriter()
 	f.attr = &Attr{}
 	f.attr = &Attr{}
+	f.ready = false
 }
 }
 
 
 func (f *Formatter) Init() {
 func (f *Formatter) Init() {
@@ -27,6 +31,14 @@ func (f *Formatter) Init() {
 	wr := f.m.NewWriter()
 	wr := f.m.NewWriter()
 	wr.Pos(f.m.Root())
 	wr.Pos(f.m.Root())
 	f.attr.Init(f.m)
 	f.attr.Init(f.m)
+	wr.WritePos(New(office.DocumentContent))
+	wr.Attr(office.Version, "1.0")
+	wr.Write(f.attr.ffdc)
+	wr.Write(f.attr.asc)
+	wr.WritePos(New(office.Body))
+	f.text = wr.WritePos(New(office.Text)).(model.Node)
+	f.rider.Pos(f.text)
+	f.ready = true
 }
 }
 
 
 func init() {
 func init() {

+ 13 - 0
odf_test.go

@@ -1,10 +1,12 @@
 package odf
 package odf
 
 
 import (
 import (
+	"odf/generators"
 	"odf/mappers"
 	"odf/mappers"
 	"odf/model"
 	"odf/model"
 	_ "odf/model/stub"
 	_ "odf/model/stub"
 	"odf/xmlns"
 	"odf/xmlns"
+	"os"
 	"testing"
 	"testing"
 )
 )
 
 
@@ -26,3 +28,14 @@ func TestMappers(t *testing.T) {
 	fm.MimeType = xmlns.MimeText
 	fm.MimeType = xmlns.MimeText
 	fm.Init()
 	fm.Init()
 }
 }
+
+func TestGenerators(t *testing.T) {
+	output, _ := os.OpenFile("test0.odt", os.O_CREATE|os.O_WRONLY, 0666)
+	m := model.ModelFactory()
+	fm := &mappers.Formatter{}
+	fm.ConnectTo(m)
+	fm.MimeType = xmlns.MimeText
+	fm.Init()
+	generators.Generate(m, output, fm.MimeType)
+	output.Close()
+}

+ 8 - 1
xmlns/office/office.go

@@ -5,7 +5,14 @@ import (
 )
 )
 
 
 const (
 const (
-	DocumentStyles model.LeafName = "office:document-styles"
+	DocumentStyles  model.LeafName = "office:document-styles"
+	AutomaticStyles model.LeafName = "office:automatic-styles"
+	MasterStyles    model.LeafName = "office:master-styles"
+	FontFaceDecls   model.LeafName = "office:font-face-decls"
+
+	DocumentContent model.LeafName = "office:document-content"
+	Body            model.LeafName = "office:body"
+	Text            model.LeafName = "office:text"
 )
 )
 
 
 const (
 const (