goveal/internal/app/rendering/reveal_params.go

89 lines
2.7 KiB
Go

// Copyright © 2019 Peter Kurfer peter.kurfer@googlemail.com
//
// 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 rendering
import (
"path"
"path/filepath"
"github.com/bmatcuk/doublestar/v2"
"github.com/imdario/mergo"
"github.com/spf13/viper"
"github.com/baez90/goveal/internal/encoding"
)
var defaultParams = RevealParams{
Theme: "white",
CodeTheme: "vs",
Transition: "None",
NavigationMode: "default",
HorizontalSeparator: "===",
VerticalSeparator: "---",
SlideNumberVisibility: "all",
SlideNumberFormat: "h.v",
StyleSheets: make([]string, 0),
FilesToMonitor: make([]string, 0),
}
type RevealParams struct {
Theme string `mapstructure:"theme"`
CodeTheme string `mapstructure:"codeTheme"`
Transition string `mapstructure:"transition"`
NavigationMode string `mapstructure:"navigationMode"`
HorizontalSeparator string `mapstructure:"horizontalSeparator"`
VerticalSeparator string `mapstructure:"verticalSeparator"`
SlideNumberVisibility string `mapstructure:"slideNumberVisibility"`
SlideNumberFormat string `mapstructure:"slideNumberFormat"`
StyleSheets []string `mapstructure:"stylesheets"`
FilesToMonitor []string `mapstructure:"filesToMonitor"`
WorkingDirectory string `mapstructure:"working-dir"`
LineEnding encoding.LineEnding `mapstructure:"-"`
}
func (params *RevealParams) Load() error {
_ = viper.Unmarshal(params)
expandGlobs(params)
return mergo.Merge(params, &defaultParams)
}
func expandGlobs(params *RevealParams) {
var allFiles []string
for _, f := range params.FilesToMonitor {
var err error
f, err = filepath.Abs(f)
if err != nil {
continue
}
var matches []string
if matches, err = doublestar.Glob(f); err != nil {
continue
}
for idx := range matches {
if relative, err := filepath.Rel(params.WorkingDirectory, matches[idx]); err != nil {
continue
} else {
matches[idx] = path.Join("/", relative)
}
}
allFiles = append(allFiles, matches...)
}
params.FilesToMonitor = allFiles
}