diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-20 17:38:49 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-10-22 20:46:14 +0200 |
commit | eb038cfa0a8ada29dfcba1204ec5c432da9ed7e0 (patch) | |
tree | 9ed33e3517e49ef16f349b70b328feff47ee60d3 /commands | |
parent | 129c27ee6e9fed98dbfebeaa272fd52757b475b2 (diff) |
Convert the rest to new page parser code paths
And remove some now unused code.
See #5324
Diffstat (limited to 'commands')
-rw-r--r-- | commands/convert.go | 88 | ||||
-rw-r--r-- | commands/import_jekyll.go | 34 | ||||
-rw-r--r-- | commands/new_site.go | 5 |
3 files changed, 65 insertions, 62 deletions
diff --git a/commands/convert.go b/commands/convert.go index 29714301f..b208f6cab 100644 --- a/commands/convert.go +++ b/commands/convert.go @@ -16,6 +16,7 @@ package commands import ( "bytes" "fmt" + "io" "strings" "time" @@ -34,7 +35,6 @@ import ( "path/filepath" - "github.com/spf13/cast" "github.com/spf13/cobra" ) @@ -156,7 +156,7 @@ func (cc *convertCmd) convertAndSavePage(p *hugolib.Page, site *hugolib.Site, ta return nil } - psr, err := pageparser.Parse(file) + pf, err := parseContentFile(file) if err != nil { site.Log.ERROR.Println(errMsg) file.Close() @@ -165,53 +165,24 @@ func (cc *convertCmd) convertAndSavePage(p *hugolib.Page, site *hugolib.Site, ta file.Close() - var sourceFormat, sourceContent []byte - var fromFormat metadecoders.Format - - iter := psr.Iterator() - - walkFn := func(item pageparser.Item) bool { - if sourceFormat != nil { - // The rest is content. - sourceContent = psr.Input()[item.Pos:] - // Done - return false - } else if item.IsFrontMatter() { - fromFormat = metadecoders.FormatFromFrontMatterType(item.Type) - sourceFormat = item.Val - } - return true - - } - - iter.PeekWalk(walkFn) - - metadata, err := metadecoders.UnmarshalToMap(sourceFormat, fromFormat) - if err != nil { - site.Log.ERROR.Println(errMsg) - return err - } - // better handling of dates in formats that don't have support for them - if fromFormat == metadecoders.JSON || fromFormat == metadecoders.YAML || fromFormat == metadecoders.TOML { - newMetadata := cast.ToStringMap(metadata) - for k, v := range newMetadata { + if pf.frontMatterFormat == metadecoders.JSON || pf.frontMatterFormat == metadecoders.YAML || pf.frontMatterFormat == metadecoders.TOML { + for k, v := range pf.frontMatter { switch vv := v.(type) { case time.Time: - newMetadata[k] = vv.Format(time.RFC3339) + pf.frontMatter[k] = vv.Format(time.RFC3339) } } - metadata = newMetadata } var newContent bytes.Buffer - err = parser.InterfaceToFrontMatter2(metadata, targetFormat, &newContent) + err = parser.InterfaceToFrontMatter(pf.frontMatter, targetFormat, &newContent) if err != nil { site.Log.ERROR.Println(errMsg) return err } - newContent.Write(sourceContent) + newContent.Write(pf.content) newFilename := p.Filename() @@ -229,3 +200,48 @@ func (cc *convertCmd) convertAndSavePage(p *hugolib.Page, site *hugolib.Site, ta return nil } + +type parsedFile struct { + frontMatterFormat metadecoders.Format + frontMatterSource []byte + frontMatter map[string]interface{} + + // Everything after Front Matter + content []byte +} + +func parseContentFile(r io.Reader) (parsedFile, error) { + var pf parsedFile + + psr, err := pageparser.Parse(r) + if err != nil { + return pf, err + } + + iter := psr.Iterator() + + walkFn := func(item pageparser.Item) bool { + if pf.frontMatterSource != nil { + // The rest is content. + pf.content = psr.Input()[item.Pos:] + // Done + return false + } else if item.IsFrontMatter() { + pf.frontMatterFormat = metadecoders.FormatFromFrontMatterType(item.Type) + pf.frontMatterSource = item.Val + } + return true + + } + + iter.PeekWalk(walkFn) + + metadata, err := metadecoders.UnmarshalToMap(pf.frontMatterSource, pf.frontMatterFormat) + if err != nil { + return pf, err + } + pf.frontMatter = metadata + + return pf, nil + +} diff --git a/commands/import_jekyll.go b/commands/import_jekyll.go index 2a86840d6..fc3a84027 100644 --- a/commands/import_jekyll.go +++ b/commands/import_jekyll.go @@ -16,6 +16,7 @@ package commands import ( "bytes" "errors" + "fmt" "io" "io/ioutil" "os" @@ -264,7 +265,7 @@ func (i *importCmd) loadJekyllConfig(fs afero.Fs, jekyllRoot string) map[string] return c } -func (i *importCmd) createConfigFromJekyll(fs afero.Fs, inpath string, kind string, jekyllConfig map[string]interface{}) (err error) { +func (i *importCmd) createConfigFromJekyll(fs afero.Fs, inpath string, kind metadecoders.Format, jekyllConfig map[string]interface{}) (err error) { title := "My New Hugo Site" baseURL := "http://example.org/" @@ -290,15 +291,14 @@ func (i *importCmd) createConfigFromJekyll(fs afero.Fs, inpath string, kind stri "languageCode": "en-us", "disablePathToLower": true, } - kind = parser.FormatSanitize(kind) var buf bytes.Buffer - err = parser.InterfaceToConfig(in, parser.FormatToLeadRune(kind), &buf) + err = parser.InterfaceToConfig(in, kind, &buf) if err != nil { return err } - return helpers.WriteToDisk(filepath.Join(inpath, "config."+kind), &buf, fs) + return helpers.WriteToDisk(filepath.Join(inpath, "config."+string(kind)), &buf, fs) } func copyFile(source string, dest string) error { @@ -447,39 +447,25 @@ func convertJekyllPost(s *hugolib.Site, path, relPath, targetDir string, draft b return err } - psr, err := parser.ReadFrom(bytes.NewReader(contentBytes)) + pf, err := parseContentFile(bytes.NewReader(contentBytes)) if err != nil { jww.ERROR.Println("Parse file error:", path) return err } - metadata, err := psr.Metadata() - if err != nil { - jww.ERROR.Println("Processing file error:", path) - return err - } - - newmetadata, err := convertJekyllMetaData(metadata, postName, postDate, draft) + newmetadata, err := convertJekyllMetaData(pf.frontMatter, postName, postDate, draft) if err != nil { jww.ERROR.Println("Convert metadata error:", path) return err } - jww.TRACE.Println(newmetadata) - content := convertJekyllContent(newmetadata, string(psr.Content())) + content := convertJekyllContent(newmetadata, string(pf.content)) - page, err := s.NewPage(filename) - if err != nil { - jww.ERROR.Println("New page error", filename) - return err + fs := hugofs.Os + if err := helpers.WriteToDisk(targetFile, strings.NewReader(content), fs); err != nil { + return fmt.Errorf("Failed to save file %q:", filename) } - page.SetSourceContent([]byte(content)) - page.SetSourceMetaData(newmetadata, parser.FormatToLeadRune("yaml")) - page.SaveSourceAs(targetFile) - - jww.TRACE.Println("Target file:", targetFile) - return nil } diff --git a/commands/new_site.go b/commands/new_site.go index 2233157ed..114ee82f6 100644 --- a/commands/new_site.go +++ b/commands/new_site.go @@ -19,6 +19,8 @@ import ( "path/filepath" "strings" + "github.com/gohugoio/hugo/parser/metadecoders" + _errors "github.com/pkg/errors" "github.com/gohugoio/hugo/create" @@ -131,10 +133,9 @@ func createConfig(fs *hugofs.Fs, inpath string, kind string) (err error) { "title": "My New Hugo Site", "languageCode": "en-us", } - kind = parser.FormatSanitize(kind) var buf bytes.Buffer - err = parser.InterfaceToConfig(in, parser.FormatToLeadRune(kind), &buf) + err = parser.InterfaceToConfig(in, metadecoders.FormatFromString(kind), &buf) if err != nil { return err } |