Skip to content

Commit

Permalink
matroska,ebml: Use scalar and require sane tag size
Browse files Browse the repository at this point in the history
  • Loading branch information
wader committed Dec 7, 2021
1 parent 713ffe4 commit e91b22b
Show file tree
Hide file tree
Showing 5 changed files with 239 additions and 421 deletions.
14 changes: 5 additions & 9 deletions format/matroska/ebml/ebml.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package ebml

import "github.com/wader/fq/pkg/scalar"

type Type int

const (
Expand All @@ -24,20 +26,14 @@ var TypeNames = map[Type]string{
Master: "master",
}

type Enum struct {
Value string
Label string
Definition string
}

type Attribute struct {
Name string
Type Type
Tag Tag
Definition string
IntegerEnums map[int64]Enum
UintegerEnums map[uint64]Enum
StringEnums map[string]Enum
IntegerEnums scalar.SToScalar
UintegerEnums scalar.UToScalar
StringEnums scalar.StrToScalar
}

type Tag map[uint64]Attribute
Expand Down
22 changes: 12 additions & 10 deletions format/matroska/ebml/gen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,16 @@ func main() {
}
pkgName := os.Args[2]
ebmlPkgPath := os.Args[3]
prefix := os.Args[4]
scalarPkgPath := os.Args[4]
root := os.Args[5]

fmt.Printf("// Code below generated from %s\n", xmlPath)
fmt.Printf("//nolint:revive\n")
fmt.Printf("package %s\n", pkgName)
fmt.Printf("import %q\n", ebmlPkgPath)
fmt.Printf("import (\n")
fmt.Printf("\t%q\n", ebmlPkgPath)
fmt.Printf("\t%q\n", scalarPkgPath)
fmt.Printf(")\n")

fmt.Printf("var Root = ebml.Tag{\n")
fmt.Printf("\tebml.HeaderID: {Name: \"EBML\", Type: ebml.Master, Tag: ebml.Header},\n")
Expand Down Expand Up @@ -115,14 +118,14 @@ func main() {
continue
}

fmt.Printf("var %s%s = ebml.Tag{\n", prefix, e.Name)
fmt.Printf("var %s = ebml.Tag{\n", e.Name)
for _, c := range children {
def, defOk := findDefintion(c.Documentations)
extra := ""
typ := c.Type
switch typ {
case "master":
extra = ", Tag: " + prefix + c.Name
extra = ", Tag: " + c.Name
case "utf-8":
typ = "UTF8"
}
Expand All @@ -136,11 +139,11 @@ func main() {
if len(c.Enums) > 0 {
switch c.Type {
case "integer":
fmt.Printf("\t\tIntegerEnums: map[int64]ebml.Enum{\n")
fmt.Printf("\t\tIntegerEnums: scalar.SToScalar{\n")
case "uinteger":
fmt.Printf("\t\tUintegerEnums: map[uint64]ebml.Enum{\n")
fmt.Printf("\t\tUintegerEnums: scalar.UToScalar{\n")
case "string":
fmt.Printf("\t\tStringEnums: map[string]ebml.Enum{\n")
fmt.Printf("\t\tStringEnums: scalar.StrToScalar{\n")
}

// matroska.xml has dup keys (e.g. PARTS)
Expand All @@ -165,10 +168,9 @@ func main() {
fmt.Printf("\t\t\t%q:{\n", e.Value)
}

fmt.Printf("\t\t\t\tValue: %q,\n", e.Value)
fmt.Printf("\t\t\t\tLabel: %q,\n", e.Label)
fmt.Printf("\t\t\t\tSym: %q,\n", e.Label)
if enumDefOk {
fmt.Printf("\t\t\t\tDefinition: %q,\n", enumDef)
fmt.Printf("\t\t\t\tDescription: %q,\n", enumDef)
}
fmt.Printf("\t\t\t},\n")
}
Expand Down
2 changes: 1 addition & 1 deletion format/matroska/ebml_matroska/ebml_matroska.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
package ebml_matroska

// https://raw.githubusercontent.com/cellar-wg/matroska-specification/aa2144a58b661baf54b99bab41113d66b0f5ff62/ebml_matroska.xml
//go:generate sh -c "go run ../ebml/gen/main.go ebml_matroska.xml ebml_matroska github.com/wader/fq/format/matroska/ebml '' Segment | gofmt > ebml_matroska_gen.go"
//go:generate sh -c "go run ../ebml/gen/main.go ebml_matroska.xml ebml_matroska github.com/wader/fq/format/matroska/ebml github.com/wader/fq/pkg/scalar Segment | gofmt -s > ebml_matroska_gen.go"
Loading

0 comments on commit e91b22b

Please sign in to comment.