diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-08-16 15:55:03 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-11-06 19:09:08 +0100 |
commit | 5f6b6ec68936ebbbf590894c02a1a3ecad30735f (patch) | |
tree | f6c91e225a3f24f51af1bde5cfb5b88515d0665d /markup/converter/converter.go | |
parent | 366ee4d8da1c2b0c1751e9bf6d54638439735296 (diff) |
Prepare for Goldmark
This commmit prepares for the addition of Goldmark as the new Markdown renderer in Hugo.
This introduces a new `markup` package with some common interfaces and each implementation in its own package.
See #5963
Diffstat (limited to 'markup/converter/converter.go')
-rw-r--r-- | markup/converter/converter.go | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/markup/converter/converter.go b/markup/converter/converter.go new file mode 100644 index 000000000..809efca8e --- /dev/null +++ b/markup/converter/converter.go @@ -0,0 +1,83 @@ +// Copyright 2019 The Hugo Authors. All rights reserved. +// +// Licensed under the Apache 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://www.apache.org/licenses/LICENSE-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 converter + +import ( + "github.com/gohugoio/hugo/common/loggers" + "github.com/gohugoio/hugo/config" + "github.com/spf13/afero" +) + +// ProviderConfig configures a new Provider. +type ProviderConfig struct { + Cfg config.Provider // Site config + ContentFs afero.Fs + Logger *loggers.Logger + Highlight func(code, lang, optsStr string) (string, error) +} + +// NewProvider creates converter providers. +type NewProvider interface { + New(cfg ProviderConfig) (Provider, error) +} + +// Provider creates converters. +type Provider interface { + New(ctx DocumentContext) (Converter, error) +} + +// NewConverter is an adapter that can be used as a ConverterProvider. +type NewConverter func(ctx DocumentContext) (Converter, error) + +// New creates a new Converter for the given ctx. +func (n NewConverter) New(ctx DocumentContext) (Converter, error) { + return n(ctx) +} + +// Converter wraps the Convert method that converts some markup into +// another format, e.g. Markdown to HTML. +type Converter interface { + Convert(ctx RenderContext) (Result, error) +} + +// Result represents the minimum returned from Convert. +type Result interface { + Bytes() []byte +} + +// DocumentInfo holds additional information provided by some converters. +type DocumentInfo interface { + AnchorSuffix() string +} + +// Bytes holds a byte slice and implements the Result interface. +type Bytes []byte + +// Bytes returns itself +func (b Bytes) Bytes() []byte { + return b +} + +// DocumentContext holds contextual information about the document to convert. +type DocumentContext struct { + DocumentID string + DocumentName string + ConfigOverrides map[string]interface{} +} + +// RenderContext holds contextual information about the content to render. +type RenderContext struct { + Src []byte + RenderTOC bool +} |