aboutsummaryrefslogtreecommitdiff
path: root/ciigo.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2021-04-03 04:36:37 +0700
committerShulhan <ms@kilabit.info>2021-04-03 04:40:28 +0700
commit158e76e2c1c6ae2d42ba141e87130f29da142560 (patch)
tree646d7024d0112d73145bd4cea9d916bba6baebb3 /ciigo.go
parentbabb6b16261ffa6a5931223c95316487048ce4d8 (diff)
downloadciigo-158e76e2c1c6ae2d42ba141e87130f29da142560.tar.xz
all: add option to exclude certain paths using regular expression
The ConvertOptions now has the Exclude field that can contains regular expression. If the Exclude is not empty, it will be compiled and use in Convert, Generate, Watch, and Serve; to ignore specific paths being scanned.
Diffstat (limited to 'ciigo.go')
-rw-r--r--ciigo.go78
1 files changed, 61 insertions, 17 deletions
diff --git a/ciigo.go b/ciigo.go
index bad8117..d345658 100644
--- a/ciigo.go
+++ b/ciigo.go
@@ -15,6 +15,7 @@ import (
"fmt"
"os"
"path/filepath"
+ "regexp"
"strings"
"github.com/shuLhan/share/lib/memfs"
@@ -44,19 +45,26 @@ var (
// See template_index_html.go for template format.
//
func Convert(opts *ConvertOptions) (err error) {
- logp := "Convert"
+ var (
+ logp = "Convert"
+ htmlg *htmlGenerator
+ fileMarkups map[string]*fileMarkup
+ )
if opts == nil {
opts = &ConvertOptions{}
}
- opts.init()
+ err = opts.init()
+ if err != nil {
+ return fmt.Errorf("%s: %w", logp, err)
+ }
- htmlg, err := newHTMLGenerator(nil, opts.HtmlTemplate, true)
+ htmlg, err = newHTMLGenerator(nil, opts.HtmlTemplate, true)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
- fileMarkups, err := listFileMarkups(opts.Root)
+ fileMarkups, err = listFileMarkups(opts.Root, opts.excRE)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -77,19 +85,27 @@ func Convert(opts *ConvertOptions) (err error) {
// See template_index_html.go for template format.
//
func Generate(opts *GenerateOptions) (err error) {
- logp := "Generate"
+ var (
+ logp = "Generate"
+ htmlg *htmlGenerator
+ fileMarkups map[string]*fileMarkup
+ mfs *memfs.MemFS
+ )
if opts == nil {
opts = &GenerateOptions{}
}
- opts.init()
+ err = opts.init()
+ if err != nil {
+ return fmt.Errorf("%s: %w", logp, err)
+ }
- htmlg, err := newHTMLGenerator(nil, opts.HtmlTemplate, true)
+ htmlg, err = newHTMLGenerator(nil, opts.HtmlTemplate, true)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
- fileMarkups, err := listFileMarkups(opts.Root)
+ fileMarkups, err = listFileMarkups(opts.Root, opts.excRE)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -100,7 +116,7 @@ func Generate(opts *GenerateOptions) (err error) {
Root: opts.Root,
Excludes: defExcludes,
}
- mfs, err := memfs.New(memfsOpts)
+ mfs, err = memfs.New(memfsOpts)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -134,7 +150,10 @@ func Serve(opts *ServeOptions) (err error) {
if opts == nil {
opts = &ServeOptions{}
}
- opts.init()
+ err = opts.init()
+ if err != nil {
+ return fmt.Errorf("%s: %w", logp, err)
+ }
srv, err = newServer(opts)
if err != nil {
@@ -167,14 +186,17 @@ func Watch(opts *ConvertOptions) (err error) {
if opts == nil {
opts = &ConvertOptions{}
}
- opts.init()
+ err = opts.init()
+ if err != nil {
+ return fmt.Errorf("%s: %w", logp, err)
+ }
htmlg, err = newHTMLGenerator(nil, opts.HtmlTemplate, true)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
- w, err = newWatcher(htmlg, opts.Root)
+ w, err = newWatcher(htmlg, opts.Root, opts.Exclude)
if err != nil {
return fmt.Errorf("%s: %w", logp, err)
}
@@ -195,15 +217,21 @@ func isExtensionMarkup(ext string) bool {
// listFileMarkups find any markup files inside the content directory,
// recursively.
//
-func listFileMarkups(dir string) (fileMarkups map[string]*fileMarkup, err error) {
- logp := "listFileMarkups"
+func listFileMarkups(dir string, excRE []*regexp.Regexp) (
+ fileMarkups map[string]*fileMarkup, err error,
+) {
+ var (
+ logp = "listFileMarkups"
+ d *os.File
+ fis []os.FileInfo
+ )
- d, err := os.Open(dir)
+ d, err = os.Open(dir)
if err != nil {
return nil, fmt.Errorf("%s: %w", logp, err)
}
- fis, err := d.Readdir(0)
+ fis, err = d.Readdir(0)
if err != nil {
return nil, fmt.Errorf("%s: %w", logp, err)
}
@@ -215,7 +243,7 @@ func listFileMarkups(dir string) (fileMarkups map[string]*fileMarkup, err error)
if fi.IsDir() && name[0] != '.' {
newdir := filepath.Join(dir, fi.Name())
- fmarkups, err := listFileMarkups(newdir)
+ fmarkups, err := listFileMarkups(newdir, excRE)
if err != nil {
return nil, fmt.Errorf("%s: %w", logp, err)
}
@@ -235,6 +263,10 @@ func listFileMarkups(dir string) (fileMarkups map[string]*fileMarkup, err error)
filePath := filepath.Join(dir, name)
+ if isExcluded(filePath, excRE) {
+ continue
+ }
+
fmarkup := &fileMarkup{
path: filePath,
info: fi,
@@ -249,3 +281,15 @@ func listFileMarkups(dir string) (fileMarkups map[string]*fileMarkup, err error)
return fileMarkups, nil
}
+
+func isExcluded(path string, excs []*regexp.Regexp) bool {
+ if len(excs) == 0 {
+ return false
+ }
+ for _, re := range excs {
+ if re.MatchString(path) {
+ return true
+ }
+ }
+ return false
+}