Browse Source

Initial release

master
Jason T. Lenz 1 year ago
commit
1cbc0caf8d
  1. 3
      .gitignore
  2. 24
      LICENSE
  3. 70
      Makefile
  4. 83
      Makefile.bsd
  5. 70
      Makefile.gnu
  6. 161
      README.md
  7. 1
      cogit-files.txt
  8. 16
      configure
  9. BIN
      screen_shot.png
  10. 36
      src/about/index.got
  11. 38
      src/contact/index.got
  12. 374
      src/copyright/index.got
  13. 79
      src/css/style.css.cpy
  14. 1
      src/favicon.svg.cpy
  15. 8
      src/inc/global.igot
  16. 9
      src/inc/globalPage.igot
  17. 34
      src/inc/pageBegin.igot
  18. 12
      src/inc/pageEnd.igot
  19. 55
      src/index.got
  20. 1
      src/post/mauris_elementum/computer.svg.cpy
  21. 63
      src/post/mauris_elementum/index.got
  22. 1
      src/post/nulla_porttitor_tellus/elephant.svg.cpy
  23. 56
      src/post/nulla_porttitor_tellus/index.got
  24. 54
      src/post/pellentesque/index.got
  25. 1
      src/post/pellentesque/rhino.svg.cpy
  26. 38
      src/source/index.got
  27. 60
      src/topic/index.got
  28. 18
      template/README.md
  29. 155
      template/README.md.got
  30. 14
      template/regen-files.sh

3
.gitignore

@ -0,0 +1,3 @@
bld
*.tmp
*.raw

24
LICENSE

@ -0,0 +1,24 @@
Copyright (c) 2020 Jason T. Lenz. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

70
Makefile

@ -0,0 +1,70 @@
.SUFFIXES:
MYSERVER=my.blog.site
PGOT-LOC=pgot -i ":src/inc" -d '{"siteurl":"$(shell pwd)/bld/loc","dfile":"index.html"}'
PGOT-PUB=pgot -i ":src/inc" -d '{"siteurl":"https://$(MYSERVER)","dfile":""}'
CHUF=chuf '|||md+' '|||md-' markdown
INC=$(shell find src -type f -name '*.igot')
GOT=$(shell find src -type f -name '*.got')
RAW=$(shell find -L src -type f -name '*.raw')
CPY=$(shell find -L src -type f -name '*.cpy')
all loc: $(RAW:src/%.raw=bld/loc/%) \
$(CPY:src/%.cpy=bld/loc/%) \
$(GOT:src/%.got=bld/loc/%.html)
pub: $(RAW:src/%.raw=bld/pub/%) \
$(CPY:src/%.cpy=bld/pub/%) \
$(GOT:src/%.got=bld/pub/%.html)
bld/loc/% bld/pub/%: src/%.raw
@mkdir -p $(@D)
@echo "raw -> $@"
@cp $< $@
bld/loc/% bld/pub/%: src/%.cpy
@mkdir -p $(@D)
@echo "cpy -> $@"
@cp $< $@
bld/loc/%.html: src/%.got $(INC)
@mkdir -p $(@D)
@echo "pgot -> $@"
@$(PGOT-LOC) $< | $(CHUF) > $@
bld/pub/%.html: src/%.got $(INC)
@mkdir -p $(@D)
@echo "pgot -> $@"
@$(PGOT-PUB) $< | $(CHUF) > $@
cogit: bld/cogit.tar cogit-files.txt
@ echo "Moving cogit tarball to release folder"
mkdir -p ../makeht-release
mv bld/cogit.tar ../makeht-release/makeht-cogit-$(shell date +"%Y-%m-%d").tar
CGTMP=cg.tmp
CGSRT=cgsrt.tmp
bld/cogit.tar: $(CGSRT)
@mkdir -p $(@D)
@echo "generating $@"
@tar -T $< -cf $@
cogit-files.txt: $(CGSRT)
@echo "generating $@"
@while read CGFILE; do sha256sum -b "$$CGFILE"; done < $< > $@
$(CGSRT): $(RAW)
@find src -type f -name '*.raw' > $(CGTMP)
@sort < $(CGTMP) > $@
@rm -f $(CGTMP)
clean:
rm -Rf bld *.tmp
lint: loc
@grep -n -r '<no value>' bld/loc/ || true
.PHONY: all loc pub clean lint

83
Makefile.bsd

@ -0,0 +1,83 @@
.SUFFIXES:
MYSERVER=my.blog.site
PGOT-LOC=pgot -i ":src/inc" -d '{"siteurl":"$(.CURDIR)/bld/loc","dfile":"index.html"}'
PGOT-PUB=pgot -i ":src/inc" -d '{"siteurl":"https://$(MYSERVER)","dfile":""}'
CHUF=chuf '|||md+' '|||md-' markdown
INC!=find src -type f -name '*.igot'
GOTS!=find src -type f -name '*.got'
GOTL:=$(GOTS:src/%.got=bld/loc/%.html)
GOTP:=$(GOTS:src/%.got=bld/pub/%.html)
RAWS!=find -L src -type f -name '*.raw'
RAWL:=$(RAWS:src/%.raw=bld/loc/%)
RAWP:=$(RAWS:src/%.raw=bld/pub/%)
CPYS!=find -L src -type f -name '*.cpy'
CPYL:=$(CPYS:src/%.cpy=bld/loc/%)
CPYP:=$(CPYS:src/%.cpy=bld/pub/%)
all loc: $(RAWL) $(CPYL) $(GOTL)
pub: $(RAWP) $(CPYP) $(GOTP)
$(RAWL): $(@:bld/loc/%=src/%.raw)
@mkdir -p $(@D)
@echo "raw -> $@"
@cp $? $@
$(RAWP): $(@:bld/pub/%=src/%.raw)
@mkdir -p $(@D)
@echo "raw -> $@"
@cp $? $@
$(CPYL): $(@:bld/loc/%=src/%.cpy)
@mkdir -p $(@D)
@echo "cpy -> $@"
@cp $? $@
$(CPYP): $(@:bld/pub/%=src/%.cpy)
@mkdir -p $(@D)
@echo "cpy -> $@"
@cp $? $@
$(GOTL): $(@:bld/loc/%.html=src/%.got) $(INC)
@mkdir -p $(@D)
@echo "got -> $@"
@$(PGOT-LOC) $? | $(CHUF) > $@
$(GOTP): $(@:bld/pub/%.html=src/%.got) $(INC)
@mkdir -p $(@D)
@echo "pgot -> $@"
@$(PGOT-PUB) $? | $(CHUF) > $@
cogit: bld/cogit.tar cogit-files.txt
@ echo "Moving cogit tarball to release folder"
mkdir -p ../makeht-release
mv bld/cogit.tar ../makeht-release/makeht-cogit-$(shell date +"%Y-%m-%d").tar
CGTMP=cg.tmp
CGSRT=cgsrt.tmp
bld/cogit.tar: $(CGSRT)
@mkdir -p $(@D)
@echo "generating $@"
@tar -T $< -cf $@
cogit-files.txt: $(CGSRT)
@echo "generating $@"
@while read CGFILE; do sha256sum -b "$$CGFILE"; done < $< > $@
$(CGSRT): $(RAW)
@find src -type f -name '*.raw' > $(CGTMP)
@sort < $(CGTMP) > $@
@rm -f $(CGTMP)
clean:
rm -Rf bld *.tmp
lint: loc
@grep -n -r '<no value>' bld/loc/ || true
.PHONY: all loc pub clean lint

