From 8bd0ffba439c1df2e98113dffbee5203fd004e6f Mon Sep 17 00:00:00 2001 From: spf13 Date: Fri, 17 Oct 2014 16:57:48 -0400 Subject: [PATCH] Initial Handler Architecture WIP --- hugolib/handlers/file.go | 20 +++++++++++++++ hugolib/handlers/handlers.go | 49 ++++++++++++++++++++++++++++++++++++ hugolib/handlers/page.go | 20 +++++++++++++++ hugolib/site.go | 8 ++++++ 4 files changed, 97 insertions(+) create mode 100644 hugolib/handlers/file.go create mode 100644 hugolib/handlers/handlers.go create mode 100644 hugolib/handlers/page.go diff --git a/hugolib/handlers/file.go b/hugolib/handlers/file.go new file mode 100644 index 000000000..d69ce063d --- /dev/null +++ b/hugolib/handlers/file.go @@ -0,0 +1,20 @@ +// 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 new file mode 100644 index 000000000..c6c24a959 --- /dev/null +++ b/hugolib/handlers/handlers.go @@ -0,0 +1,49 @@ +// 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 new file mode 100644 index 000000000..6d0545b4e --- /dev/null +++ b/hugolib/handlers/page.go @@ -0,0 +1,20 @@ +// 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/site.go b/hugolib/site.go index d24036eb3..9c96ff7c9 100644 --- a/hugolib/site.go +++ b/hugolib/site.go @@ -400,6 +400,14 @@ func (s *Site) CreatePages() error { func sourceReader(s *Site, files <-chan *source.File, results chan<- pageResult, wg *sync.WaitGroup) { defer wg.Done() for file := range files { + // TODO: Switch here on extension + h := handlers.Handler(file.Extension()) + if h != nil { + + } else { + jww.ERROR.Println("Unsupported File Type", file.Path()) + } + page, err := NewPage(file.Path()) if err != nil { results <- pageResult{nil, err}