12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- package stub
- /*
- простая реализация модели документа
- */
- import (
- "odf/model"
- "ypk/assert"
- )
- type sn struct {
- name model.LeafName
- attr map[model.AttrName]model.Attribute
- children []model.Leaf
- }
- func (n *sn) Attr(name model.AttrName, val ...model.Attribute) model.Attribute {
- assert.For(len(val) <= 1, 20, "only one attribute accepted")
- assert.For(name != "", 21)
- if len(val) == 1 {
- n.attr[name] = val[0]
- }
- return n.attr[name]
- }
- func (n *sn) Child(i int) model.Leaf {
- assert.For(i < len(n.children), 20)
- return n.children[i]
- }
- func (n *sn) IndexOf(l model.Leaf) (ret int) {
- ret = -1
- for i := 0; i < len(n.children) && ret == -1; i++ {
- if l == n.children[i] {
- ret = i
- }
- }
- return
- }
- func (n *sn) NofChild() int {
- return len(n.children)
- }
- func (n *sn) Name() model.LeafName {
- return n.name
- }
- func (n *sn) init() {
- n.attr = make(map[model.AttrName]model.Attribute)
- n.children = make([]model.Leaf, 0)
- }
- type sm struct {
- root *sn
- }
- func (m *sm) NewReader(...model.Reader) model.Reader {
- return nil
- }
- func (m *sm) NewWriter(old ...model.Writer) model.Writer {
- w := &sw{base: m}
- if len(old) == 1 {
- w.InitFrom(old[0])
- }
- return w
- }
- func (m *sm) Root() model.Node {
- return m.root
- }
- func nf() func() model.Model {
- return func() model.Model {
- r := &sn{}
- r.init()
- return &sm{root: r}
- }
- }
- func init() {
- model.ModelFactory = nf()
- }
|