70
Makefile.gnu

@ -0,0 +1,70 @@
.SUFFIXES:
MYSERVER=my.blog.site
PGOT-LOC=pgot -i ":src/inc" -d '{"siteurl":"$(shell pwd)/bld/loc","dfile":"index.html"}'
PGOT-PUB=pgot -i ":src/inc" -d '{"siteurl":"https://$(MYSERVER)","dfile":""}'
CHUF=chuf '|||md+' '|||md-' markdown
INC=$(shell find src -type f -name '*.igot')
GOT=$(shell find src -type f -name '*.got')
RAW=$(shell find -L src -type f -name '*.raw')
CPY=$(shell find -L src -type f -name '*.cpy')
all loc: $(RAW:src/%.raw=bld/loc/%) \
$(CPY:src/%.cpy=bld/loc/%) \
$(GOT:src/%.got=bld/loc/%.html)
pub: $(RAW:src/%.raw=bld/pub/%) \
$(CPY:src/%.cpy=bld/pub/%) \
$(GOT:src/%.got=bld/pub/%.html)
bld/loc/% bld/pub/%: src/%.raw
@mkdir -p $(@D)
@echo "raw -> $@"
@cp $< $@
bld/loc/% bld/pub/%: src/%.cpy
@mkdir -p $(@D)
@echo "cpy -> $@"
@cp $< $@
bld/loc/%.html: src/%.got $(INC)
@mkdir -p $(@D)
@echo "pgot -> $@"
@$(PGOT-LOC) $< | $(CHUF) > $@
bld/pub/%.html: src/%.got $(INC)
@mkdir -p $(@D)
@echo "pgot -> $@"
@$(PGOT-PUB) $< | $(CHUF) > $@
cogit: bld/cogit.tar cogit-files.txt
@ echo "Moving cogit tarball to release folder"
mkdir -p ../makeht-release
mv bld/cogit.tar ../makeht-release/makeht-cogit-$(shell date +"%Y-%m-%d").tar
CGTMP=cg.tmp
CGSRT=cgsrt.tmp
bld/cogit.tar: $(CGSRT)
@mkdir -p $(@D)
@echo "generating $@"
@tar -T $< -cf $@
cogit-files.txt: $(CGSRT)
@echo "generating $@"
@while read CGFILE; do sha256sum -b "$$CGFILE"; done < $< > $@
$(CGSRT): $(RAW)
@find src -type f -name '*.raw' > $(CGTMP)
@sort < $(CGTMP) > $@
@rm -f $(CGTMP)
clean:
rm -Rf bld *.tmp
lint: loc
@grep -n -r '<no value>' bld/loc/ || true
.PHONY: all loc pub clean lint

161
README.md

