Contents

Happy Making!

Composer CMS

Composer Icon “Creating Made Simple.”
Composer CMS v3.1 License: GPL
Gary B. Genett composer@garybgenett.net

– Formats: webpage / html / pdf / epub / revealjs.html / docx

Overview

Composer is a simple but powerful CMS based on Pandoc, Bootstrap and GNU Make. It is a document and website build system that processes directories or individual files in Markdown format.

Traditionally, CMS stands for Content Management System. Composer is designed to be a Content Make System. Written content is vastly easier to manage as plain text, which can be crafted with simple editors and tracked with revision control. However, professional documentation, publications, and websites require formatting that is dynamic and feature-rich.

Pandoc is an extremely powerful document conversion tool, and is a widely used standard for processing Markdown into other formats. While it has reasonable defaults, there are a large number of options, and additional tools are required for some formats and features.

Composer consolidates all the necessary components, simplifies the options, and prettifies the output formats, all in one place. It also serves as a build system, so that large repositories can be managed as documentation archives or published as Static Websites.

Composer Screenshot

Quick Start

Use make help to get started:

make [-f .../Makefile] [variables] <filename>.<extension>
make [-f .../Makefile] [variables] <target>

Create documents from source Markdown files (see Formatting Variables):

make README.html
make Composer-v3.1.Manual.html c_list="README.md LICENSE.md"

Save a persistent configuration (see Recommended Workflow and Configuration Settings):

make template >.composer.mk
$EDITOR .composer.mk
    override COMPOSER_TARGETS := .targets Composer-v3.1.Manual.html
    override Composer-v3.1.Manual.html := README.md LICENSE.md
make clean
make all

Recursively install and build an entire directory tree (see Recommended Workflow):

cd .../documents
mv .../composer .Composer
make -f .Composer/Makefile install-all
make all-all

See help-all for full details and additional targets.

Principles

The guiding principles of Composer:

  • All source files in readable plain text
  • Professional output, suitable for publication
  • Minimal dependencies, and entirely command-line driven
  • Separate content and formatting; writing and publishing are independent
  • Inheritance and dependencies; global, tree, directory and file overrides
  • Fast; both to initiate commands and for processing to complete

Direct support for key document types (see Document Formatting):

Requirements

Composer has almost no external dependencies. All needed components are integrated directly into the repository, including Pandoc and YQ. Composer does require a minimal command-line environment based on GNU tools, particularly GNU Make, which is standard for all GNU/Linux systems. The Windows Subsystem for Linux for Windows and MacPorts for macOS both provide suitable environments.

The one large external requirement is TeX Live, and it can be installed using the package managers of each of the above systems. It is only necessary for creating PDF files.

Below are the versions of the components in the repository, and the tested versions of external tools for this iteration of Composer. Use check to validate your system.

Repository Commit License
Pandoc 2.18 GPL
YQ v4.24.2 MIT
Bootstrap v5.1.3 MIT
Bootlint v1.1.0 MIT
Bootswatch v5.1.3 MIT
Font Awesome 6.1.2 MIT / CC-BY
Water.css d950cbc9f8607521587f MIT
Markdown Viewer 3bd40d84c071379440b3 MIT
Markdown Themes 6b3643d0f703727d8472 None
Reveal.js 4.3.1 MIT
Google Firebase v12.4.7 MIT
Project Composer Version
GNU Bash 5.1.16
GNU Coreutils 8.32
GNU Findutils 4.9.0
GNU Sed 4.8
GNU Make 4.3
Pandoc 2.18
YQ 4.24.2
TeX Live PDF 2021 3.141592653-2.6-1.40.22
Supporting Tools:
Git SCM 2.37.4
GNU Diffutils 3.8
Rsync 3.2.4

Markdown Viewer is included both for its CSS stylesheets, and for real-time rendering of Markdown files as they are being written. To install, follow the instructions in the README.md.

Google Firebase is only necessary for uploading via the export-all and export-force targets. Binaries are included in the repository, but do not seem to work with all versions of their respective operating systems. If the included binary fails, use +update-firebase-tools to build a local version (see +update-*).

The versions of the integrated repositories can be changed, if desired (see Repository Versions).

Composer Operation

Directory Tree

The ideal workflow is to put Composer in a top-level .Composer for each directory tree you want to manage, creating a structure similar to this:

.../.Composer
.../
.../tld/
.../tld/sub/

To save on disk space, using a central Composer install for multiple directory trees, the init target can be used to create a linked .Composer directory:

make -f .../Makefile init

The directory tree can then be converted to a Composer documentation archive (Quick Start example):

make -f .Composer/Makefile install-all
make all-all

Customization

If specific settings need to be used, either globally or per-directory, .composer.mk and .composer.yml files can be created (see Configuration Settings, Quick Start example):

make template >.composer.mk         && $EDITOR .composer.mk
make template.yml >.composer.yml    && $EDITOR .composer.yml

Custom targets can also be defined, using standard GNU Make syntax (see Custom Targets).

Important Notes

GNU Make does not support file and directory names with spaces in them, and neither does Composer. Documentation archives which have such files or directories will produce unexpected results.

It is fully supported for input files to be symbolic links to files that reside outside the documentation archive:

cd .../tld
ln -rs .../README.md ./
make README.html

Similarly to source code, GNU Make is meant to only run one instance within the directory at a time, and Composer shares this requirement. It should be run as a single user, to avoid duplication and conflicts. Concurrent runs will produce unexpected results. It is highly recommended to set MAKEJOBS to a value greater than the default, to speed up processing.

It is best practice to install-force after every Composer upgrade, in case there are any changes to the Makefile template (see Templates). Everything in Composer sources from the main Makefile, so that is the only file which requires review to see what changes have been made between versions.

Next Steps

The archive is ready, and each directory is both a part of the collective and its own individual instance. Targets can be run per-file, per-directory, or recursively through an entire directory tree. The most commonly used targets are in Primary Targets.

Welcome to Composer. Happy Making!

Document Formatting

#WORKING:DOCS###################################################################

.../artifacts/pandoc/template.*
.../artifacts/pandoc/reference.*
.../artifacts/composer/composer-site.css
.../artifacts/composer/composer-html.css

As outlined in Overview and Principles, a primary goal of Composer is to produce beautiful and professional output. Pandoc does reasonably well at this, and yet its primary focus is document conversion, not document formatting. Composer fills this gap by specifically tuning a select list of the most commonly used document formats.

The input Markdown format used by Composer is the Pandoc default. However, the Pandoc Extensions list has been modified slightly. See that section and the Pandoc Markdown documentation for the exact list and details for each.

Further options for each document type are in Formatting Variables. All improvements not exposed as variables will apply to all documents created with a given instance of Composer.

Note that all the files referenced below are embedded in the ‘Embedded Files’ section of the Makefile. They are exported by the +release target (using +setup), and will be overwritten whenever it is run.

Static Websites

Bootstrap is a leading web development framework, capable of building static webpages that behave dynamically. Static sites are very easy and inexpensive to host, and are extremely responsive compared to truly dynamic webpages.

Composer uses this framework to transform an archive of simple text files into a modern website, with the appearance and behavior of dynamically indexed pages.

#WORKING:DOCS###################################################################

.../artifacts/bootstrap/bootstrap.js
.../artifacts/bootstrap/bootstrap.css
.../artifacts/composer/composer.site.css
.../artifacts/composer/composer.site.overlay.light.css
.../artifacts/composer/composer.site.overlay.dark.css
.../artifacts/images/logo.img
.../artifacts/images/icon.img

Bootlint Bootswatch

.../bootswatch/docs/index.html

– Examples: Example Website / README.site.html

HTML

In addition to being a helpful real-time rendering tool, Markdown Viewer includes several CSS stylesheets that are much more visually appealing than the Pandoc default, and which behave like normal webpages, so Composer uses them for all HTML-based document types, including EPUB.

Information on installing Markdown Viewer for use as a Markdown rendering tool is in Requirements.

– Example: README.html

PDF

The default formatting for PDF is geared towards academic papers and the typesetting of printed books, instead of documents that are intended to be purely digital.

Internally, Pandoc first converts to LaTeX, and then uses TeX Live to convert into the final PDF. Composer inserts customized LaTeX to modify the final output:

.../artifacts/composer/composer-pdf.header

#WORK # …/artifacts/composer/composer.pdf.latex

– Example: README.pdf

EPUB

The EPUB format is essentially packaged HTML, so Composer uses the same Markdown Viewer CSS stylesheets for it.

– Example: README.epub

Reveal.js Presentations

The CSS for Reveal.js presentations has been modified to create a more traditional and readable end result. The customized version is at:

.../artifacts/composer/composer-revealjs.css

#WORK # …/artifacts/composer/composer.revealjs.css

#WORK # rework this

It links in a default theme from the .../reveal.js/dist/theme directory. Edit the location in the file, or use c_css to select a different theme.

It is set up so that a logo can be placed in the upper right hand corner on each slide, for presentations that need to be branded. Simply copy an image file to the logo location:

.../artifacts/images/logo.img

To have different logos for different directories (using Recommended Workflow, Configuration Settings and Precedence Rules):

#WORK # no longer the best way to do this… cd …/presentations cp …/logo.img ./ ln -rs …/.Composer/artifacts/composer/composer.revealjs.css ./.composer-revealjs.css echo ‘override c_type := revealjs’ >>./.composer.mk make all

– Example: README.revealjs.html

Microsoft Word & PowerPoint

The internal Pandoc templates for these are exported by Composer, so they are available for customization:

.../artifacts/pandoc/reference.docx
.../artifacts/pandoc/reference.pptx

They are not currently modified by Composer.

– Example: README.docx

Plain Text

This output format is still parsable by Pandoc as valid Markdown, but is formatted to read as pure plain text that is only 80 columns wide. There are cases where this conversion is desirable, such as technical documentation, where it is easier to write and format as Pandoc Markdown but the output needs to be in a universally accepted text layout and presentation.

Composer currently does not modify this format, other than using the --columns=80 and --wrap=auto options to Pandoc.

Pandoc Markdown

Output Markdown that is specific to Pandoc. This is for linting or creating standardized versions of source files for shared archives.

Due to the expressed purposes of this format, Composer will never modify it.

Configuration Settings

