From: spf13 Date: Mon, 20 Oct 2014 21:42:16 +0000 (-0400) Subject: Handlers WIP X-Git-Tag: v0.13~373 X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=93f3d604;p=brevno-suite%2Fhugo Handlers WIP --- diff --git a/hugolib/handler_file.go b/hugolib/handler_file.go new file mode 100644 index 00000000..32df8066 --- /dev/null +++ b/hugolib/handler_file.go @@ -0,0 +1,23 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Simple Public License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://opensource.org/licenses/Simple-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import "github.com/spf13/hugo/source" + +var Filer interface { + Read(*source.File) + Render() + Convert() + Extensions() []string +} diff --git a/hugolib/handler_page.go b/hugolib/handler_page.go new file mode 100644 index 00000000..47fa85cd --- /dev/null +++ b/hugolib/handler_page.go @@ -0,0 +1,43 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Simple Public License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://opensource.org/licenses/Simple-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import "github.com/spf13/hugo/source" + +var Pager interface { + Read(*source.File) + Render() + Convert() + Extensions() []string +} + +var markdown = Handle{ + extensions: []string{"mdown", "markdown", "md"}, + readrun: func(f *source.File, results HandleResults) { + page, err := NewPage(f.Path()) + if err != nil { + results <- HandledResult{file: f, err: err} + } + + if err := page.ReadFrom(f.Contents); err != nil { + results <- HandledResult{file: f, err: err} + } + + results <- HandledResult{file: f, page: page, err: err} + }, +} + +func init() { + RegisterHandler(markdown) +} diff --git a/hugolib/handlers.go b/hugolib/handlers.go new file mode 100644 index 00000000..2aaf8cc4 --- /dev/null +++ b/hugolib/handlers.go @@ -0,0 +1,74 @@ +// Copyright © 2014 Steve Francia . +// +// Licensed under the Simple Public License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://opensource.org/licenses/Simple-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hugolib + +import "github.com/spf13/hugo/source" + +type Handler interface { + Read(*source.File, HandleResults) + //Render() + //Convert() + Extensions() []string +} + +type HandledResult struct { + page *Page + file *source.File + err error +} + +type HandleResults chan<- HandledResult + +type ReadFunc func(*source.File, HandleResults) + +type Handle struct { + extensions []string + readrun ReadFunc +} + +var handlers []Handler + +func (h Handle) Extensions() []string { + return h.extensions +} + +func (h Handle) Read(s *source.File, results HandleResults) { + h.readrun(s, results) +} + +func RegisterHandler(h Handler) { + handlers = append(handlers, h) +} + +func Handlers() []Handler { + return handlers +} + +func FindHandler(ext string) Handler { + for _, h := range Handlers() { + if HandlerMatch(h, ext) { + return h + } + } + return nil +} + +func HandlerMatch(h Handler, ext string) bool { + for _, x := range h.Extensions() { + if ext == x { + return true + } + } + return false +} diff --git a/hugolib/handlers/file.go b/hugolib/handlers/file.go deleted file mode 100644 index d69ce063..00000000 --- a/hugolib/handlers/file.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright © 2014 Steve Francia . -// -// Licensed under the Simple Public License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://opensource.org/licenses/Simple-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -var Filer interface { - Read() - Render() - Convert() -} diff --git a/hugolib/handlers/handlers.go b/hugolib/handlers/handlers.go deleted file mode 100644 index c6c24a95..00000000 --- a/hugolib/handlers/handlers.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright © 2014 Steve Francia . -// -// Licensed under the Simple Public License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://opensource.org/licenses/Simple-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -var Handler interface { - Read() - Render() - Convert() - Extensions() -} - -var handlers []Handler - -func RegisterHandler(h Handler) { - handlers = append(handlers, h) -} - -func Handlers() []Handler { - return handlers -} - -func Handler(ext string) Handler { - for _, h := range Handlers() { - if h.Match(ext) { - return h - } - } - return nil -} - -func (h Handler) Match(ext string) bool { - for _, x := range h.Extensions() { - if ext == x { - return true - } - } - return false -} diff --git a/hugolib/handlers/page.go b/hugolib/handlers/page.go deleted file mode 100644 index 6d0545b4..00000000 --- a/hugolib/handlers/page.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright © 2014 Steve Francia . -// -// Licensed under the Simple Public License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://opensource.org/licenses/Simple-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package hugolib - -var Pager interface { - Read() - Render() - Convert() -} diff --git a/hugolib/page.go b/hugolib/page.go index f5b5a2cd..5ca1ffb5 100644 --- a/hugolib/page.go +++ b/hugolib/page.go @@ -54,20 +54,12 @@ type Page struct { frontmatter []byte rawContent []byte plain string // TODO should be []byte - //sourceFrontmatter []byte - //sourceContent []byte PageMeta - //SourceFile source.File Source Position Node - //Destination source.File } -//type File struct { -//Name, FileName, Extension, Dir, UniqueId string -//} - type Source struct { Frontmatter []byte Content []byte diff --git a/hugolib/site.go b/hugolib/site.go index 9c96ff7c..2db71154 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -331,7 +331,7 @@ func (s *Site) CreatePages() error { files := s.Source.Files() - results := make(chan pageResult) + results := make(chan HandledResult) filechan := make(chan *source.File) procs := getGoMaxProcs() @@ -361,7 +361,7 @@ func (s *Site) CreatePages() error { readErrs := <-errs - results = make(chan pageResult) + results = make(chan HandledResult) pagechan := make(chan *Page) wg = &sync.WaitGroup{} @@ -397,33 +397,23 @@ func (s *Site) CreatePages() error { return fmt.Errorf("%s\n%s", readErrs, renderErrs) } -func sourceReader(s *Site, files <-chan *source.File, results chan<- pageResult, wg *sync.WaitGroup) { +func sourceReader(s *Site, files <-chan *source.File, results chan<- HandledResult, wg *sync.WaitGroup) { defer wg.Done() for file := range files { - // TODO: Switch here on extension - h := handlers.Handler(file.Extension()) + h := FindHandler(file.Extension()) if h != nil { - + h.Read(file, results) } else { jww.ERROR.Println("Unsupported File Type", file.Path()) } - page, err := NewPage(file.Path()) - if err != nil { - results <- pageResult{nil, err} - continue - } - page.Site = &s.Info - page.Tmpl = s.Tmpl - if err := page.ReadFrom(file.Contents); err != nil { - results <- pageResult{nil, err} - continue - } - results <- pageResult{page, nil} + // TODO: Figure out Site stuff + //page.Site = &s.Info + //page.Tmpl = s.Tmpl } } -func pageConverter(s *Site, pages <-chan *Page, results chan<- pageResult, wg *sync.WaitGroup) { +func pageConverter(s *Site, pages <-chan *Page, results HandleResults, wg *sync.WaitGroup) { defer wg.Done() for page := range pages { //Handling short codes prior to Conversion to HTML @@ -431,14 +421,14 @@ func pageConverter(s *Site, pages <-chan *Page, results chan<- pageResult, wg *s err := page.Convert() if err != nil { - results <- pageResult{nil, err} + results <- HandledResult{err: err} continue } - results <- pageResult{page, nil} + results <- HandledResult{err: err} } } -func converterCollator(s *Site, results <-chan pageResult, errs chan<- error) { +func converterCollator(s *Site, results <-chan HandledResult, errs chan<- error) { errMsgs := []string{} for r := range results { if r.err != nil { @@ -453,7 +443,7 @@ func converterCollator(s *Site, results <-chan pageResult, errs chan<- error) { errs <- fmt.Errorf("Errors rendering pages: %s", strings.Join(errMsgs, "\n")) } -func readCollator(s *Site, results <-chan pageResult, errs chan<- error) { +func readCollator(s *Site, results <-chan HandledResult, errs chan<- error) { errMsgs := []string{} for r := range results { if r.err != nil {