@ -0,0 +1,161 @@
# makeht
This is a makefile based static website generator. Files are authored in the
"src" subdirectory using a standard text editor with markdown or html a
desired. A template processor is also used which enables standard page header,
footers, and other common information across various web pages.
The makefile is set up to recognize and process files based on their filename
extension. The following file types are currently handled:
* .got - These are the primary content files which are translated into html.
These are golang template files for processing by the
[pgot](https://git.lenzplace.org/lenzj/pgot) utility. The file types that follow are typically
referred to within these .got files.
* .igot - These are intended to be "included" in the frontmatter section of the
.got files above and typically contain global variables or content to
standardize across web pages.
* .cpy - Files intended to be copied over directly into the build directory
without any type of translation. The cpy file extension is removed in the
process.
* .raw - Raw files are binary files that are not stored efficiently within git.
These are the only content files that are ignored by git and are handled
separately using the [cogit](#cogit) methodology described below. These are
copied directly into the build directory with the raw file extension removed.
Note that folders are only created in the build directory if they contain
content files. Case in point, the "inc" folder within the "src" directory is
not mirrored into the "bld" folder because it only contains igot files. Since
igot files are by definition only included in other got files they do not
create content on their own and as such the inc folder does not need to be
created in the corresponding "bld" directory.
Once files have been authored, these are mirrored and transformed into final
html in the "bld" subdirectory. The user can make a local version using the
following command in order to browse and confirm content/appearance using a
standard web browser. The generated files are stored in the "bld/loc" sub
folder.
$ make loc
Once satisfied with the results the user can then make a public version using
the following command. The files are similarly stored in the "bld/pub" sub
folder.
$ make pub
The files in the "bld/pub" folder can be copied to the destination server
address using scp, rsync, etc.
## Installing
To install, clone the git repository and ensure you have the
[dependencies](#dependencies) in the section below installed.
In addition you will need to download the latest "cogit" file set from the
[release](https://git.lenzplace.org/lenzj/makeht/releases) folder. This is a tar archive containing
any images or video etc. used by this website. See the [cogit](#cogit) section
below for more background info. There is currently only one file in the makeht
cogit archive, and it is mainly included to demonstrate the cogit method. From
within the main git repository you can then extract the tar archive as follows
(assuming the downloaded cogit tar archive is in your ~/Download folder) and it
will populate the cogit files into the "src" directory.
$ tar -xf ~/Download/makeht-cogit-20XX-XX-XX.tar
You should then execute the configure script which selects the appropriate
Makefile version depending on which operating system you are using (linux or
bsd).
$ ./configure
You should edit the following line near the top of the Makefile to match the
public server address that you plan to use.
MYSERVER=my.blog.site
You can then either edit / create files directly in the "src" sub folder in the
repository or alternately copy all the files in the git repository to a
separate folder or repository of your choice. The src sub folder currently
contains a skeleton blog site with placeholder information that you can edit as
a starting point or alternately wipe it clean and start with your own format.
A screen shot of the skeleton blog is shown below.
![](screen_shot.png "screen shot")
Lastly, you can then execute "make loc" to generate a local set of files that
you can browse with your default web browser.
$ make loc
$ xdg-open bld/loc/index.html
## Dependencies
+ __make__ (any posix compliant make utility) Used to identify items that have
changed and convert those into final html files for a website using the tools
above.
+ __pgot__ (https://git.lenzplace.org/lenzj/pgot) A template processing tool
written in golang.
+ __chuf__ (https://git.lenzplace.org/lenzj/chuf) An inline chunk filtering
tool written in golang (used to select sections for markdown processing).
+ __markdown__ I use discount as the markdown processor.
<http://www.pell.portland.or.us/~orc/Code/discount/>
+ __unix utilities__ The following standard unix utilities are needed and
should be available in most linux/bsd default installations: find, tar, grep,
sort, sha256sum
## Folder structure
This can be created as desired. One recommended folder layout is as follows:
```text
+- Makefile
+- src : All templates and source text files are in this folder.
| +- css : html cascading style sheets
| +- inc : These are .igot templates that are included or referenced by
| individual content pages in src. Global variables can be defined
| here etc.
| +- topic1 : Website topics are stored in different sub folders.
| +- topic2 : etc. ...
+- bld : All output is written to this folder.
| +- loc : This folder is generated with "make loc", and can be viewed with
| a standard web browser.
| +- pub : This folder contains files which are intended for the public web
| server. These files can be directly copied to the server.
+- template : You can safely ignore this folder unless you want to update the
README or LICENSE files. Further detail is in the folder.
```
## Cogit
Websites typically have a variety of raw binary data files including images,
video, icons, etc. Git works exceptionally well for text files, but is not a
good tool for storing these types of binary files. The git LFS system has been
developed to handle this situation, however a specialized LFS server is needed.
An alternate strategy is used here which I am calling "cogit" (raw binary files
cohabitating with git). The .gitignore file specifies the raw files and/or
folders to be ignored by git. The Makefile generates a manifest text file
containing lines with a sha256sum first followed by the sub path/name for each
raw binary file. The manifest is tracked in git so that the even though the
raw files are not stored in git the user can determine exactly which set of raw
files is associated with each commit. A tarball containing the raw files can
be created and stored separately from the git respository.
## Contributing
If you have a bugfix, update, issue or feature enhancement the best way to reach
me is by following the instructions in the link below. Thank you!
<https://blog.lenzplace.org/contact>
## Versioning
I follow the [SemVer](http://semver.org/) strategy for versioning. The latest
version is listed in the [releases](/lenzj/makeht/releases) section.
## License
This project is licensed under a BSD two clause license - see the
[LICENSE](LICENSE) file for details.

1
cogit-files.txt

@ -0,0 +1 @@
17ca76c51b24273a00819a632e473a285a14eeafdabc2a368c14423fd43e4fbb *src/about/profile.png.raw

16
configure

@ -0,0 +1,16 @@
#!/bin/sh
echo -n "Setting up Makefile"
case $(uname | tr '[:upper:]' '[:lower:]') in
linux*)
echo " for Linux"
cp Makefile.gnu Makefile
;;
openbsd*)
echo " for OpenBSD"
cp Makefile.bsd Makefile
;;
*)
echo " ... Failed! Unknown OS!"
exit 1
;;
esac

BIN
screen_shot.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

36
src/about/index.got

@ -0,0 +1,36 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "About",
"description" : "Some things about me and this website.",
"cdate" : "2020-05-14",
"tag" : "about"
}
;;;
{{template "pageBegin" . -}}
|||md+
![](profile.png =200x "profile picture")
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque massa
ante, rhoncus sit amet dolor sit amet, vehicula sagittis quam. In ac neque
suscipit, elementum sem sit amet, faucibus nibh. Curabitur tincidunt nulla
tincidunt eros dignissim semper. Etiam eget ante non nisi scelerisque tristique
eget ac ipsum. Nullam feugiat at est quis faucibus. Ut posuere finibus elit quis
lacinia. Aenean auctor hendrerit massa, at rhoncus nisl tristique cursus. Ut
venenatis aliquet diam, a pharetra ex facilisis at. Proin ultrices libero id
risus ultricies pretium.
Ut feugiat mauris et libero cursus ornare. Vivamus ante diam, pulvinar sit amet
massa ut, ullamcorper sagittis neque. Pellentesque facilisis accumsan risus id
tempor. Integer tincidunt libero in justo pulvinar, non volutpat elit viverra.
Aliquam nec leo pharetra, accumsan nibh eu, dapibus elit. Ut rhoncus, nisi ut
maximus facilisis, lacus sem dignissim ex, sit amet euismod dolor elit id magna.
Curabitur ipsum mauris, varius vel semper eu, volutpat et nisi. Integer ex dui,
dapibus vitae fermentum tristique, mattis vitae nisi. Mauris eget ante vel
mauris molestie luctus. Etiam iaculis ex at mauris pharetra, ac elementum dui
euismod. Nulla facilisi. Integer tincidunt varius erat eu viverra. Duis
fermentum urna sit amet magna condimentum eleifend. Nulla ut ante semper,
finibus nulla tristique, finibus justo.
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

38
src/contact/index.got

@ -0,0 +1,38 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Contact",
"description" : "You can contact me using one of the methods below.",
"cdate" : "2020-05-20",
"tag" : "contact,email"
}
;;;
{{template "pageBegin" . -}}
|||md+
The best way to reach me is via email: my.email@host.com.
If you would like to report a software bug, submit a patch or otherwise
collaborate on software please use one of the methods below:
### File a bug or request a feature
If you've found a bug or issue in one of the applications in the
[git repository]({{.giturl}}), or you have a question or feature request for an
application the best way to let me know is to file an issue on the associated
repository page. You will need to create a user account if you haven't already
done so.
### Submit a pull request
Better yet if you have a fix or upgrade for a package you can fork the repository
and submit a pull request to merge your updates.
### Alternatives
If the above options aren't feasible, you can simply email me with a description
of the problem or attach a patch file, etc.
Thank you!
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

374
src/copyright/index.got

@ -0,0 +1,374 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Copyright",
"description" : "Copyright terms for content on this website.",
"cdate" : "2020-05-20",
"tag" : "copyright,creative commons,cc by 4.0"
}
;;;
{{template "pageBegin" . -}}
|||md+
# Human Readable Summary
Attribution 4.0 International (CC BY 4.0)
This first section is a human-readable summary of (and not a substitute for)
the formal [license](#license) further below.
### You are free to:
**Share** - copy and redistribute the material in any medium or format
**Adapt** - remix, transform, and build upon the material for any purpose, even
commercially.
I cannot revoke these freedoms as long as you follow the license terms below.
### Under the following terms:
**Attribution** - You must give appropriate credit, provide a link to the
license, and indicate if changes were made. You may do so in any reasonable
manner, but not in any way that suggests that I endorse you.
**No additional restrictions** - You may not apply legal terms or technological
measures that legally restrict others from doing anything the license permits.
### Notices:
You do not have to comply with the license for elements of the material in the
public domain or where your use is permitted by an applicable exception or
limitation.
No warranties are given. The license may not give you all of the permissions
necessary for your intended use. For example, other rights such as publicity,
privacy, or moral rights may limit how you use the material.
# Formal License<a name="license"></a>
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution 4.0 International Public License ("Public License"). To the
extent this Public License may be interpreted as a contract, You are
granted the Licensed Rights in consideration of Your acceptance of
these terms and conditions, and the Licensor grants You such rights in
consideration of benefits the Licensor receives from making the
Licensed Material available under these terms and conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
d. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
g. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
i. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
j. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
k. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's
License You apply must not prevent recipients of the Adapted
Material from complying with this Public License.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
# Sources:
This page was derived in large part from:
<https://creativecommons.org/licenses/by/4.0>
<https://creativecommons.org/licenses/by/4.0/legalcode.txt>
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

79
src/css/style.css.cpy

@ -0,0 +1,79 @@
body {
margin: 0 auto;
padding: 0 0.5rem;
max-width: 45rem;
float: none;
text-align: left;
}
ul.navbar {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
border-bottom-style: solid;
border-width: 0.1rem;
}
ul.navbar li a {
display: block;
text-align: center;
padding: 0.4rem 0.4rem;
text-decoration: none;
border-left-style: dotted;
border-width: 0.1rem;
border-radius: 0.7rem;
}
ul.navbar li { float: left; }
ul.navbar li.right { float: right; }
header {
border-bottom-style: solid;
border-width: 0.1rem;
}
header img { float:right; }
header p.end { clear:right; }
header h1,
header p { margin: 0.7rem 0; }
img {
max-width: 90%;
height: auto;
display: block;
margin-left: auto;
margin-right: auto;
}
img.half {
max-width: 44%;
display: inline-block;
padding: 0.25rem;
}
code {
background-color: lightgrey;
border: 0.1rem solid;
display: block;
overflow-x: auto;
padding: 0.5rem;
word-wrap: normal;
}
footer {
border-top-style: solid;
border-width: 0.1rem;
margin: 0.5rem auto;
}
@media print {
img {
break-before: auto;
break-after: auto;
break-inside: avoid;
}
}

1
src/favicon.svg.cpy

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.2 KiB

8
src/inc/global.igot

@ -0,0 +1,8 @@
;;;
{
"lang" : "en",
"copyright" : "2020",
"author" : "Firstname Lastname",
"giturl" : "https://my.git.repository"
}
;;;

9
src/inc/globalPage.igot

@ -0,0 +1,9 @@
;;;
{
"pgotInclude":[
"global.igot",
"pageBegin.igot",
"pageEnd.igot"
]
}
;;;

34
src/inc/pageBegin.igot

@ -0,0 +1,34 @@
;;;
;;;
<!DOCTYPE html>
<html lang="{{.lang}}">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width">
{{if .tag}}<meta name="keywords" content="{{.tag}}">{{end}}
<meta name="description" content="{{.description}}">
<meta name="author" content="{{.author}}">
<title>{{.title}}</title>
<link rel="stylesheet" href="{{.siteurl}}/css/style.css" type="text/css">
<link rel="icon" href="{{.siteurl}}/favicon.svg" type="image/svg+xml">
</head>
<body>
<ul class="navbar">
<li><a href="{{.siteurl}}/{{.dfile}}">Home</a></li>
<li><a href="{{.siteurl}}/topic/{{.dfile}}">Topics</a></li>
<li class="right"><a href="{{.siteurl}}/contact/{{.dfile}}">Contact</a></li>
<li class="right"><a href="{{.siteurl}}/about/{{.dfile}}">About</a></li>
<li class="right"><a href="{{.siteurl}}/source/{{.dfile}}">Source</a></li>
</ul>
<article>
<header>
<a href="{{.siteurl}}/{{.dfile}}"><img src="{{.siteurl}}/favicon.svg" width="60"></a>
<h1>{{.title}}</h1>
<p>{{.description}}</p>
<p class="end">
{{if .udate}}{{.udate}} / {{end}}{{.cdate}}
{{if .category}}- <i>cat</i>: {{.category}}{{end}}
{{if .tag}}- <i>tag</i>: {{.tag}}{{end}}
</p>
</header>
{{- /* vim:set noet tw=80: */ -}}

12
src/inc/pageEnd.igot

@ -0,0 +1,12 @@
;;;
;;;
<footer>
<p>
<span style="float:left;">Made with <a href="https://git.lenzplace.org/lenzj/makeht">makeht</a></span>
<span style="float:right;"><a href="{{.siteurl}}/copyright/{{.dfile}}">Copyright</a> &copy; {{.copyright}} {{.author}}</span>
</p>
</footer>
</article>
</body>
</html>
{{- /* vim:set noet tw=80: */ -}}

55
src/index.got

@ -0,0 +1,55 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "MyBlog",
"description" : "Thoughts and projects relating to x, y, z.",
"cdate" : "2020-05-20",
"posts" : [
{ "title": "Pellentesque eleifend",
"path": "post/pellentesque",
"thumb": "rhino.svg",
"description": "Nulla feugiat arcu in ante.",
"date": "2020-05-20",
"category": "efficitur",
"tag": "commodo,lectus"
},
{ "title": "Mauris elementum eros a justo",
"path": "post/mauris_elementum",
"thumb": "computer.svg",
"description": "Maecenas sodales augue id pulvinar.",
"date": "2019-11-03",
"category": "porta",
"tag": "turpis"
},
{ "title": "Nulla porttitor tellus ut leo",
"path": "post/nulla_porttitor_tellus",
"thumb": "elephant.svg",
"description": "Duis justo tortor, consequat a.",
"date": "2018-08-24",
"category": "efficitur",
"tag": "commodo,turpis"
}
]
}
;;;
{{template "pageBegin" . -}}
<p></p>
<table>
{{range .posts -}}
<tr>
<td>
<a href="{{.path}}/{{$.dfile}}">
<img src="{{.path}}/{{.thumb}}" width="80"></a>
</td>
<td>
<a href="{{.path}}/{{$.dfile}}">
<p><b>{{.title}}</b></p></a>
<p><i>{{.date}}</i> - {{.description}}</p>
<p><i>cat:</i>{{.category}} - <i>tag:</i>{{.tag}}</p>
</td>
</tr>
{{end -}}
</table>
<p></p>
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

1
src/post/mauris_elementum/computer.svg.cpy

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.2 KiB

63
src/post/mauris_elementum/index.got

@ -0,0 +1,63 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Mauris elementum eros a justo",
"description" : "maecenas sodales augue id pulvinar.",
"cdate" : "2019-11-03",
"category" : "porta",
"tag" : "turpis"
}
;;;
{{template "pageBegin" . -}}
|||md+
## Lorem ipsum dolor
Sit amet, consectetur adipiscing elit. Vivamus eu malesuada augue, vehicula
bibendum quam. Duis sit amet varius quam. Pellentesque ut quam ipsum. Etiam
tortor massa, tempus a semper ac, mattis eget risus. Cras nec malesuada ipsum.
Vivamus semper dui sit amet tristique consectetur. Nam quis mi volutpat, aliquam
augue ut, varius arcu. Maecenas tempor accumsan metus id rhoncus. In
sollicitudin purus ut urna aliquet, ac vehicula nulla faucibus. Phasellus
mollis faucibus nibh sit amet sagittis.
// Parse command line
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(),
"Usage: %s [OPTION]... [FILE]...\n"+
"Process a got (golang template) file and send transformed text to output.\n"+
"Options:\n", appName)
flag.PrintDefaults()
}
var oflag = flag.String("o", "-", "output `file` path")
var iflag = flag.String("i", "", "colon separated list of `paths` to search with pgotInclude")
var dflag = flag.String("d", "", "string of json frontmatter to include")
var vflag = flag.Bool("v", false, "display "+appName+" version")
##Maecenas mollis
Egestas tincidunt. Sed id pellentesque est. Phasellus viverra, risus nec gravida
consectetur, ex lorem molestie orci, nec feugiat mi purus at libero. Praesent
elit elit, facilisis eget molestie sit amet, venenatis id nunc. Proin ut neque
nec diam finibus laoreet vitae sit amet metus. Donec vel dui vel leo condimentum
aliquet. Nunc quis neque vitae enim interdum tempus.
![](computer.svg "computer")
Cras vel porttitor nibh. Nulla condimentum sit amet mi sit amet mattis. In id
neque commodo, mattis nibh non, hendrerit augue. Curabitur sed placerat odio,
quis molestie mauris. Curabitur ac sodales est. Cras sodales mi risus, sed
sodales tellus fringilla ut. Fusce odio mi, viverra sit amet faucibus sed,
iaculis nec lectus. Nulla a erat ut urna lobortis fringilla ac ac nibh.
Vestibulum dictum sapien porttitor tellus imperdiet, ornare feugiat est
ultrices. Fusce enim nulla, ornare a blandit ut, iaculis vitae augue. Mauris
eget erat odio. Fusce vel pulvinar nisi, sed facilisis tellus. Etiam malesuada
urna sed nulla tempor pellentesque.
## References:
<https://lipsum.com>
<https://commons.wikimedia.org/wiki/File:Computer_Turned_On.svg>
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