#WORKING:DOCS###################################################################

GNU Make (.composer.mk)

Pandoc & Bootstrap (.composer.yml)

Composer uses .composer.mk files for persistent settings and definition of Custom Targets. By default, they are chained together across their Makefile tree (see COMPOSER_INCLUDE in Control Variables). A .composer.mk in the main Composer directory will be global to all directories. The targets and settings in the most local file override all others (see Precedence Rules).

The easiest way to create new .composer.mk and .composer.yml files is with the template and template.yml targets (Quick Start example):

make template >.composer.mk         && $EDITOR .composer.mk
make template.yml >.composer.yml    && $EDITOR .composer.yml

All variable definitions must be in the override [variable] := [value] format from the template target. Doing otherwise will result in unexpected behavior, and is not supported. The regular expression that is used to detect them:

override[[:space:]]+([^[:space:]]+)[[:space:]]+[:][=]

Variables can also be specified per-target, using GNU Make syntax:

README.%: override c_toc := 0
README.revealjs.html: override c_toc :=

In this case, there are multiple definitions that could apply to README.revealjs.html, due to the % wildcard. Since the most specific target match is used, the final value for c_toc would be empty.

Example configuration files:

.../.composer.mk
.../artifacts/.composer.yml

#WORK …/artifacts/README.site.yml …/README.site.html.yml

Precedence Rules

All processing in Composer is done in global-to-local order, so that the most local file or value always takes precedence.

Configuration Files

Both .composer.mk and .composer.yml files follow the model illustrated in COMPOSER_INCLUDE under Control Variables. This means that the values in the most local file override all others.

#WORKING:DOCS###################################################################

All values in .composer.mk take precedence over everything else, including environment variables.

Header & CSS Files

#WORK # the same for all…

.../artifacts/composer/composer-pdf.header
.../.composer-pdf.header
./README.pdf.header

#WORK # the same for all…

.../artifacts/composer/composer-html.css
.../.composer-html.css
./README.html.css

#WORK # the c_css layering…

  1. c_site >> Bootstrap
  2. c_css #WORK # comment 1. COMPOSER_DIR/artifacts/composer/composer-c_type.css
  3. COMPOSER_ART/composer/composer-c_type.css
  4. COMPOSER_INCLUDE >> …/.composer-c_type.css
  5. CURDIR/c_base.<extension>.css
  6. c_site >> .composer.yml :: [site-config].[css_overlay]

The first four are core to Composer, and are always included. COMPOSER_INCLUDE and CURDIR files are optional, and only used if they exist.

Variables & Aliases

Variable aliases, such as COMPOSER_DEBUGIT/c_debug/V are prioritized in the order shown, with COMPOSER_* taking precedence over c_*, over the short alias.

Full COMPOSER_* variable names should always be used in .composer.mk files, to avoid being overwritten by recursive environment persistence.

Pandoc Options

#WORK # does not seem to be documented anywhere… test it, with examples here, regardless… # seems to be: yaml_metadata, –defaults, –metadata*, etc.

Specifying Dependencies

If there are files or directories that have dependencies on other files or directories being processed first, this can be done simply using GNU Make syntax in .composer.mk:

LICENSE.html: README.html
subdirs-all-artifacts: subdirs-all-pandoc

This would require README.html to be completed before LICENSE.html, and for pandoc to be processed before artifacts. Directories need to be specified with the subdirs-all-* syntax in order to avoid conflicts with target names (see Custom Targets).

Chaining of dependencies can be as complex and layered as GNU Make will support. Note that if a file or directory is set to depend on a target, that target will be run whenever the file or directory is called.

Custom Targets

If needed, custom targets can be defined inside a .composer.mk file (see Configuration Settings), using standard GNU Make syntax. Naming them as *-export, *-clean or *-all will include them in runs of the respective targets. Targets with any other names will need to be run manually, or included in COMPOSER_TARGETS.

#WORK # …or, via Specifying Dependencies

There are a few limitations when naming custom targets. Targets starting with the regular expression [.+] are hidden, and are skipped by auto-detection. Additionally, there is a list of reserved targets in Reserved, along with a list of reserved variables.

Any included .composer.mk files are sourced early in the main Composer Makefile, so matching targets and most variables will be overridden. In the case of conflicting targets, GNU Make will produce warning messages. Variables will have their values changed silently. Changing the values of internal Composer variables is not recommended or supported.

A final note is that *-export, *-clean and *-all targets are stripped from COMPOSER_TARGETS. In cases where this results in an empty COMPOSER_TARGETS, there will be a message and no actions will be taken.

Repository Versions

There are a few internal variables used by +update to select the repository and binary versions of integrated components (see Requirements). These are exposed for configuration, but only within .composer.mk:

  • PANDOC_VER (must be a binary version number)
  • PANDOC_CMT (defaults to PANDOC_VER)
  • YQ_VER (must be a binary version number)
  • YQ_CMT (defaults to YQ_VER)
  • BOOTSTRAP_CMT
  • BOOTLINT_CMT
  • BOOTSWATCH_CMT
  • FONTAWES_CMT
  • WATERCSS_CMT
  • MDVIEWER_CMT
  • MDTHEMES_CMT
  • REVEALJS_CMT
  • FIREBASE_VER (must be a binary version number)
  • FIREBASE_CMT (defaults to FIREBASE_VER)

Binaries for Pandoc, YQ and Google Firebase are installed in their respective directories. By moving or removing them, or changing the version numbers and foregoing all relevant variations of +update, the system versions will be used instead. This will work as long as the commit versions match, so that supporting files are in alignment, particularly for Pandoc.

It is possible that changing the versions will introduce incompatibilities with Composer, which are usually impacts to the prettification of output files (see Document Formatting). There may also be upstream changes to the command-line options for these tools.

Composer Variables

Formatting Variables

Variable Purpose Value
c_site ~ S Enable Static Websites
c_type ~ T Desired output format html
c_base ~ B Base of output file
c_list ~ L List of input files(s)
c_lang ~ a Language for document headers en-US
c_logo ~ g Logo image (HTML formats) logo.img
c_icon ~ i Icon image (HTML formats) icon.img
c_css ~ c Location of CSS file theme.html-default.css
c_toc ~ t Table of contents depth
c_level ~ l Chapter/slide header level 2
c_margin ~ m Size of margins (PDF) 0.8in
c_options ~ o Custom Pandoc options
Values (c_type) Format Extension
html HyperText Markup Language *.html
pdf Portable Document Format *.pdf
epub Electronic Publication *.epub
revealjs Reveal.js Presentation *.revealjs.html
docx Microsoft Word *.docx
pptx Microsoft PowerPoint *.pptx
text Plain Text (well-formatted) *.txt
markdown Markdown (for testing) *.md.txt
  • Other c_type values will be passed directly to Pandoc
  • Special c_css values:
    • css_alt = Use the alternate default stylesheet
    • 0 = Revert to the Pandoc default
  • Special c_toc value: 0 = List all headers, and number sections
  • Special c_level value: 0 = Varies by c_type (see c_level)
  • An empty c_margin value enables individual margins:
    • c_margin_top ~ mt
    • c_margin_bottom ~ mb
    • c_margin_left ~ ml
    • c_margin_right ~ mr

c_site

#WORK

c_type / c_base / c_list

The compose target uses these variables to decide what to build and how. The output file is [c_base].<extension>, and is constructed from the c_list input files, in order. The <extension> is selected based on the c_type table above. Generally, it is not required to use the compose target directly for supported c_type files, since it is run automatically based on what output file <extension> is specified.

The automatic input file detection works by matching one of the following (Quick Start example):

make README.html                    ~ README (empty [COMPOSER_EXT])
make README.html                    ~ README.md
make README.md.html                 ~ README.md
make Composer-v3.1.Manual.html      c_list="README.md LICENSE.md"

Other values for c_type, such as json or man, for example, can be passed through to Pandoc manually:

make compose c_type="json" c_base="README" c_list="README.md"
make compose c_type="man" c_base="Composer-v3.1.Manual" c_list="README.md"

Any of the file types supported by Pandoc can be created this way. The only limitation is that the input files must be in Markdown format.

Finally, note that c_list has alternate meanings for these targets:

c_lang

  • Primarily for PDF, this specifies the language that the table of contents (c_toc) and chapter headings (c_level) will use.

c_icon

#WORK # html # revealjs

c_css

#WORK # document /.g/_data/zactive/coding/composer/artifacts/theme

.../artifacts/themes

c_toc

  • Setting this to a value of [1-6] creates a table of contents at the beginning of the document. The numerical value is how many header levels deep the table should go. A value of 6 lists all header levels.
  • Using a value of 0 lists all header levels, and additionally numbers all the sections, for reference.

c_level

  • This value has different effects, depending on the c_type of the output document.
  • For HTML, any value enables section-divs, which wraps headings and their section content in <section> tags and attaches identifiers to them instead of the headings themselves. This is for CSS styling, and is generally desired.
  • For PDF, there are 3 top-level division types: part, chapter, and section. This sets the top-level header to the specified type, which changes the way the document is presented. Using part divides the document into “Parts”, each starting with a stand-alone title page. With this division type, each second-level heading starts a new “Chapter”. A chapter simply starts a new section on a new page, and lower-level headings continue as running portions within it. Finally, section creates one long running document with no blank pages or section breaks (like a HTML page). To set the desired value:
    • part ~ 0
    • chapter ~ 2
    • section ~ Any other value
  • For EPUB, this creates chapter breaks at the specified level, starting the section on a new page. The special 0 simply sets it to the default value of 2.
  • For Reveal.js Presentations, the top-level headings can persist on the screen when moving through slides in their sections, or they can rotate out as their own individual slides. Setting to 0 enables persistent headings, and all other values use the default.
  • An empty value defers to the Pandoc defaults in all cases.

c_margin

  • The default margins for PDF are formatted for typesetting of printed books, where there is a large amount of open space around the edges and the text on each page is shifted away from where the binding would be. This is generally not what is desired in a purely digital PDF document.
  • This is one value for all the margins. Setting it to an empty value exposes variables for each of the individual margins: c_margin_top, c_margin_bottom, c_margin_left and c_margin_right.

