Skip to content

Commit

Permalink
Merge pull request #19 from qmuntal/iri-support
Browse files Browse the repository at this point in the history
Improve Unicode support
  • Loading branch information
qmuntal authored Jan 4, 2021
2 parents 5df7fe4 + 06213f6 commit 26e1664
Show file tree
Hide file tree
Showing 10 changed files with 349 additions and 152 deletions.
26 changes: 15 additions & 11 deletions package.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (
"fmt"
"io"
"mime"
"path/filepath"
"path"
"sort"
"strings"
)
Expand All @@ -27,34 +27,38 @@ const (
)

type pkg struct {
parts map[string]*Part
parts map[string]struct{}
contentTypes contentTypes
}

func newPackage() *pkg {
return &pkg{
parts: make(map[string]*Part, 0),
parts: make(map[string]struct{}, 0),
}
}

func (p *pkg) partExists(partName string) bool {
_, ok := p.parts[strings.ToUpper(partName)]
_, ok := p.parts[partName]
return ok
}

func (p *pkg) add(part *Part) error {
if err := part.validate(); err != nil {
return err
}
upperURI := strings.ToUpper(part.Name)
if p.partExists(upperURI) {
name := part.Name
if !strings.EqualFold(name, contentTypesName) {
name = NormalizePartName(part.Name)
}
name = strings.ToUpper(name)
if p.partExists(name) {
return newError(112, part.Name)
}
if p.checkPrefixCollision(upperURI) {
if p.checkPrefixCollision(name) {
return newError(111, part.Name)
}
p.contentTypes.add(part.Name, part.ContentType)
p.parts[upperURI] = part
p.contentTypes.add(name, part.ContentType)
p.parts[name] = struct{}{}
return nil
}

Expand Down Expand Up @@ -152,7 +156,7 @@ func (c *contentTypes) add(partName, contentType string) error {
t, params, _ := mime.ParseMediaType(contentType)
contentType = mime.FormatMediaType(t, params)

ext := strings.ToLower(filepath.Ext(partName))
ext := strings.ToLower(path.Ext(partName))
if len(ext) == 0 {
c.addOverride(partName, contentType)
return nil
Expand Down Expand Up @@ -187,7 +191,7 @@ func (c *contentTypes) findType(name string) (string, error) {
if t, ok := c.overrides[strings.ToUpper(name)]; ok {
return t, nil
}
ext := filepath.Ext(name)
ext := path.Ext(name)
if ext != "" {
if t, ok := c.defaults[strings.ToLower(ext[1:])]; ok {
return t, nil
Expand Down
9 changes: 4 additions & 5 deletions package_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import (
)

func createFakePackage(m ...string) *pkg {
parts := make(map[string]*Part, len(m))
parts := make(map[string]struct{}, len(m))
for _, s := range m {
parts[strings.ToUpper(s)] = new(Part)
parts[strings.ToUpper(s)] = struct{}{}
}
return &pkg{
parts: parts,
Expand All @@ -23,9 +23,8 @@ func Test_newPackage(t *testing.T) {
want *pkg
}{
{"base", &pkg{
parts: make(map[string]*Part, 0),
},
},
parts: make(map[string]struct{}, 0),
}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
Loading

0 comments on commit 26e1664

Please sign in to comment.