1
src/post/nulla_porttitor_tellus/elephant.svg.cpy

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="210mm" height="297mm" viewBox="0 0 744.094 1052.362"><path fill="#fff" d="M11.609 36.552h737.188v1015.81H11.609z"/><g fill="none" stroke="#000" stroke-width="3"><path d="M362.421 178.817s-10.585 40.533-23.796 55.87c-12.02 13.956-28.45 28.534-32.575 45.168-4.664 45.32 41.738 68.132 40.852 117.267" stroke-linecap="round" stroke-width="8.6229"/><path d="M494.852 302.971s16.229-6.54 20.693-13.45c2.461-3.81 4.36-9.535 2.069-13.45-1.489-2.542-5.445-3.917-8.277-3.103-7.094 2.036-10.607 10.777-13.45 17.588-4.828 11.567-5.365 24.713-5.173 37.246-1.226 42.227 3.641 66.546 21.424 105.73-20.923 11.059-31.39 44.85-31.409 62.23l-13.326-33.717-5.09 110.915s-3.59 100.528-5.835 141.88c-2.37 43.674-1.98 77.29-5.641 115.742-5.773 31.208-24.83 70.31-59.488 64.275-10.103-1.961-21.42-8.595-24.874-18.29-14.048-39.427 13.185-15.297 16.199-24.622 4.13-12.78 1.188-26.837 1.714-40.259 1.473-37.626 3.243-76.164 4.034-112.894.842-39.057 4.3-85.144 2.195-123.637-3.94-72.048-7.88-76.698-11.82-115.047l-11.809 34.164s-5.93-26.39-10.774-33.004c-6.367-8.692-24.831-20.692-24.831-20.692 13.745-30.624 22.645-64.016 22.547-105.202-.214-11.052-.954-41.33-13.664-55.54-4.338-4.85-10.911-9.24-18.32-6.74-9.732 9.795 3.103 20.164 11.077 23.293l17.234 6.762" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.6229"/><path d="M304.764 583.708c13.156 24.06 32.355 50.327 58.67 56.54 0 0-23.781-44.367-30.787-63.228-13.16-35.43 7.88-74.115 24.653-105.354-4.53-16.13-16.934-19.862-27.302-27.595-28.694 35.583-47.297 98.527-25.234 139.637z" stroke-width="8.6229"/><path d="M308.621 136.398c-27.993 33.268-118.219 41.97-149.091 78.612-33.778 40.09-49.93 121.022-57.833 185.216-8.622 70.042 5.792 134.868 12.208 211.361 18.185 127.553 6.148 244.564-4.139 371.003h109.107s-30.754-95.07-33.402-164.734c-2.648-69.663-14.808-151.18 69.35-183.807 0 0 12.247 119.091 15.99 167.964 4.761 62.14-10.847 180.577-10.847 180.577h123.089s-57.089-100.972-30.978-236.802c7.423-38.614 38.985-99.396 38.985-99.396m68.44.54s21.909 63.61 25.006 96.787c7.418 79.455-15.948 238.871-15.948 238.871h114.813c-19.015-23.2-34.734-140.575-19.775-212.932 17.142-82.915 26.77-182.554 23.515-260.828-1.112-26.747-21.905-142.963-21.905-146.604" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.6229"/><path d="M555.839 515.106c3.582 20.93-4.367 47.57-10.459 62.842-9.694 25.652-24.386 51.484-49.587 61.284 0 0 26.258-50.16 30.582-69.81 8.122-36.91-15.44-74.778-36.381-103.39 4.325-12.542 8.548-26.764 19.372-35.204 19.326 15.75 41.06 52.657 46.473 84.278z" stroke-width="8.6229"/><path d="M496.381 390.395c39.61-26.036 112.93-45.952 159.872-51.138 2.723-45.916 32.308-110.065-39.67-158.726-20.07-11.772-59.141-1.858-73.281-20.337-13.106-17.128-21.378-44.428-41.385-57.938-28.543-15.57-54.18-12.539-82.77 1.034-30.67-13.373-64.807-12.084-91.725 9.814-19.129 16.1-16.655 37.938-35.532 54.332-18.457 16.029-48.366 12.731-68.285 26.9-61.825 42.637-47.615 94.253-48.627 145.882 60.906 4.786 112.368 29.349 167.89 49.912" stroke-linecap="round" stroke-width="8.6229"/><path d="M477.738 174.563s9.568 40.532 22.778 55.869c12.021 13.956 29.47 29.552 33.593 46.186 4.664 45.32-35.572 62.91-34.686 112.046" stroke-linecap="round" stroke-width="8.6229"/></g></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