c_options

  • In some cases, it may be desirable to add additional Pandoc options. Anything put in this variable will be passed directly to Pandoc as additional command-line arguments.

Control Variables

Variable Purpose Value
MAKEJOBS Parallel processing threads 1 (makejobs)
COMPOSER_DEBUGIT Use verbose output (debugit)
COMPOSER_DOCOLOR Enable title/color sequences (boolean)
COMPOSER_INCLUDE Include all: .composer.mk 1 (boolean)
COMPOSER_DEPENDS Sub-directories first: all (boolean)
COMPOSER_KEEPING Log entries / cache files 100 (keeping)
COMPOSER_LOG Timestamped command log .composer.log
COMPOSER_EXT Markdown file extension .md
COMPOSER_TARGETS See: all/clean config/targets
COMPOSER_SUBDIRS See: all/clean/install config/targets
COMPOSER_EXPORTS See: c_site/export config
COMPOSER_IGNORES See: c_site/export config
  • MAKEJOBS ~ c_jobs ~ J
  • COMPOSER_DEBUGIT ~ c_debug ~ V
  • COMPOSER_DOCOLOR ~ c_color ~ C
  • (makejobs) = empty is disabled / number of threads / 0 is no limit
  • (debugit) = empty is disabled / any value enables / 0 is full tracing
  • (keeping) = empty is none / number to keep / 0 is no limit
  • (boolean) = empty is disabled / any value enables

MAKEJOBS

#WORK # a small number of large directories will process faster than a large number of small ones, especially with site # windows subsystem for linux (increase memory…): /mnt/c/Users/*/.wslconfig # [wsl2] # processors=2 # memory=2GB # swap=0

  • By default, Composer progresses linearly, doing one task at a time. If there are dependencies between items, this can be beneficial, since it ensures things will happen in a particular order. The downside, however, is that it is very slow.
  • Composer supports GNU Make parallel execution, where multiple threads can be working through tasks independently. Experiment with lower values first. When recursing through large directories, each make that instantiates into a sub-directory has it’s own jobs server, so the total number of threads running can proliferate rapidly.
  • This can drastically speed up execution, processing thousands of files and directories in minutes. However, values that are too high can exhaust system resources. With great power comes great responsibility.
  • A value of 0 does parallel execution with no thread limit.

COMPOSER_DEBUGIT

  • Provides more explicit details about what is happening at each step. It generates a lot more output, and can be slower. It will also be hard to read unless MAKEJOBS is set to 1.
  • Full tracing using 0 outputs complete GNU Make and GNU Bash debugging information. This is extraordinarily verbose, and it is recommended to pipe it to a file for review.
  • This variable is repurposed in +debug to pass a list of targets to test.

COMPOSER_DOCOLOR

  • Composer uses colors to make all output and help text easier to read. The escape sequences used to accomplish this can create mixed results when reading in an output file or a $PAGER, or just make it harder to read for some.
  • This is also used internally for targets like +debug-file, +test-file and template, where plain text is required.

COMPOSER_INCLUDE

  • On every run, Composer walks through the MAKEFILE_LIST, all the way back to the main Makefile, looking for .composer.mk files in each directory. By default, it reads all of them in order starting from the main Composer directory. When this option is disabled, only Composer and the current directory will be used.
  • In the example directory tree below, it will read all of them in order from top to bottom: .Composer/.composer.mk, .composer.mk, tld/.composer.mk, and finally tld/sub/.composer.mk. With this disabled, only .Composer/.composer.mk and tld/sub/.composer.mk are read.
  • This is why it is best practice to have a .Composer directory at the top level for each documentation archive (see Recommended Workflow). Not only does it allow for strict version control of Composer per-archive, it also provides a mechanism for setting Composer Variables globally.
  • This option is enabled by default, so care should be taken with variables that are generally specific to a particular directory or file, and are not meant to be applicable globally. They will be propagated down the tree, which is generally not desired except in very specific cases. Using COMPOSER_CURDIR to limit their scope is highly recommended, similar to template (see Templates).
  • This setting also causes .composer.yml and .composer-* files to be processed in an identical manner (see Configuration Files and Header & CSS Files under Precedence Rules).

Example directory tree (see Recommended Workflow):

.../.Composer/Makefile
.../.Composer/.composer.mk
.../Makefile
.../.composer.mk
.../tld/Makefile
.../tld/.composer.mk
.../tld/sub/Makefile
.../tld/sub/.composer.mk

COMPOSER_DEPENDS

  • When doing all-all, Composer will process the current directory before recursing into sub-directories. This reverses that, and sub-directories will be processed first.
  • In the example directory tree in COMPOSER_INCLUDE above, the default would be: .../, .../tld, and then .../tld/sub. If the higher-level directories have dependencies on the sub-directories being run first, this will support that by doing them in reverse order, processing them from bottom to top.
  • This has no effect on any other targets, such as install or clean.

COMPOSER_KEEPING

#WORK # 0 deletes all… # COMPOSER_KEEPING test & document # clean-clean test & document # clean-clean only runs on all, so single files could go forever…?

COMPOSER_LOG

  • Composer appends to a .composer.log log file in the current directory whenever it executes Pandoc. This provides some accounting, and is used by list to determine which *.md files have been updated since the last time Composer was run.
  • This setting can change the name of the log file, or disable it completely (empty value).
  • It is removed each time clean is run.

COMPOSER_EXT

  • The Markdown file extension Composer uses: *.md. This is for auto-detection of files to add to COMPOSER_TARGETS, files to output for list, and other tasks. This is a widely used standard, including GitHub. Another commonly used extension is: *.markdown.
  • In some cases, they do not have any extension, such as README and LICENSE in source code directories. Setting this to an empty value causes them to be detected and output. It also causes all other files to be processed, because it becomes the wildcard *, so use with care. It is likely best to use COMPOSER_TARGETS to explicitly set the targets list in these situations.

#WORK # add a note that a per-target “override README.html :=” is probably best… # come to think of it, probably should just go back to not allowing an empty value…

#WORK # document! # .targets # COMPOSER_TARGETS # COMPOSER_SUBDIRS # COMPOSER_EXPORTS # COMPOSER_IGNORES

COMPOSER_TARGETS

#WORK # does not pick up .* files/directories # these are actually excluded in COMPOSER_IGNORES now… # wildcard ’*’ is taken literally

  • The list of output files to create or delete with clean and all. Composer does auto-detection using c_type and COMPOSER_EXT, so this does not usually need to be set. Hidden files that start with . are skipped.
  • Setting this manually disables auto-detection. It can also include non-file targets added into a .composer.mk file (see Custom Targets).
  • The .null target is special, and when used as a value for COMPOSER_TARGETS or COMPOSER_SUBDIRS it will display a message and do nothing. A side-effect of this target is that an actual file or directory named .null will never be created or removed by Composer.
  • An empty value triggers auto-detection.
  • Use config or targets to check the current value.

COMPOSER_SUBDIRS

#WORK # wildcard ’*’ is taken literally

  • The list of sub-directories to recurse into with install, clean, and all. The behavior and configuration is identical to COMPOSER_TARGETS above, including auto-detection and the .null target. Hidden directories that start with . are skipped.
  • An empty value triggers auto-detection.
  • Use config or targets to check the current value.

COMPOSER_EXPORTS

#WORK # this one will be complicated… maybe? # has, effectively, the same .null behavior as above… # also overridden by COMPOSER_IGNORES # document .targets token… # .null has no special meaning and is removed if present # hidden variables… # /.g/_data/zactive/coding/composer/+Composer # # # # # wildcard ’*’ globs

COMPOSER_IGNORES

#WORK # either remove site here, or add it to the ones above… # also, there are also implications for site-library… # .targets has no special meaning and is removed if present # .null has no special meaning and is removed if present # hard-coded +Composer .* +* / .* + # . +* should also be documented in the “Operation” section somewhere… # wildcard ’*’ globs

Helper Variables

Variable Purpose Value
CURDIR GNU Make current directory $PWD :: make
COMPOSER_CURDIR Detects COMPOSER_INCLUDE CURDIR :: .composer.mk
COMPOSER_DIR Location of Composer …/composer
COMPOSER_ROOT Topmost level of current tree …/composer
COMPOSER_EXPORT Target: export COMPOSER_ROOT/+Composer (mk)
COMPOSER_LIBRARY Target: site/site-library (yml)
COMPOSER_SRC Repositories and downloads COMPOSER_DIR/.sources
COMPOSER_ART Composer supporting files COMPOSER_DIR/artifacts
COMPOSER_DAT Pandoc supporting files COMPOSER_ART/pandoc
COMPOSER_TMP Cache and working directory CURDIR/.composer.tmp
  • (mk) = configurable in .composer.mk
  • (yml) = configurable in .composer.yml

These are internal variables only exposed within .composer.mk files. See Configuration Settings and Custom Targets for more details.

CURDIR

#WORK

COMPOSER_CURDIR

#WORK # can also be used to detect first pass, using “ifeq”, to prevent “warning: overriding recipe for target” warnings…

  • This is set to CURDIR when reading in a .composer.mk file in the GNU Make running directory, and is empty otherwise. This provides a way to limit particular portions of the file to the local directory, regardless of whether COMPOSER_INCLUDE is set or not.
  • Uses for this are to limit the availability of targets to the local directory, or to prevent variable values from recursing down to sub-directories.
  • Generally speaking, it is best practice to completely encapsulate all .composer.mk files with this, except for the specific portions that need to be passed down, similar to template (see Templates).

Example usage in a .composer.mk file:

ifneq ($(COMPOSER_CURDIR),)
    ...
endif

COMPOSER_DIR

#WORK

COMPOSER_ROOT

#WORK

COMPOSER_EXPORT

#WORK # hidden variables…

  • [_EXPORT_DIRECTORY]
  • [_EXPORT_GIT_REPO]
  • [_EXPORT_GIT_BNCH]
  • [_EXPORT_FIRE_ACCT]
  • [_EXPORT_FIRE_PROJ]

COMPOSER_LIBRARY

#WORK

COMPOSER_SRC

#WORK

COMPOSER_ART

#WORK

COMPOSER_DAT

#WORK

COMPOSER_TMP

#WORK

Composer Targets

Primary Targets

