diff options
| author | Shulhan <ms@kilabit.info> | 2022-03-04 23:08:26 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-03-04 23:10:00 +0700 |
| commit | 09ab0af3e9f48c173fb32a7a148c6b11fc4782f4 (patch) | |
| tree | 24e2966584209bf15587c69964ae550fc745971b | |
| parent | 753642c8297e2a7ba419fef02588d36a99207101 (diff) | |
| download | ciigo-09ab0af3e9f48c173fb32a7a148c6b11fc4782f4.tar.xz | |
all: re-convert markup files if HTML template is newer on GoEmbed
Calling GoEmbed with updated HTML template will reconvert all markup
files automatically, as long as the generated Go file is older than
the HTML template file.
| -rw-r--r-- | ciigo.go | 59 | ||||
| -rw-r--r-- | cmd/ciigo-example/static.go | 35 |
2 files changed, 88 insertions, 6 deletions
@@ -12,6 +12,8 @@ package ciigo import ( "fmt" + "io/fs" + "log" "os" "path/filepath" "regexp" @@ -45,7 +47,8 @@ var ( // func Convert(opts *ConvertOptions) (err error) { var ( - logp = "Convert" + logp = "Convert" + htmlg *htmlGenerator fileMarkups map[string]*fileMarkup ) @@ -87,10 +90,12 @@ func Convert(opts *ConvertOptions) (err error) { // func GoEmbed(opts *EmbedOptions) (err error) { var ( - logp = "GoEmbed" - htmlg *htmlGenerator - fileMarkups map[string]*fileMarkup - mfs *memfs.MemFS + logp = "GoEmbed" + + htmlg *htmlGenerator + fileMarkups map[string]*fileMarkup + mfs *memfs.MemFS + convertForce bool ) if opts == nil { @@ -111,7 +116,11 @@ func GoEmbed(opts *EmbedOptions) (err error) { return fmt.Errorf("%s: %w", logp, err) } - htmlg.convertFileMarkups(fileMarkups, false) + if isHtmlTemplateNewer(opts) { + convertForce = true + } + + htmlg.convertFileMarkups(fileMarkups, convertForce) memfsOpts := &memfs.Options{ Root: opts.Root, @@ -211,6 +220,44 @@ func Watch(opts *ConvertOptions) (err error) { return nil } +// +// isHtmlTemplateNewer will return true if HtmlTemplate is not defined or +// newer than embedded GoFileName. +// +func isHtmlTemplateNewer(opts *EmbedOptions) bool { + var ( + logp = "isHtmlTemplateNewer" + + fiHtmlTmpl fs.FileInfo + fiGoEmbed fs.FileInfo + err error + ) + + if len(opts.HtmlTemplate) == 0 { + return true + } + + fiHtmlTmpl, err = os.Stat(opts.HtmlTemplate) + if err != nil { + log.Fatalf("%s: %s", logp, err) + } + + if len(opts.EmbedOptions.GoFileName) == 0 { + // No output file for GoEmbed. + return false + } + + fiGoEmbed, err = os.Stat(opts.EmbedOptions.GoFileName) + if err != nil { + if os.IsNotExist(err) { + return false + } + log.Fatalf("%s: %s", logp, err) + } + + return fiHtmlTmpl.ModTime().After(fiGoEmbed.ModTime()) +} + func isExtensionMarkup(ext string) bool { return ext == extAsciidoc } diff --git a/cmd/ciigo-example/static.go b/cmd/ciigo-example/static.go index 9941480..b63a4cd 100644 --- a/cmd/ciigo-example/static.go +++ b/cmd/ciigo-example/static.go @@ -26,6 +26,7 @@ func generate__example() *memfs.Node { node.AddChild(_ciigoFS_getNode(ciigoFS, "/index.css", generate__example_index_css)) node.AddChild(_ciigoFS_getNode(ciigoFS, "/index.html", generate__example_index_html)) node.AddChild(_ciigoFS_getNode(ciigoFS, "/sub", generate__example_sub)) + node.AddChild(_ciigoFS_getNode(ciigoFS, "_internal", generate__internal)) return node } @@ -149,6 +150,36 @@ func generate__example_sub_index_html() *memfs.Node { return node } +func generate__internal() *memfs.Node { + node := &memfs.Node{ + SysPath: "_internal", + Path: "_internal", + ContentType: "", + GenFuncName: "generate__internal", + } + node.SetMode(2147483648) + node.SetModTimeUnix(-62135596800, 0) + node.SetName("_internal") + node.SetSize(0) + node.AddChild(_ciigoFS_getNode(ciigoFS, "_internal/.template", generate__internal__template)) + return node +} + +func generate__internal__template() *memfs.Node { + node := &memfs.Node{ + SysPath: "_example/html.tmpl", + Path: "_internal/.template", + ContentType: "text/plain; charset=utf-8", + GenFuncName: "generate__internal__template", + Content: []byte("\x3C\x21\x2D\x2D\x0A\x2F\x2F\x20\x53\x50\x44\x58\x2D\x46\x69\x6C\x65\x43\x6F\x70\x79\x72\x69\x67\x68\x74\x54\x65\x78\x74\x3A\x20\x32\x30\x32\x30\x20\x53\x68\x75\x6C\x68\x61\x6E\x20\x3C\x6D\x73\x40\x6B\x69\x6C\x61\x62\x69\x74\x2E\x69\x6E\x66\x6F\x3E\x0A\x2F\x2F\x20\x53\x50\x44\x58\x2D\x4C\x69\x63\x65\x6E\x73\x65\x2D\x49\x64\x65\x6E\x74\x69\x66\x69\x65\x72\x3A\x20\x47\x50\x4C\x2D\x33\x2E\x30\x2D\x6F\x72\x2D\x6C\x61\x74\x65\x72\x0A\x2D\x2D\x21\x3E\x0A\x3C\x21\x44\x4F\x43\x54\x59\x50\x45\x20\x68\x74\x6D\x6C\x3E\x0A\x3C\x68\x74\x6D\x6C\x3E\x0A\x09\x3C\x68\x65\x61\x64\x3E\x0A\x09\x09\x3C\x6D\x65\x74\x61\x20\x68\x74\x74\x70\x2D\x65\x71\x75\x69\x76\x3D\x22\x43\x6F\x6E\x74\x65\x6E\x74\x2D\x54\x79\x70\x65\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x74\x65\x78\x74\x2F\x68\x74\x6D\x6C\x3B\x20\x63\x68\x61\x72\x73\x65\x74\x3D\x75\x74\x66\x2D\x38\x22\x20\x2F\x3E\x0A\x09\x09\x3C\x6D\x65\x74\x61\x20\x6E\x61\x6D\x65\x3D\x22\x76\x69\x65\x77\x70\x6F\x72\x74\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x77\x69\x64\x74\x68\x3D\x64\x65\x76\x69\x63\x65\x2D\x77\x69\x64\x74\x68\x2C\x20\x69\x6E\x69\x74\x69\x61\x6C\x2D\x73\x63\x61\x6C\x65\x3D\x31\x22\x20\x2F\x3E\x0A\x09\x09\x3C\x6D\x65\x74\x61\x20\x6E\x61\x6D\x65\x3D\x22\x74\x68\x65\x6D\x65\x2D\x63\x6F\x6C\x6F\x72\x22\x20\x63\x6F\x6E\x74\x65\x6E\x74\x3D\x22\x23\x33\x37\x35\x45\x41\x42\x22\x20\x2F\x3E\x0A\x0A\x09\x09\x3C\x74\x69\x74\x6C\x65\x3E\x7B\x7B\x2E\x54\x69\x74\x6C\x65\x7D\x7D\x3C\x2F\x74\x69\x74\x6C\x65\x3E\x0A\x09\x09\x3C\x6C\x69\x6E\x6B\x20\x72\x65\x6C\x3D\x22\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x22\x20\x68\x72\x65\x66\x3D\x22\x2F\x69\x6E\x64\x65\x78\x2E\x63\x73\x73\x22\x20\x2F\x3E\x0A\x09\x09\x7B\x7B\x2D\x20\x72\x61\x6E\x67\x65\x20\x2E\x53\x74\x79\x6C\x65\x73\x7D\x7D\x0A\x09\x09\x3C\x6C\x69\x6E\x6B\x20\x72\x65\x6C\x3D\x22\x73\x74\x79\x6C\x65\x73\x68\x65\x65\x74\x22\x20\x68\x72\x65\x66\x3D\x22\x7B\x7B\x2E\x7D\x7D\x22\x20\x2F\x3E\x0A\x09\x09\x7B\x7B\x2D\x20\x65\x6E\x64\x7D\x7D\x0A\x09\x3C\x2F\x68\x65\x61\x64\x3E\x0A\x09\x3C\x62\x6F\x64\x79\x3E\x0A\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x6F\x70\x62\x61\x72\x22\x3E\x0A\x09\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x22\x3E\x0A\x09\x09\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x74\x6F\x70\x2D\x68\x65\x61\x64\x69\x6E\x67\x22\x3E\x0A\x09\x09\x09\x09\x09\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x22\x3E\x63\x69\x69\x67\x6F\x3C\x2F\x61\x3E\x0A\x09\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x6D\x65\x6E\x75\x22\x3E\x0A\x09\x09\x09\x09\x09\x3C\x66\x6F\x72\x6D\x20\x63\x6C\x61\x73\x73\x3D\x22\x69\x74\x65\x6D\x22\x20\x61\x63\x74\x69\x6F\x6E\x3D\x22\x2F\x5F\x69\x6E\x74\x65\x72\x6E\x61\x6C\x2F\x73\x65\x61\x72\x63\x68\x22\x3E\x0A\x09\x09\x09\x09\x09\x09\x3C\x69\x6E\x70\x75\x74\x20\x74\x79\x70\x65\x3D\x22\x74\x65\x78\x74\x22\x20\x6E\x61\x6D\x65\x3D\x22\x71\x22\x20\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72\x3D\x22\x53\x65\x61\x72\x63\x68\x22\x20\x2F\x3E\x0A\x09\x09\x09\x09\x09\x3C\x2F\x66\x6F\x72\x6D\x3E\x0A\x09\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x6D\x65\x6E\x75\x22\x3E\x0A\x09\x09\x09\x09\x09\x3C\x61\x20\x68\x72\x65\x66\x3D\x22\x2F\x73\x75\x62\x22\x3E\x53\x75\x62\x3C\x2F\x61\x3E\x0A\x09\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x0A\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x70\x61\x67\x65\x22\x3E\x0A\x09\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x22\x3E\x0A\x09\x09\x09\x09\x7B\x7B\x2E\x42\x6F\x64\x79\x7D\x7D\x0A\x09\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x09\x3C\x21\x2D\x2D\x20\x2E\x63\x6F\x6E\x74\x61\x69\x6E\x65\x72\x20\x2D\x2D\x3E\x0A\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x09\x3C\x21\x2D\x2D\x20\x2E\x70\x61\x67\x65\x20\x2D\x2D\x3E\x0A\x0A\x09\x09\x3C\x64\x69\x76\x20\x63\x6C\x61\x73\x73\x3D\x22\x66\x6F\x6F\x74\x65\x72\x22\x3E\x0A\x09\x09\x09\x50\x6F\x77\x65\x72\x65\x64\x20\x62\x79\x20\x3C\x61\x0A\x09\x09\x09\x09\x68\x72\x65\x66\x3D\x22\x68\x74\x74\x70\x73\x3A\x2F\x2F\x73\x72\x2E\x68\x74\x2F\x7E\x73\x68\x75\x6C\x68\x61\x6E\x2F\x63\x69\x69\x67\x6F\x22\x0A\x09\x09\x09\x3E\x0A\x09\x09\x09\x09\x63\x69\x69\x67\x6F\x0A\x09\x09\x09\x3C\x2F\x61\x3E\x0A\x09\x09\x3C\x2F\x64\x69\x76\x3E\x0A\x09\x3C\x2F\x62\x6F\x64\x79\x3E\x0A\x3C\x2F\x68\x74\x6D\x6C\x3E\x0A"), + } + node.SetMode(420) + node.SetModTimeUnix(1646153539, 855679767) + node.SetName(".template") + node.SetSize(1112) + return node +} + // // _ciigoFS_getNode is internal function to minimize duplicate node // created on Node.AddChild() and on generatedPathNode.Set(). @@ -202,6 +233,10 @@ func init() { _ciigoFS_getNode(ciigoFS, "/sub", generate__example_sub)) ciigoFS.PathNodes.Set("/sub/index.html", _ciigoFS_getNode(ciigoFS, "/sub/index.html", generate__example_sub_index_html)) + ciigoFS.PathNodes.Set("_internal", + _ciigoFS_getNode(ciigoFS, "_internal", generate__internal)) + ciigoFS.PathNodes.Set("_internal/.template", + _ciigoFS_getNode(ciigoFS, "_internal/.template", generate__internal__template)) ciigoFS.Root = ciigoFS.PathNodes.Get("/") } |