56
src/post/nulla_porttitor_tellus/index.got

@ -0,0 +1,56 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Nulla porritor tellus ut leo",
"description" : "Duis justo tortor, consequat a.",
"cdate" : "2018-08-24",
"category" : "efficitur",
"tag" : "commodo,turpis"
}
;;;
{{template "pageBegin" . -}}
|||md+
## Pellentesque vestibulum
Lectus sed eros vulputate, vel molestie tortor feugiat. Vivamus ultricies, erat
quis faucibus finibus, ligula nunc commodo sapien, in aliquam erat ex vel purus.
Sed tincidunt, diam sed dapibus ultricies, urna turpis tempus augue, et porta ex
tellus a ante. Nunc non elit lobortis, ultricies ex non, vulputate neque. Cras
dui urna, tincidunt in dictum lobortis, viverra ut velit. Pellentesque nec
ultricies purus. Curabitur imperdiet leo tellus. Ut at aliquam turpis. Morbi a
libero malesuada, tempor metus at, accumsan metus. In congue tortor a turpis
suscipit rhoncus. Integer ac vulputate purus, ac cursus justo. Sed tincidunt
finibus pellentesque. Donec vulputate tempor eros nec maximus. Vivamus lacus
urna, auctor at felis in, aliquam vestibulum nulla. Donec id sagittis dui.
![](elephant.svg "elephant")
## Aenean egestas
Vulputate leo non iaculis. Suspendisse potenti. Mauris tincidunt viverra
hendrerit. Vestibulum consequat justo ac ex dictum lobortis. Fusce et mi sit
amet ligula euismod tincidunt. Nulla consequat, diam eu mollis aliquam, sapien
nunc sollicitudin risus, vel hendrerit diam nibh ut ligula. Morbi non blandit
velit. Ut pellentesque justo non leo finibus aliquet. Cras eu urna lacus. Sed ut
urna eget nunc mollis facilisis. Ut ut risus quis quam egestas semper.
Vestibulum malesuada sodales odio in mollis.
Interdum et malesuada fames ac ante ipsum primis in faucibus. Nullam mauris
nunc, accumsan id lacinia vel, vehicula nec sapien. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. In maximus, nibh placerat ultrices luctus, felis
est suscipit turpis, eu ultrices augue nulla ut turpis. In libero diam, pretium
et ligula sodales, feugiat commodo mi. Nullam quis elit lacus. Aenean
condimentum pulvinar ante, ut lacinia ex porttitor ut. Curabitur auctor, mi vel
lacinia rhoncus, metus est porta sapien, nec scelerisque lacus dolor non libero.
Aenean dapibus enim at ligula ultrices pulvinar. Morbi nec magna mattis, pretium
dolor a, aliquam tellus. Sed semper odio sed justo dictum auctor. In congue
lacus vitae quam mattis tempus.
## References:
<https://lipsum.com>
<https://commons.wikimedia.org/wiki/File:Asian_elephant_line.svg>
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