Target Purpose
help Basic help overview (default)
help-all Console version of README.md (no reference sections)
template Print settings template: .composer.mk
template.yml Print settings template: .composer.yml
template.md Print markdown file template
compose Document creation engine (see c_type)
site Build HTML files as Static Websites (see c_site)
site-all Do site recursively: COMPOSER_SUBDIRS
site-force Do site recursively: including COMPOSER_LIBRARY
site-clean Remove c_site only: COMPOSER_LIBRARY/COMPOSER_TMP
install Current directory initialization: Makefile
install-all Do install recursively (no overwrite)
install-force Recursively force overwrite of Makefile files
clean Remove output files: COMPOSER_TARGETS :: *-clean
clean-all Do clean recursively: COMPOSER_SUBDIRS
*-clean Any targets named this way will also be run by clean
all Create output files: COMPOSER_TARGETS :: *-all
all-all Do all recursively: COMPOSER_SUBDIRS
*-all Any targets named this way will also be run by all
list Show updated files: *COMPOSER_EXT >> COMPOSER_LOG

help / help-all

  • Outputs all of the documentation for Composer. The README.md has a few extra sections covering internal targets, along with reserved target and variable names, but is otherwise identical to the help-all output.

template / template.yml / template.md

compose

site / site-all / site-force

#WORK # site rebuilds indexes, force recursively

site-clean

#WORK

install / install-all / install-force

  • Creates the necessary Makefile files to set up a directory or a directory tree as a Composer archive. By default, it will not overwrite any existing files.
  • Doing a simple install will only create a file in the current directory, whereas install-all will recurse through the entire directory tree. A full install-force is the same as install-all, with the exception that it will overwrite all Makefile files.
  • The topmost directory will have the Makefile created for it modified to point to Composer.

clean / clean-all / *-clean

all / all-all / *-all

list

  • Outputs all the COMPOSER_EXT files that have been modified since COMPOSER_LOG was last updated. Acts as a quick reference to see if anything has changed.
  • Since the COMPOSER_LOG file is updated whenever Pandoc is executed, this target will primarily be useful when all is the only target used to create files in the directory.

Additional Targets

Target Purpose
+release Upgrade all tools and supporting files to next versions
+release-all Also make README.* files and Static Websites
+update Update all included components (see Requirements)
+update-all Additionally perform all source code builds
+update-list Show changes made to each (see Repository Versions)
+update-* Complete fetch and build for a specific component
+debug Diagnostics, tests targets list in COMPOSER_DEBUGIT
+debug-file Export +debug results to a plain text file
check List system packages and versions (see Requirements)
check-all Complete check package list, and system information
config Show values of all Composer Variables
config-all Complete config, including environment variables
config.* Export individual Composer Variables values
config.yml JSON export of .composer.yml configuration
targets List all available targets for the current directory
init Create and link a .Composer in current directory
init-force Completely reset and relink an existing .Composer
commit Git commit of current directory tree or c_list
commit-all Automatic commit, without $EDITOR step
export Synchronize +Composer export of COMPOSER_ROOT
export-all Also publish to upstream hosting providers
export-force Publish only, without synchronizing first
*-export Any targets named this way will also be run by export
site-library Build or update the COMPOSER_LIBRARY
site-list COMPOSER_LIBRARY for current directory or c_list
site-list-all Do site-list for current directory tree
site-list-list All metadata fields and values, sorted by most used
site-list-null List files which are missing metadata fields
site-list.* Direct export of metadata or index, c_list searchable

+release / +release-all / +update / +update-all / +update-list / +update-*

#WORK break this up into two sections…

  • Using the repository configuration (see Repository Versions), these fetch and build all external components.
  • Simply doing +update will fetch all source repositories and pre-built binaries.
  • The +update-all target additionally performs all relevant source code builds. For some repositories, this is necessary to create the final output files used by Composer, and in other cases this builds local binaries which replace the included ones. Additional external tools may be required to perform these steps (see check-all).
  • To review the resulting differences between upstream sources and the local directories, use +update-list.
  • Each component directory has a corresponding +update-* target which performs the equivalent of +update-all for only that component.
  • Finally, +release runs +update-all and +setup, which together turn the current directory into a functional clone of Composer, including overwriting all supporting files.
  • Beyond this, +release-all also uses +setup-all and site-template to build the README.* files and create an example Static Websites in the _site directory.
  • One of the unique features of Composer is that everything needed to compose itself is embedded in the Makefile, so it is fully self-contained.

Creating a development clone:

#WORK # should create a “development/contributing/support” section, and reference this… # also: https://github.com/garybgenett/gary-os/blob/main/.vimrc

mkdir .../composer
cd .../composer
make -f .../.Composer/Makefile +release

Note that some additional external tools may be required to perform the builds, such as npm (see check-all).

+debug / +debug-file

For example:

make COMPOSER_DEBUGIT="README.html Composer-v3.1.Manual.html" +debug-file

check / check-all

  • Use check to see the minimum list of required external components and their versions, in relation to the system installed versions.
  • Doing check-all will show the complete list of tools that are used by Composer, along with which targets they are needed by.

config / config-all / config.* / config.yml / targets

#WORK break this up into two sections…

init / init-force

#WORK

commit / commit-all

  • Using the directory structure in Recommended Workflow, .../ is considered the top-level directory. Meaning, it is the last directory before linking to Composer.
  • If the top-level directory is a Git repository (it has <directory>.git or <directory>/.git), this target creates a commit of the current directory tree with the title format below.
  • For example, if it is run in the .../tld directory, that entire tree would be in the commit, including .../tld/sub. The purpose of this is to create quick and easy checkpoints when working on documentation that does not necessarily fit in a process where there are specific atomic steps being accomplished.
  • When this target is run in a Composer directory, it uses itself as the top-level directory. When calling Composer directly using -f, the current directory is used.
  • Using commit-all automatically does the commit instead of opening the text editor in the $EDITOR variable.
  • In the context of commit, the c_list variable is repurposed to select the limited list of directories and/or files that should be committed. All selected directories and files must exist in the current directory tree.

Commit title format:

[Composer CMS v3.1 :: 2024-07-03T06:52:38-07:00]

Example using c_list:

make commit c_list="Makefile artifacts"

export / export-all / export-force / *-export

#WORK # … and then runs all *-export targets. # hidden variables… # /.g/_data/zactive/coding/composer/+Composer # # # #

site-library

#WORK

site-list / site-list-all / site-list-list / site-list-null / site-list.*

#WORK # use site-list-list first, to track down, then site-list-all for details, because it can be expensive to run… # .metadata and .index

Internal Targets

Target Purpose
help-help Complete README.md content (similar to help-all)
.headers Series of targets that handle all informational output
.headers-template For testing default .headers output
.headers-template-all For testing complete .headers output
.make Complete contents of GNU Make internal state
.targets Extracted list of all targets from .make
.null Placeholder to specify or detect empty values
+setup Extracts embedded files from Makefile
+setup-all Also builds all README.* output files
+test Test suite, validates all supported features
+test-file Export +test results to a plain text file
+test-dir Only create directory structure, and do +release
+test-list Output available test cases, for running directly
check-help Minimized check output (used for Requirements)
site-.composer.mk COMPOSER_LIBRARY configured template: .composer.mk
site-.composer.yml COMPOSER_LIBRARY configured template: .composer.yml
site-template Static Websites example _site in COMPOSER_DIR
site-template-+test Version configured to test specific variations
site-template-config Only create directory structure and source files
subdirs Expands COMPOSER_SUBDIRS into subdirs-*-* targets
list-list Same as list, but only lists the files (no headers)

None of these are intended to be run directly during normal use. They are only listed here for completeness.

Reference

Configuration

Pandoc Extensions

Composer uses the markdown input format, with these extensions:

ascii_identifiers
auto_identifiers
emoji
fancy_lists
fenced_divs
footnotes
gfm_auto_identifiers
header_attributes
implicit_figures
implicit_header_references
inline_notes
intraword_underscores
line_blocks
link_attributes
markdown_in_html_blocks
pandoc_title_block
pipe_tables
raw_html
raw_tex
shortcut_reference_links
smart
strikeout
superscript
task_lists
yaml_metadata_block

Templates

The install target Makefile template (for reference only):

override COMPOSER_MY_PATH := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
override COMPOSER_TEACHER := $(abspath $(dir $(COMPOSER_MY_PATH)))/Makefile
include $(COMPOSER_TEACHER)

Use the template target to create .composer.mk files:

# override MAKEJOBS := 1
# override COMPOSER_DEBUGIT :=
# override COMPOSER_DOCOLOR :=
# override COMPOSER_INCLUDE := 1
# override COMPOSER_DEPENDS :=
# override COMPOSER_KEEPING := 100
# override COMPOSER_LOG := .composer.log
# override COMPOSER_EXT := .md
# override c_site :=
# override c_type := html
# override c_lang := en-US
# override c_logo := $(COMPOSER_DIR)/artifacts/images/logo.img
# override c_icon := $(COMPOSER_DIR)/artifacts/images/icon.img
# override c_css := $(COMPOSER_DIR)/artifacts/themes/theme.html-default.css

ifneq ($(COMPOSER_CURDIR),)

# override COMPOSER_TARGETS := README.site.html README.html README.pdf README.epub README.revealjs.html README.docx LICENSE.html
# override COMPOSER_SUBDIRS := .null
# override COMPOSER_EXPORTS := *.html *.pdf *.epub *.revealjs.html *.docx *.pptx *.txt *.md.txt
# override COMPOSER_IGNORES := +Composer .* +*
# override c_base :=
# override c_list :=
# override c_toc :=
# override c_level := 2
# override c_margin := 0.8in
# override c_margin_top :=
# override c_margin_bottom :=
# override c_margin_left :=
# override c_margin_right :=
# override c_options :=

endif

Use the template.yml target to create .composer.yml files:

variables:
  title-prefix: null