54
src/post/pellentesque/index.got

@ -0,0 +1,54 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Pellentesque eleifend",
"description" : "Nulla feugiat arcu in ante.",
"cdate" : "2020-05-20",
"category" : "efficitur",
"tag" : "commodo,lectus"
}
;;;
{{template "pageBegin" . -}}
|||md+
Aliquam pharetra lectus magna, at cursus ante dapibus in. Sed et nisl elit.
Quisque vitae hendrerit arcu, ac maximus lacus. Aenean vel ligula dictum sapien
semper scelerisque. Donec cursus nec augue ut venenatis. Vivamus consectetur
velit ut tempus interdum. Donec suscipit lacus mauris, vitae molestie tortor
dignissim vel. Maecenas nunc felis, pharetra sed sem non, viverra semper lectus.
Nulla vestibulum mi eu lobortis suscipit. Vestibulum vitae dolor ornare,
vulputate est eget, vehicula quam. Nam neque nisl, auctor at efficitur eu,
auctor interdum enim. Proin volutpat posuere sapien sit amet dignissim. Sed nec
ante feugiat, mattis quam ut, congue purus. Nunc condimentum ipsum vitae iaculis
egestas.
![](rhino.svg "rhino")
1. Praesent eu velit at nibh luctus mollis vitae mollis purus. Etiam justo lectus,
egestas a lacinia sit amet, aliquam at nulla. Curabitur scelerisque urna vel.
2. Duis faucibus dui eget augue pellentesque, eget finibus ex vestibulum. Duis in
ornare ex, vitae faucibus eros. Donec ornare metus sed purus interdum laoreet.
3. Nulla semper, odio quis sodales posuere, diam turpis accumsan est, vel ultricies
mauris nisi ut felis. In porta pharetra facilisis. Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Pellentesque pellentesque nisl enim, eget volutpat
nisi aliquet vitae. Donec eget mi libero. Nullam lectus odio, congue eget urna.
Nam aliquet eros sit amet odio vestibulum, nec lacinia metus pharetra. Phasellus
et tellus suscipit, hendrerit arcu non, blandit enim. In sed lacinia turpis.
Maecenas aliquam commodo massa ut vestibulum. Mauris fringilla malesuada dictum.
Praesent ultrices vel eros id dictum. Cras non ligula eu diam fringilla tempus
eu id arcu. Sed nulla odio, placerat vitae tempor ornare, condimentum sit amet
ligula. Duis porta tortor fringilla dictum vehicula. Mauris vel ultricies metus.
Fusce lacinia orci mollis, pretium ipsum et, posuere arcu. Nulla venenatis purus
eu tortor aliquet, eu malesuada mauris congue. Donec eu ligula sit amet nunc
pulvinar scelerisque in vel orci.
## References:
<https://lipsum.com>
<https://commons.wikimedia.org/wiki/File:Rhino.svg>
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

1
src/post/pellentesque/rhino.svg.cpy

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.6 KiB

38
src/source/index.got

@ -0,0 +1,38 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Source",
"description" : "Repository of open source code and assets.",
"cdate" : "2020-05-09"
}
;;;
{{template "pageBegin" . -}}
|||md+
Open source code associated with this site can be obtained from the source code
repository at:
<{{.giturl}}>
The following are some highlighted projects from the repository.
## [Project 1 Name]({{.giturl}}/project1)
Aliquam erat volutpat. Maecenas et lacus augue. Nunc vulputate, est eget
consequat imperdiet, tellus orci pharetra leo, a consequat nibh tortor quis
elit. Aenean egestas ante sapien, nec mattis dui faucibus et. Duis ac volutpat
enim. Sed volutpat elit sit amet eros iaculis maximus eu id ex. Aenean sem
nulla, porta eu egestas nec, ullamcorper sed velit. In hac habitasse platea
dictumst. Proin et metus quis ligula placerat sodales. Duis eu posuere massa, id
tincidunt sem. Nam volutpat urna id bibendum scelerisque. Donec cursus erat eu
massa scelerisque dignissim.
## [Project 2 Name]({{.giturl}}/project2)
Mauris et arcu ultrices, cursus justo at, fringilla purus. Fusce et dignissim
erat. Pellentesque semper nunc velit, in aliquam est fringilla id. Cras
tincidunt sit amet enim ut tempor. Pellentesque risus purus, interdum vitae
consectetur quis, imperdiet vitae leo. Morbi auctor ligula vitae porta eleifend.
Sed rutrum ex eget nunc viverra auctor.
|||md-
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

60
src/topic/index.got

@ -0,0 +1,60 @@
;;;
{
"pgotInclude" : [ "globalPage.igot" ],
"title" : "Topics",
"description" : "Content on this website listed by category, tag, date.",
"cdate" : "2020-05-20",
"posts": [
{ "title": "Pellentesque eleifend",
"path": "post/pellentesque"
},
{ "title": "Mauris elementum eros a justo",
"path": "post/mauris_elementum"
},
{ "title": "Nulla porttitor tellus ut leo",
"path": "post/nulla_porttitor_tellus"
}
],
"topics" : [
{ "name": "By Category",
"item": [
{ "name": "efficitur", "postnum": [ 0, 2 ] },
{ "name": "porta", "postnum": [ 1 ] }
]
},
{ "name": "By Tag",
"item": [
{ "name": "commodo", "postnum": [ 0, 2 ] },
{ "name": "lectus", "postnum": [ 0 ] },
{ "name": "turpis", "postnum": [ 1, 2 ] }
]
},
{ "name": "By Date",
"item": [
{ "name": "2020", "postnum": [ 0 ] },
{ "name": "2019", "postnum": [ 1 ] },
{ "name": "2018", "postnum": [ 2 ] }
]
}
]
}
;;;
{{template "pageBegin" . -}}
<p></p>
{{range .topics -}}
<h3>{{.name}}</h3>
{{range .item -}}
<b>{{.name}}</b>
<ul><li>
{{range .postnum -}}
{{$i := toInt . -}}
<a href="{{$.siteurl}}/{{index $.posts $i "path"}}/{{$.dfile}}">
{{index $.posts $i "title" -}}</a>,
{{end -}}
</li></ul>
{{end -}}
<hr>
{{end -}}
<p></p>
{{template "pageEnd" . -}}
{{- /* vim:set noet tw=80: */ -}}

18
template/README.md

@ -0,0 +1,18 @@
# Purpose
This "template" folder contains templates and associates scripts to generate
standard repository files such as README.md and LICENSE. This is primarily
used by the author to ensure consistency across repositories and can safely be
ignored by most end users and contributors.
# Usage
If you do desire to use or process templates in this folder make sure you have
cloned the git repository at <https://git.lenzplace.org/lenzj/repo-template>.
The cloned "repo-template" respository should ideally exist one level outside
this repository root. I.E. ../repo-template
Once this is in place you can regenerate the documents from templates using the
following command:
$ sh regen-files.sh