#   site-config:
#     brand: null
#     homepage: null
#     search:
#       name: null
#       site: null
#       call: null
#       form: null
#     copyright: null
#     composer: 1
#     header: null
#     footer: null
#     css_overlay: dark
#     copy_protect: null
#     cols_break: lg
#     cols_scroll: 1
#     cols_order:
#       - 1
#       - 2
#       - 3
#     cols_reorder:
#       - 1
#       - 3
#       - 2
#     cols_size:
#       - 3
#       - 7
#       - 2
#     cols_resize:
#       - 6
#       - 12
#       - 6
#     metainfo: '<date> :: <title><|> -- <author|; >'
#     metainfo_null: '*(none)*'
#     metalist:
#       author:
#         title: Author
#         display: '*Authors: <|>, <|>*'
#       tags:
#         title: Tag
#         display: '*Tags: <|>, <|>*'
#     readtime: '*Reading time: <word> words, <time> minutes*'
#     readtime_wpm: 220
#   site-library:
#     folder: null
#     auto_update: null
#     append: null
#     digest_title: Latest Updates
#     digest_continue: '[...]'
#     digest_permalink: '*(permalink to full text)*'
#     digest_chars: 1024
#     digest_count: 10
#     digest_expanded: 0
#     digest_spacer: 1
#     lists_expanded: 0
#     lists_spacer: 1
#     sitemap_title: Site Map
#     sitemap_expanded: 0
#     sitemap_spacer: 1
#   site-nav-top: null
#   site-nav-bottom: null
#   site-nav-left: null
#   site-nav-right: null
#   site-info-top: null
#   site-info-bottom: null

Use the template.md target to create new markdown files:

---
title: "Composer CMS: Content Make System"
date: 2024-07-03
author:
  - Gary B. Genett
tags:
  - Composer
---
*Happy Making!*

Defaults

The default .composer.mk in the Composer directory:

################################################################################
# Composer CMS :: GNU Make Configuration
################################################################################
ifneq ($(COMPOSER_CURDIR),)
################################################################################

########################################
# Settings

override COMPOSER_TARGETS := \
    README.site.html \
    README.html \
    README.pdf \
    README.epub \
    README.revealjs.html \
    README.docx \
    LICENSE.html

#>> README.pptx \
#>> README.txt \
#>> README.md.txt \

override COMPOSER_SUBDIRS := .null

########################################
# Defaults

README.% LICENSE.%: override c_logo := artifacts/images/logo-v1.0.png
README.% LICENSE.%: override c_icon := artifacts/images/icon-v1.0.png
README.% LICENSE.%: override c_toc := 0

########################################
# Files

override README.site.html := artifacts/README.site.md
README.site.html: override c_site := 1
README.site.html: override c_toc :=

override README.pdf := README.md LICENSE.md

override README.revealjs.html := artifacts/README.revealjs.md
README.revealjs.html: override c_toc :=

LICENSE.html: override c_site := 1
LICENSE.html: override c_toc :=

################################################################################
endif
################################################################################
# End Of File
################################################################################

The template .composer.yml in the artifacts directory:

################################################################################
# Composer CMS :: YAML Configuration
################################################################################

variables:

########################################
# site

  title-prefix: EXAMPLE SITE

########################################
  site-config:

    brand: LOGO / BRAND
    homepage: http://www.garybgenett.net/projects/composer
    search:
#>>   name: SEARCH
      name: |
        <!-- composer >> icon search -->
      site: https://duckduckgo.com
      call: q
      form: |
        <!-- composer >> form sites garybgenett.net -->
        <!-- composer >> form ia web -->
        <!-- composer >> form kae d -->
        <!-- composer >> form ko 1 -->
        <!-- composer >> form kp -1 -->
        <!-- composer >> form kv 1 -->
        <!-- composer >> form kz -1 -->
#>> copyright: COPYRIGHT
    copyright: |
      <!-- composer >> icon gpl -->
      <!-- composer >> icon cc-by-nc-nd -->
      <!-- composer >> icon copyright -->
      COPYRIGHT
#>> composer: 1

#>> header: null
#>> footer: null

#>> css_overlay: dark
#>> copy_protect: null

#>> cols_break: lg
#>> cols_scroll: 1
#>> cols_order: [ 1, 2, 3 ]
#>> cols_reorder: [ 1, 3, 2 ]
#>> cols_size: [ 3, 7, 2 ]
#>> cols_resize: [ 6, 12, 6 ]

#>> metainfo: "<date> :: <title><|> -- <author|; >"
#>> metainfo_null: "*(none)*"
#>> metalist:
#>>   author:
#>>     title: "Author"
#>>     display: "*Authors: <|>, <|>*"
#>>   tags:
#>>     title: "Tag"
#>>     display: "*Tags: <|>, <|>*"

#>> readtime: "*Reading time: <word> words, <time> minutes*"
#>> readtime_wpm: 220

########################################
  site-library:

    folder: #>> null
#>> auto_update: null

#>> append: null

#>> digest_title: "Latest Updates"
#>> digest_continue: "[...]"
#>> digest_permalink: "*(permalink to full text)*"
#>> digest_chars: 1024
#>> digest_count: 10
#>> digest_expanded: 0
#>> digest_spacer: 1

#>> lists_expanded: 0
#>> lists_spacer: 1

#>> sitemap_title: "Site Map"
#>> sitemap_expanded: 0
#>> sitemap_spacer: 1

########################################
  site-nav-top:

    MENU:
      - MAIN: ./index.html
      - PAGES:
        - Composer README: ./../index.html
        - spacer
        - Introduction:
          - _: ./index.html
          - Default Site: ./null/index.html
          - Configured Site: ./config/index.html
          - Pandoc Markdown: ./pandoc/MANUAL.html
          - Bootstrap Default: ./bootstrap/site/content/docs/5.1/getting-started/introduction.html
        - Layout & Elements:
          - _: ./examples.html
          - Metainfo Page: ./config/pages.html
          - Metainfo File: ./config/pages/2022-01-01+template_00.html
          - Themes & Overlays: ./themes/index.html
        - Default Library Page:
          - _: ./_library/index.html
          - Configured Library Page: ./config/_library-config/index.html
#>>       - Default Digest Page: ./index-digest.html
#>>       - Configured Digest Page: ./config/index-digest.html
    CONTENTS:
      - CONTENTS:
        - contents
#>>     - contents 6
#>>     - contents 0
    SPACE:
      - spacer
    LIBRARY:
      - DATES:
        - library date
      - AUTHORS:
        - library author
      - TAGS:
        - library tags

########################################
  site-nav-bottom:

    PATH:
      - SITEMAP: ./_library/sitemap.html
    INFO:
      - metalist author
      - metalist tags

########################################
  site-nav-left:

    BEGIN:
    MENU:
      - fold-begin 0 . 0 LEFT FOLD
      - _: |
          * ITEM 1
          * ITEM 2
          * ITEM 3
      - fold-end
    MIDDLE:
      - spacer
    TEXT:
      - box-begin 0 LEFT BOX
      - _: |
          LEFT TEXT
      - box-end
    SPACE:
      - spacer
    CONTENTS:
      - box-begin 0 CONTENTS
      - metainfo
      - contents
#>>   - contents 6
#>>   - contents 0
      - metalist author
      - metalist tags
      - readtime
      - box-end
    END:

########################################
  site-nav-right:

    BEGIN:
    MENU:
      - fold-begin 0 . 0 RIGHT FOLD
      - _: |
          * ITEM 1
          * ITEM 2
          * ITEM 3
      - fold-end
    MIDDLE:
      - spacer
    TEXT:
      - box-begin 0 RIGHT BOX
      - _: |
          RIGHT TEXT
      - box-end
    SPACE:
      - spacer
    LIBRARY:
      - fold-begin group library
      - fold-begin 0 0 library DATES
      - library date
      - fold-end
      - fold-begin 0 0 library AUTHORS
      - library author
      - fold-end
      - fold-begin 0 . library TAGS
      - library tags
      - fold-end
      - fold-end group
    END:

########################################
  site-info-top:

    TEXT:
      - _: |
          TOP TEXT
    INFO:
#>>   - metainfo
#>>   - metalist author
#>>   - metalist tags
#>>   - readtime
    ICON:
      - icon github https://github.com/garybgenett/composer Composer CMS
#>>   - _: |
#>>       <!-- composer >> icon gpl -->
#>>       <!-- composer >> icon cc-by-nc-nd -->
#>>       <!-- composer >> icon copyright -->

########################################
  site-info-bottom:

    TEXT:
      - _: |
          BOTTOM TEXT
    INFO:
#>>   - metainfo
#>>   - metalist author
#>>   - metalist tags
      - readtime
    ICON:

################################################################################
# End Of File
################################################################################

Reserved

Target Names

Do not create targets which match these, or use them as prefixes:

+debug
+release
+setup
+test
+update
.headers
.make
.null
.targets
all
check
clean
commit
compose
config
export
help
init
install
list
site
subdirs
targets
template

Variable Names

Do not create variables which match these, and avoid similar names:

+debug-output
+setup-targets
+test-.headers
+test-COMPOSER_INCLUDE-.composer-html.css
+test-COMPOSER_INCLUDE-.composer.mk
+test-COMPOSER_INCLUDE-.composer.mk-/
+test-COMPOSER_INCLUDE-.composer.yml
+test-COMPOSER_INCLUDE-init
+test-COMPOSER_INCLUDE-init-run
+test-count
+test-done
+test-fail
+test-find
+test-hold
+test-init
+test-load
+test-log
+test-make
+test-mark
+test-name
+test-pwd
+test-run
+test-speed-init
+test-speed-init-site
+update-.null
+update-all
+update-bin
+update-bin-os
+update-bld
+update-bld-list
+update-commands
+update-src
+update-targets
.
.headers
.headers-action
.headers-compose
.headers-compose-options
.headers-dir
.headers-file
.headers-line
.headers-list-make
.headers-list-path
.headers-note
.headers-options
.headers-options-files
.headers-options-out
.headers-rm
.headers-skip
.headers-subdirs
.headers-table
/
7Z
7Z_VER
ASPELL
ASPELL_DIR
BASE64
BASH
BASH_VER
BOOTLINT_CMT
BOOTLINT_DIR
BOOTLINT_HOME
BOOTLINT_LIC
BOOTLINT_NAME
BOOTLINT_SRC
BOOTSTRAP_ART_CSS
BOOTSTRAP_ART_JS
BOOTSTRAP_CMT
BOOTSTRAP_DEF_CSS
BOOTSTRAP_DEF_JS
BOOTSTRAP_DIR
BOOTSTRAP_DIR_CSS
BOOTSTRAP_DIR_JS
BOOTSTRAP_DOC_VER
BOOTSTRAP_HOME
BOOTSTRAP_LIC
BOOTSTRAP_NAME
BOOTSTRAP_SRC
BOOTSWATCH_CMT
BOOTSWATCH_CSS_ALT
BOOTSWATCH_CSS_DARK
BOOTSWATCH_CSS_LIGHT
BOOTSWATCH_CSS_SOLAR_DARK
BOOTSWATCH_CSS_SOLAR_LIGHT
BOOTSWATCH_DIR
BOOTSWATCH_HOME
BOOTSWATCH_LIC
BOOTSWATCH_NAME
BOOTSWATCH_SRC
CAT
CHECKIT
CHMOD
CLEANER
CODEBLOCK
COLUMNS
COLUMN_2
COMMA
COMMENTED
COMPOSER
COMPOSER_ART
COMPOSER_BASENAME
COMPOSER_BIN
COMPOSER_CLOSING
COMPOSER_CMS
COMPOSER_COLOR
COMPOSER_COMPOSER
COMPOSER_CONTACT
COMPOSER_CONTENTS
COMPOSER_CONTENTS_DIRS
COMPOSER_CONTENTS_EXT
COMPOSER_CONTENTS_FILES
COMPOSER_CONV
COMPOSER_CSS
COMPOSER_CSS_PUBLISH
COMPOSER_CURDIR
COMPOSER_CUSTOM
COMPOSER_DAT
COMPOSER_DEBUGIT
COMPOSER_DEBUGIT_ALL
COMPOSER_DEPENDS
COMPOSER_DIR
COMPOSER_DOCOLOR
COMPOSER_DOMAIN
COMPOSER_EXPORT
COMPOSER_EXPORTS
COMPOSER_EXPORTS_DEFAULT
COMPOSER_EXPORTS_EXT
COMPOSER_EXPORTS_LIST
COMPOSER_EXPORT_DEFAULT
COMPOSER_EXPORT_REGEX
COMPOSER_EXT
COMPOSER_EXT_DEFAULT
COMPOSER_EXT_SPECIAL
COMPOSER_FILENAME
COMPOSER_FIND
COMPOSER_FULLNAME
COMPOSER_HEADLINE
COMPOSER_HIDDEN_FILES
COMPOSER_HOMEPAGE
COMPOSER_ICON
COMPOSER_ICON_VER
COMPOSER_IGNORES
COMPOSER_IGNORES_DEFAULT
COMPOSER_IGNORES_EXT
COMPOSER_IGNORES_LIST
COMPOSER_IMAGES
COMPOSER_INCLUDE
COMPOSER_INCLUDES
COMPOSER_INCLUDES_DIRS
COMPOSER_KEEPING
COMPOSER_LIBRARY
COMPOSER_LIBRARY_AUTO_UPDATE
COMPOSER_LIBRARY_DIR
COMPOSER_LIBRARY_PATH
COMPOSER_LIBRARY_ROOT
COMPOSER_LIBRARY_ROOT_REGEX
COMPOSER_LICENSE
COMPOSER_LICENSE_HEADLINE
COMPOSER_LOG
COMPOSER_LOGO
COMPOSER_LOGO_VER
COMPOSER_LOG_DEFAULT
COMPOSER_MY_PATH
COMPOSER_NOCOLOR
COMPOSER_OPTIONS
COMPOSER_OPTIONS_EXPORT
COMPOSER_OPTIONS_GLOBAL
COMPOSER_OPTIONS_LOCAL
COMPOSER_OPTIONS_MAKE
COMPOSER_OPTIONS_PANDOC
COMPOSER_OPTIONS_PUBLISH
COMPOSER_PANDOC
COMPOSER_REGEX
COMPOSER_REGEX_DEFINE
COMPOSER_REGEX_OVERRIDE
COMPOSER_REGEX_PREFIX
COMPOSER_RELEASE
COMPOSER_REPOPAGE
COMPOSER_RESERVED
COMPOSER_RESERVED_DOITALL
COMPOSER_RESERVED_DOITALL_ENV
COMPOSER_RESERVED_SKIP
COMPOSER_ROOT
COMPOSER_ROOT_PATH
COMPOSER_ROOT_REGEX
COMPOSER_SELF
COMPOSER_SETTINGS
COMPOSER_SRC
COMPOSER_SUBDIRS
COMPOSER_SUBDIRS_DEFAULT
COMPOSER_SUBDIRS_LIST
COMPOSER_TAGLINE
COMPOSER_TARGETS
COMPOSER_TARGETS_DEFAULT
COMPOSER_TARGETS_LIST
COMPOSER_TEACHER
COMPOSER_TECHNAME
COMPOSER_TIMESTAMP
COMPOSER_TINYNAME
COMPOSER_TMP
COMPOSER_TMP_FILE
COMPOSER_VERSION
COMPOSER_YML
COMPOSER_YML_DATA
COMPOSER_YML_DATA_METALIST
COMPOSER_YML_DATA_PARSE
COMPOSER_YML_DATA_SKEL
COMPOSER_YML_DATA_SKEL_COMMENT
COMPOSER_YML_DATA_SKEL_METALIST
COMPOSER_YML_DATA_VAL
COMPOSER_YML_LIST
COMPOSER_YML_LIST_FILE
CONFIGS
CONVICT
COPYRIGHT_FULL
COPYRIGHT_SHORT
COREUTILS_VER
CP
CREATED_TAGLINE
CREATOR
CSS_ALT
CSS_ICONS
CSS_ICON_ARROW_D
CSS_ICON_ARROW_L
CSS_ICON_ARROW_R
CSS_ICON_ARROW_U
CSS_ICON_COPYRIGHT
CSS_ICON_GITHUB
CSS_ICON_MENU
CSS_ICON_SEARCH
CSS_THEME
CSS_THEMES
CURL
CURL_VER
CUSTOM_HTML_CSS
CUSTOM_LPDF_LATEX
CUSTOM_PRES_CSS
CUSTOM_PUBLISH_CSS
CUSTOM_PUBLISH_CSS_OVERLAY
CUSTOM_PUBLISH_SH
DATE
DATEMARK
DATENOW
DATESTAMP
DATESTRING
DEBUGIT
DEPTH_DEFAULT
DEPTH_MAX
DESC_DOCX
DESC_EPUB
DESC_HTML
DESC_LINT
DESC_LPDF
DESC_PPTX
DESC_PRES
DESC_TEXT
DIFF
DIFFUTILS_VER
DISTRIB
DIST_ICON_v1.0
DIST_LOGO_v1.0
DIST_SCREENSHOT_v1.0
DIST_SCREENSHOT_v3.0
DIST_SCREENSHOT_v4.0
DIVIDE
DOFORCE
DOITALL
DOMAKE
DONOTDO
DOSETUP
DO_HEREDOC
ECHO
ENDOLINE
ENV
ENV_MAKE
EOL
EXAMPLE
EXPAND
EXPORTS
EXPR
EXTN_DEFAULT
EXTN_DOCX
EXTN_EPUB
EXTN_HTML
EXTN_LINT
EXTN_LPDF
EXTN_OUTPUT
EXTN_PPTX
EXTN_PRES
EXTN_TEXT
EXT_ICON_CC
EXT_ICON_GPL
FIND
FINDUTILS_VER
FIND_ALL
FIREBASE
FIREBASE_BIN
FIREBASE_BIN_BLD
FIREBASE_CMT
FIREBASE_DIR
FIREBASE_HOME
FIREBASE_LIC
FIREBASE_LNX_BIN
FIREBASE_LNX_DST
FIREBASE_LNX_SRC
FIREBASE_LNX_ZIP
FIREBASE_MAC_BIN
FIREBASE_MAC_DST
FIREBASE_MAC_SRC
FIREBASE_MAC_ZIP
FIREBASE_NAME
FIREBASE_RUN
FIREBASE_SRC
FIREBASE_URL
FIREBASE_VER
FIREBASE_VER_COMPOSER
FIREBASE_WIN_BIN
FIREBASE_WIN_DST
FIREBASE_WIN_SRC
FIREBASE_WIN_ZIP
FONTAWES_CMT
FONTAWES_DIR
FONTAWES_HOME
FONTAWES_LIC
FONTAWES_NAME
FONTAWES_SRC
GIT
GITIGNORE_FIREBASE
GITIGNORE_GIT
GITIGNORE_LIST
GITIGNORE_NPM
GITIGNORE_WGET
GIT_LOG_COUNT
GIT_LOG_FORMAT
GIT_OPTS_CONVICT
GIT_REPO
GIT_REPO_DO
GIT_RUN
GIT_RUN_COMPOSER
GIT_RUN_REPO
GIT_VER
GZIP_BIN
GZIP_VER
HEAD
HEADERS
HEADER_L
HEAD_MAIN
HELPOUT
HEREDOC_COMPOSER_MK
HEREDOC_COMPOSER_MK_PUBLISH
HEREDOC_COMPOSER_MK_PUBLISH_BOOTSTRAP_DIR
HEREDOC_COMPOSER_MK_PUBLISH_BOOTSTRAP_TREE
HEREDOC_COMPOSER_MK_PUBLISH_CONFIGS
HEREDOC_COMPOSER_MK_PUBLISH_EXAMPLE
HEREDOC_COMPOSER_MK_PUBLISH_NOTHING
HEREDOC_COMPOSER_MK_PUBLISH_PAGEDIR
HEREDOC_COMPOSER_MK_PUBLISH_PANDOC_DIR
HEREDOC_COMPOSER_MK_PUBLISH_SHOWDIR
HEREDOC_COMPOSER_MK_PUBLISH_SHOWDIR_TARGET
HEREDOC_COMPOSER_YML
HEREDOC_COMPOSER_YML_PUBLISH_BOOTSTRAP_DIR
HEREDOC_COMPOSER_YML_PUBLISH_BOOTSTRAP_TREE
HEREDOC_COMPOSER_YML_PUBLISH_CONFIGS
HEREDOC_COMPOSER_YML_PUBLISH_EXAMPLE
HEREDOC_COMPOSER_YML_PUBLISH_LIBRARY
HEREDOC_COMPOSER_YML_PUBLISH_NOTHING
HEREDOC_COMPOSER_YML_PUBLISH_PAGEDIR
HEREDOC_COMPOSER_YML_PUBLISH_PANDOC_DIR
HEREDOC_COMPOSER_YML_PUBLISH_SHOWDIR
HEREDOC_COMPOSER_YML_PUBLISH_TESTING
HEREDOC_COMPOSER_YML_README
HEREDOC_COMPOSER_YML_README_HACK
HEREDOC_CUSTOM_HTML_CSS
HEREDOC_CUSTOM_HTML_CSS_SOLARIZED
HEREDOC_CUSTOM_HTML_CSS_WATER_CSS_HACK
HEREDOC_CUSTOM_HTML_CSS_WATER_SRC_SOLAR
HEREDOC_CUSTOM_HTML_CSS_WATER_VAR_OVERLAY
HEREDOC_CUSTOM_HTML_CSS_WATER_VAR_SOLAR
HEREDOC_CUSTOM_HTML_PANDOC_HACK
HEREDOC_CUSTOM_HTML_TEMPLATE_HACK
HEREDOC_CUSTOM_LPDF_LATEX
HEREDOC_CUSTOM_PRES_CSS
HEREDOC_CUSTOM_PRES_CSS_HACK
HEREDOC_CUSTOM_PUBLISH_CSS
HEREDOC_CUSTOM_PUBLISH_CSS_HACK
HEREDOC_CUSTOM_PUBLISH_CSS_OVERLAY
HEREDOC_CUSTOM_PUBLISH_CSS_POST
HEREDOC_CUSTOM_PUBLISH_CSS_PRE
HEREDOC_CUSTOM_PUBLISH_CSS_TESTING
HEREDOC_CUSTOM_PUBLISH_CSS_THEME
HEREDOC_CUSTOM_PUBLISH_JS_POST
HEREDOC_CUSTOM_PUBLISH_JS_PRE
HEREDOC_CUSTOM_PUBLISH_SH
HEREDOC_GITATTRIBUTES
HEREDOC_GITCONFIG
HEREDOC_GITIGNORE
HEREDOC_LICENSE
HEREDOC_SPELL_WORDLIST
HTML_BREAK
HTML_HIDE
HTML_SPACE
INCLUDE_FILE_APPEND
INCLUDE_FILE_FOOTER
INCLUDE_FILE_HEADER
INPUT
INSTALL
KEY_FILEPATH
KEY_UPDATED
LIBRARY_APPEND
LIBRARY_APPEND_ALT
LIBRARY_APPEND_MOD
LIBRARY_AUTO_UPDATE
LIBRARY_AUTO_UPDATE_ALT
LIBRARY_DIGEST_CHARS
LIBRARY_DIGEST_CHARS_ALT
LIBRARY_DIGEST_CONTINUE
LIBRARY_DIGEST_CONTINUE_ALT
LIBRARY_DIGEST_COUNT
LIBRARY_DIGEST_COUNT_ALT
LIBRARY_DIGEST_EXPANDED
LIBRARY_DIGEST_EXPANDED_ALT
LIBRARY_DIGEST_EXPANDED_MOD
LIBRARY_DIGEST_PERMALINK
LIBRARY_DIGEST_PERMALINK_ALT
LIBRARY_DIGEST_SPACER
LIBRARY_DIGEST_SPACER_ALT
LIBRARY_DIGEST_TITLE
LIBRARY_DIGEST_TITLE_ALT
LIBRARY_DIGEST_TITLE_MOD
LIBRARY_FOLDER
LIBRARY_FOLDER_ALT
LIBRARY_LISTS_EXPANDED
LIBRARY_LISTS_EXPANDED_ALT
LIBRARY_LISTS_EXPANDED_MOD
LIBRARY_LISTS_SPACER
LIBRARY_LISTS_SPACER_ALT
LIBRARY_SITEMAP_EXPANDED
LIBRARY_SITEMAP_EXPANDED_ALT
LIBRARY_SITEMAP_EXPANDED_MOD
LIBRARY_SITEMAP_SPACER
LIBRARY_SITEMAP_SPACER_ALT
LIBRARY_SITEMAP_TITLE
LIBRARY_SITEMAP_TITLE_ALT
LIBRARY_SITEMAP_TITLE_MOD
LINERULE
LISTING
LN
LS
LS_TIME
MAKEFILE
MAKEFILE_LIST
MAKEFLAGS
MAKEFLAGS_DOFAIL
MAKEFLAGS_END
MAKEFLAGS_ENV
MAKEFLAGS_NOFAIL
MAKEJOBS
MAKEJOBS_DEFAULT
MAKEJOBS_OPTS
MAKE_DB
MAKE_VER
MARKER
MDTHEMES_CMT
MDTHEMES_DIR
MDTHEMES_HOME
MDTHEMES_LIC
MDTHEMES_NAME
MDTHEMES_SRC
MDVIEWER_CMT
MDVIEWER_CSS_ALT
MDVIEWER_CSS_DARK
MDVIEWER_CSS_DIR
MDVIEWER_CSS_LIGHT
MDVIEWER_CSS_SOLAR_DARK
MDVIEWER_CSS_SOLAR_LIGHT
MDVIEWER_DIR
MDVIEWER_HOME
MDVIEWER_LIC
MDVIEWER_MANIFEST
MDVIEWER_MODULES
MDVIEWER_NAME
MDVIEWER_SASS_VER
MDVIEWER_SASS_VER_HACK
MDVIEWER_SRC
MENU_SELF
MKDIR
MV
NEWLINE
NOTHING
NOTHING_IGNORES
NPM
NPM_BUILD
NPM_INSTALL
NPM_NAME
NPM_RUN
NPM_SETUP
NPM_VER
NULL
OS_TYPE
OS_UNAME
OS_VAR_LIST
OS_VAR_LNX
OS_VAR_MAC
OS_VAR_WIN
OUTPUT_FILENAME
OUT_LICENSE
OUT_MANUAL
OUT_README
PANDOC
PANDOC_BIN
PANDOC_CMT
PANDOC_DIR
PANDOC_EXTENSIONS
PANDOC_FILES_CSS
PANDOC_FILES_HEADER
PANDOC_FILES_LIST
PANDOC_FILES_MAIN
PANDOC_FILES_OVERRIDE
PANDOC_FILES_SPLIT
PANDOC_FILES_TYPE
PANDOC_FROM
PANDOC_HOME
PANDOC_JSON_TO_LINT
PANDOC_LIC
PANDOC_LNX_BIN
PANDOC_LNX_DST
PANDOC_LNX_SRC
PANDOC_LNX_ZIP
PANDOC_MAC_BIN
PANDOC_MAC_DST
PANDOC_MAC_SRC
PANDOC_MAC_ZIP
PANDOC_MD_TO_HTML
PANDOC_MD_TO_JSON
PANDOC_MD_TO_TEXT
PANDOC_NAME
PANDOC_OPTIONS
PANDOC_OPTIONS_ERROR
PANDOC_SRC
PANDOC_URL
PANDOC_VER
PANDOC_VER_COMPOSER
PANDOC_WIN_BIN
PANDOC_WIN_DST
PANDOC_WIN_SRC
PANDOC_WIN_ZIP
PATH_LIST
PDF_LATEX
PDF_LATEX_HOME
PDF_LATEX_NAME
PDF_LATEX_VER
PHANTOM
PRINT
PRINTER
PRINTF
PUBLISH
PUBLISH_BOOTSTRAP_TREE
PUBLISH_CMD_BEG
PUBLISH_CMD_END
PUBLISH_CMD_ROOT
PUBLISH_COLS_BREAK
PUBLISH_COLS_BREAK_ALT
PUBLISH_COLS_ORDER_C
PUBLISH_COLS_ORDER_C_ALT
PUBLISH_COLS_ORDER_C_MOD
PUBLISH_COLS_ORDER_L
PUBLISH_COLS_ORDER_L_ALT
PUBLISH_COLS_ORDER_L_MOD
PUBLISH_COLS_ORDER_R
PUBLISH_COLS_ORDER_R_ALT
PUBLISH_COLS_ORDER_R_MOD
PUBLISH_COLS_REORDER_C
PUBLISH_COLS_REORDER_C_ALT
PUBLISH_COLS_REORDER_C_MOD
PUBLISH_COLS_REORDER_L
PUBLISH_COLS_REORDER_L_ALT
PUBLISH_COLS_REORDER_L_MOD
PUBLISH_COLS_REORDER_R
PUBLISH_COLS_REORDER_R_ALT
PUBLISH_COLS_REORDER_R_MOD
PUBLISH_COLS_RESIZE_C
PUBLISH_COLS_RESIZE_C_ALT
PUBLISH_COLS_RESIZE_C_MOD
PUBLISH_COLS_RESIZE_L
PUBLISH_COLS_RESIZE_L_ALT
PUBLISH_COLS_RESIZE_L_MOD
PUBLISH_COLS_RESIZE_R
PUBLISH_COLS_RESIZE_R_ALT
PUBLISH_COLS_RESIZE_R_MOD
PUBLISH_COLS_SCROLL
PUBLISH_COLS_SCROLL_ALT
PUBLISH_COLS_SCROLL_MOD
PUBLISH_COLS_SIZE_C
PUBLISH_COLS_SIZE_C_ALT
PUBLISH_COLS_SIZE_C_MOD
PUBLISH_COLS_SIZE_L
PUBLISH_COLS_SIZE_L_ALT
PUBLISH_COLS_SIZE_L_MOD
PUBLISH_COLS_SIZE_R
PUBLISH_COLS_SIZE_R_ALT
PUBLISH_COLS_SIZE_R_MOD
PUBLISH_COMPOSER
PUBLISH_COMPOSER_ALT
PUBLISH_COMPOSER_MOD
PUBLISH_COPY_PROTECT
PUBLISH_COPY_PROTECT_ALT
PUBLISH_CREATORS
PUBLISH_CREATORS_PRINT
PUBLISH_CREATORS_PRINT_ALT
PUBLISH_CREATORS_PRINT_MOD
PUBLISH_CREATORS_TITLE
PUBLISH_CREATORS_TITLE_ALT
PUBLISH_CREATORS_TITLE_MOD
PUBLISH_CSS_OVERLAY
PUBLISH_CSS_OVERLAY_ALT
PUBLISH_DIRS
PUBLISH_DIRS_CONFIGS
PUBLISH_DIRS_DEBUGIT
PUBLISH_DIRS_PRINTER
PUBLISH_DIRS_PRINTER_LIST
PUBLISH_EXAMPLE
PUBLISH_FILES
PUBLISH_FILE_APPEND
PUBLISH_FILE_FOOTER
PUBLISH_FILE_HEADER
PUBLISH_FOOTER
PUBLISH_FOOTER_ALT
PUBLISH_FOOTER_MOD
PUBLISH_HEADER
PUBLISH_HEADER_ALT
PUBLISH_HEADER_MOD
PUBLISH_INCLUDE
PUBLISH_INCLUDE_ALT
PUBLISH_INDEX
PUBLISH_KEEPING
PUBLISH_LIBRARY
PUBLISH_LIBRARY_ALT
PUBLISH_METAINFO
PUBLISH_METAINFO_ALT
PUBLISH_METAINFO_MOD
PUBLISH_METAINFO_NULL
PUBLISH_METAINFO_NULL_ALT
PUBLISH_METALIST
PUBLISH_METALIST_PRINT
PUBLISH_METALIST_PRINT_ALT
PUBLISH_METALIST_PRINT_MOD
PUBLISH_METALIST_TITLE
PUBLISH_METALIST_TITLE_ALT
PUBLISH_METALIST_TITLE_MOD
PUBLISH_OUT_README
PUBLISH_PAGEDIR
PUBLISH_PAGE_1
PUBLISH_PAGE_1_CONFIGS
PUBLISH_PAGE_1_CONFIGS_LINKS
PUBLISH_PAGE_1_INCLUDE
PUBLISH_PAGE_1_NAME
PUBLISH_PAGE_2
PUBLISH_PAGE_2_NAME
PUBLISH_PAGE_3
PUBLISH_PAGE_3_APPEND
PUBLISH_PAGE_3_CONFIGS
PUBLISH_PAGE_3_FOOTER
PUBLISH_PAGE_3_HEADER
PUBLISH_PAGE_3_NAME
PUBLISH_PAGE_4_HEADER
PUBLISH_PAGE_4_NAME
PUBLISH_PAGE_5_HEADER
PUBLISH_PAGE_5_NAME
PUBLISH_PAGE_EXAMPLE
PUBLISH_PAGE_EXAMPLE_DISPLAY
PUBLISH_PAGE_EXAMPLE_INCLUDE
PUBLISH_PAGE_EXAMPLE_LAYOUT
PUBLISH_PAGE_EXAMPLE_NAME
PUBLISH_PAGE_INCLUDE
PUBLISH_PAGE_INCLUDE_ALT
PUBLISH_PAGE_INCLUDE_ALT_NAME
PUBLISH_PAGE_INCLUDE_EXAMPLE
PUBLISH_PAGE_INCLUDE_NAME
PUBLISH_PAGE_LIBRARY
PUBLISH_PAGE_LIBRARY_ALT
PUBLISH_PAGE_LIBRARY_ALT_NAME
PUBLISH_PAGE_LIBRARY_EXAMPLE
PUBLISH_PAGE_LIBRARY_NAME
PUBLISH_PAGE_PAGEDIR_FOOTER
PUBLISH_PAGE_PAGEDIR_HEADER
PUBLISH_PAGE_PAGEDIR_NAME
PUBLISH_PAGE_SHOWDIR
PUBLISH_PAGE_SHOWDIR_INCLUDE
PUBLISH_PAGE_SHOWDIR_NAME
PUBLISH_PAGE_TESTING
PUBLISH_PAGE_TESTING_NAME
PUBLISH_READTIME
PUBLISH_READTIME_ALT
PUBLISH_READTIME_WPM
PUBLISH_READTIME_WPM_ALT
PUBLISH_ROOT
PUBLISH_SHOWDIR
PUBLISH_SH_GLOBAL
PUBLISH_SH_HELPERS
PUBLISH_SH_LOCAL
PUBLISH_SH_RUN
PUBLISH_TESTING
READ_ALIASES
REALMAKE
REALPATH
REPOSITORIES_LIST
REVEALJS_CMT
REVEALJS_CSS_ALT
REVEALJS_CSS_DARK
REVEALJS_CSS_LIGHT
REVEALJS_CSS_SOLAR_DARK
REVEALJS_CSS_SOLAR_LIGHT
REVEALJS_DIR
REVEALJS_HOME
REVEALJS_LIC
REVEALJS_NAME
REVEALJS_SRC
RM
RSYNC
RSYNC_VER
SED
SED_ESCAPE_COLOR
SED_ESCAPE_CONTROL
SED_ESCAPE_LIST
SED_VER
SORT
SORT_NUM
SOURCE_INCLUDES
SPECIAL_VAL
SPLIT
SUBDIRS
TABLE_C2
TABLE_M2
TABLE_M2_HEADER_L
TABLE_M3
TABLE_M3_HEADER_L
TAIL
TAR
TARGETS
TAR_VER
TEE
TESTING
TESTING_DIR
TESTING_LOGFILE
TESTING_MAKEFILE
TESTING_MAKEJOBS
TITLE_END
TITLE_LN
TMPL_DOCX
TMPL_EPUB
TMPL_HTML
TMPL_LINT
TMPL_LPDF
TMPL_OUTPUT
TMPL_PPTX
TMPL_PRES
TMPL_TEXT
TOAFILE
TOKEN
TOUCH
TR
TRUE
TYPE_DEFAULT
TYPE_DOCX
TYPE_EPUB
TYPE_HTML
TYPE_LINT
TYPE_LPDF
TYPE_PPTX
TYPE_PRES
TYPE_TARGETS
TYPE_TARGETS_LIST
TYPE_TARGETS_OPTIONS
TYPE_TEXT
UNAME
UPGRADE
VIM_FOLDING
VIM_OPTIONS
WATERCSS_CMT
WATERCSS_CSS_ALT
WATERCSS_CSS_DARK
WATERCSS_CSS_LIGHT
WATERCSS_CSS_SOLAR_ALT
WATERCSS_CSS_SOLAR_DARK
WATERCSS_CSS_SOLAR_LIGHT
WATERCSS_DIR
WATERCSS_HOME
WATERCSS_LIC
WATERCSS_NAME
WATERCSS_SRC
WC
WC_CHAR
WC_WORD
WGET
WGET_PACKAGE
WGET_PACKAGE_DO
WGET_VER
YQ
YQ_BIN
YQ_CMT
YQ_DIR
YQ_EVAL
YQ_EVAL_DATA
YQ_EVAL_DATA_FORMAT
YQ_EVAL_FILES
YQ_EVAL_MERGE
YQ_HOME
YQ_LIC
YQ_LNX_BIN
YQ_LNX_DST
YQ_LNX_SRC
YQ_LNX_ZIP
YQ_MAC_BIN
YQ_MAC_DST
YQ_MAC_SRC
YQ_MAC_ZIP
YQ_NAME
YQ_READ
YQ_SRC
YQ_URL
YQ_VER
YQ_VER_COMPOSER
YQ_WIN_BIN
YQ_WIN_DST
YQ_WIN_SRC
YQ_WIN_ZIP
YQ_WRITE
YQ_WRITE_FILE
YQ_WRITE_JSON
YQ_WRITE_OUT
YQ_WRITE_OUT_COLOR
_
_C
_D
_E
_EXPORT_DIRECTORY
_EXPORT_FIRE_ACCT
_EXPORT_FIRE_PROJ
_EXPORT_GIT_BNCH
_EXPORT_GIT_REPO
_F
_H
_M
_N
_S
c_base
c_css
c_css_select
c_css_select_theme
c_icon
c_lang
c_level
c_list
c_list_file
c_list_var
c_list_var_source
c_logo
c_margin
c_margin_bottom
c_margin_left
c_margin_right
c_margin_top
c_options
c_site
c_toc
c_type
check-path
clean-clean
compose-.null
compose-dependencies
compose-list
composer-cp
composer-ln
composer-make
composer-makefile
composer-mkdir
composer-mv
composer-note
composer-rm
config-targets
export-config
help-all-custom
help-all-depends
help-all-files
help-all-formatting
help-all-formatting-epub
help-all-formatting-html
help-all-formatting-office
help-all-formatting-pandoc
help-all-formatting-pdf
help-all-formatting-revealjs
help-all-formatting-text
help-all-formatting-websites
help-all-goals
help-all-links
help-all-links_ext
help-all-overview
help-all-require
help-all-require_post
help-all-rules
help-all-section
help-all-settings
help-all-targets_additional
help-all-targets_internal
help-all-targets_primary
help-all-title
help-all-variables_control
help-all-variables_format
help-all-variables_helper
help-all-versions
help-all-workflow
help-list-template
help-targets-format
help-targets-sections
help-targets-titles
install-Makefile
site-+debug-output
site-cache
site-cache-root
site-caches
site-caches-begin
site-caches-end
site-library
site-library-append
site-library-append-src
site-library-digest
site-library-digest-create
site-library-digest-file
site-library-digest-files
site-library-digest-list
site-library-digest-run
site-library-digest-src
site-library-digest-vars
site-library-index
site-library-index-create
site-library-metadata
site-library-metadata-create
site-library-sitemap
site-library-sitemap-create
site-library-sitemap-file
site-library-sitemap-files
site-library-sitemap-list
site-library-sitemap-run
site-library-sitemap-self
site-library-sitemap-src
site-library-sitemap-vars
site-library-sort-sh
site-library-sort-yq
site-list-dir
site-list-file
site-list-output
site-list-rgx-dir
site-list-rgx-file
site-list-sed-dir
site-list-sed-file
site-list-targets
site-list-tst
site-list-tst-dir
site-list-tst-file
site-targets
site-targets-cache
site-targets-contents
site-targets-contents-done
site-targets-file
site-targets-helpers
site-targets-metainfo
site-targets-metainfo-done
site-targets-metalist
site-targets-metalist-done
site-targets-readtime
site-targets-readtime-done
site-template-install
site-template-targets
subdirs-targets
subdirs-template
targets-list
targets-targets
template-print
template-var
template-var-static