155
template/README.md.got

@ -0,0 +1,155 @@
;;;
{
"rname":"makeht",
"pgotInclude": [ "README.src/all.got" ]
}
;;;
# {{.rname}}
This is a makefile based static website generator. Files are authored in the
"src" subdirectory using a standard text editor with markdown or html a
desired. A template processor is also used which enables standard page header,
footers, and other common information across various web pages.
The makefile is set up to recognize and process files based on their filename
extension. The following file types are currently handled:
* .got - These are the primary content files which are translated into html.
These are golang template files for processing by the
[pgot]({{.repUrl}}pgot) utility. The file types that follow are typically
referred to within these .got files.
* .igot - These are intended to be "included" in the frontmatter section of the
.got files above and typically contain global variables or content to
standardize across web pages.
* .cpy - Files intended to be copied over directly into the build directory
without any type of translation. The cpy file extension is removed in the
process.
* .raw - Raw files are binary files that are not stored efficiently within git.
These are the only content files that are ignored by git and are handled
separately using the [cogit](#cogit) methodology described below. These are
copied directly into the build directory with the raw file extension removed.
Note that folders are only created in the build directory if they contain
content files. Case in point, the "inc" folder within the "src" directory is
not mirrored into the "bld" folder because it only contains igot files. Since
igot files are by definition only included in other got files they do not
create content on their own and as such the inc folder does not need to be
created in the corresponding "bld" directory.
Once files have been authored, these are mirrored and transformed into final
html in the "bld" subdirectory. The user can make a local version using the
following command in order to browse and confirm content/appearance using a
standard web browser. The generated files are stored in the "bld/loc" sub
folder.
$ make loc
Once satisfied with the results the user can then make a public version using
the following command. The files are similarly stored in the "bld/pub" sub
folder.
$ make pub
The files in the "bld/pub" folder can be copied to the destination server
address using scp, rsync, etc.
## Installing
To install, clone the git repository and ensure you have the
[dependencies](#dependencies) in the section below installed.
In addition you will need to download the latest "cogit" file set from the
[release]({{.repUrl}}makeht/releases) folder. This is a tar archive containing
any images or video etc. used by this website. See the [cogit](#cogit) section
below for more background info. There is currently only one file in the makeht
cogit archive, and it is mainly included to demonstrate the cogit method. From
within the main git repository you can then extract the tar archive as follows
(assuming the downloaded cogit tar archive is in your ~/Download folder) and it
will populate the cogit files into the "src" directory.
$ tar -xf ~/Download/{{.rname}}-cogit-20XX-XX-XX.tar
You should then execute the configure script which selects the appropriate
Makefile version depending on which operating system you are using (linux or
bsd).
$ ./configure
You should edit the following line near the top of the Makefile to match the
public server address that you plan to use.
MYSERVER=my.blog.site
You can then either edit / create files directly in the "src" sub folder in the
repository or alternately copy all the files in the git repository to a
separate folder or repository of your choice. The src sub folder currently
contains a skeleton blog site with placeholder information that you can edit as
a starting point or alternately wipe it clean and start with your own format.
A screen shot of the skeleton blog is shown below.
![](screen_shot.png "screen shot")
Lastly, you can then execute "make loc" to generate a local set of files that
you can browse with your default web browser.
$ make loc
$ xdg-open bld/loc/index.html
## Dependencies
+ __make__ (any posix compliant make utility) Used to identify items that have
changed and convert those into final html files for a website using the tools
above.
+ __pgot__ ({{.repUrl}}pgot) A template processing tool
written in golang.
+ __chuf__ ({{.repUrl}}chuf) An inline chunk filtering
tool written in golang (used to select sections for markdown processing).
+ __markdown__ I use discount as the markdown processor.
<http://www.pell.portland.or.us/~orc/Code/discount/>
+ __unix utilities__ The following standard unix utilities are needed and
should be available in most linux/bsd default installations: find, tar, grep,
sort, sha256sum
## Folder structure
This can be created as desired. One recommended folder layout is as follows:
```text
+- Makefile
+- src : All templates and source text files are in this folder.
| +- css : html cascading style sheets
| +- inc : These are .igot templates that are included or referenced by
| individual content pages in src. Global variables can be defined
| here etc.
| +- topic1 : Website topics are stored in different sub folders.
| +- topic2 : etc. ...
+- bld : All output is written to this folder.
| +- loc : This folder is generated with "make loc", and can be viewed with
| a standard web browser.
| +- pub : This folder contains files which are intended for the public web
| server. These files can be directly copied to the server.
+- template : You can safely ignore this folder unless you want to update the
README or LICENSE files. Further detail is in the folder.
```
## Cogit
Websites typically have a variety of raw binary data files including images,
video, icons, etc. Git works exceptionally well for text files, but is not a
good tool for storing these types of binary files. The git LFS system has been
developed to handle this situation, however a specialized LFS server is needed.
An alternate strategy is used here which I am calling "cogit" (raw binary files
cohabitating with git). The .gitignore file specifies the raw files and/or
folders to be ignored by git. The Makefile generates a manifest text file
containing lines with a sha256sum first followed by the sub path/name for each
raw binary file. The manifest is tracked in git so that the even though the
raw files are not stored in git the user can determine exactly which set of raw
files is associated with each commit. A tarball containing the raw files can
be created and stored separately from the git respository.
{{template "rd-contributing" .}}
{{template "rd-versioning" .}}
{{template "rd-license" .}}
{{- /* vim:set ts=4 sw=4 et tw=80: */ -}}

14
template/regen-files.sh

@ -0,0 +1,14 @@
#!/bin/sh
RTEMPLATE=../../repo-template
if [ -d $RTEMPLATE ]
then
echo "Generating README.md"
pgot -i ":$RTEMPLATE" -o ../README.md README.md.got
echo "Generating LICENSE"
pgot -i ":$RTEMPLATE" -o ../LICENSE ${RTEMPLATE}/LICENSE.src/BSD-2-clause.got
else
echo "$RTEMPLATE repository not found."
exit 1
fi
Loading…
Cancel
Save