buildAirportDB.jsbuildConfigIcons.jsbuildIndexIcons.jscheckMdLinks.jsgenerateFavicon.jsgenerateIcon.jsgenerateSplash.jsmdToToc.jsmdToHtml.jsmdToIndex.jsThe app and documentation build process relies on several custom scripts written in various languages. The NodeJS scripts rely on the following npm packages, also recorded in the package.json in the project root:
Install them as follows:
npm install commander path png-to-ico puppeteer sharp xml2js
These packages may have other dependencies that depend on your operating system. Please see the package documentation.
The <code>generateFavicon.js</code>, <code>generateIcon.js</code>, and <code>generateSplash.js</code> scripts are intended to generate the icons, favicons, and splash screens for POH Performance app with very little effort. ALl the tweaking of each icon and splash screen layout is avoided. The scripts all use puppeteer to build a web page for the requested image and snapshot the result to create the requested image file. The image is programmatically adjusted to meet padding or other formatting constraints. The technique will allow other programmatic tweaking in the future.
buildAirportDB.jsBuilds the airport database for an app. See the Airport Database Reference. If no options are specified then all runway surfaces except water are included.
-D or --data <dir> (optional)NFDC/APT.txtourairportscom/airports.csvourairportscom/runways.csv./source/airportData is used.-d or --dirt (optional)-h or --hard (optional)-L or --log <file> (optional)<file. If omitted, log output is sent to the standard error output. -l <len> or --length <len> (optional)-o or --output <file><file. If omitted, the database is sent to the standard output. -t or --turf (optional)-v or --verbose (optional)-w or --water (optional)An airport database file in JSON format. See the Airport Database Reference.
buildConfigIcons.jsnode buildConfigIcons.js <configFile>
This script automatically builds the icons and splash screens used by the specified Cordova config.xml file. It expects XML comments of the form <!-- iconArgs="<args>" ---> or <!-- splashArgs="<args>" --->on the same line following any <icon> or <splash> elements defining an icon or splash screen in the config.xml file. It will record the src file name in the element and the args string in the comment and call generateIcon.js or generateSplash.js with the src filename and specified args string to generate the output.
The script also detects XML comments of the form <!-- globalIconArgs="<args>" ---> or <!-- globalSplashArgs="<args>" --->. These will add the specified argument string to any iconArgs or splashArgs comments associated with individual <icon> or <splash> elements. Here's an example of the icon and splash screen portion of a config.xml file:
<!-- globalIconArgs="-t1 C182 -t2 Performance" -->
<!-- globalSplashArgs="-t1 C182 -t2 Performance -i logoImage.png" -->
<!-- android properties -->
<platform name="android">
<icon src="res/icon/android/ldpi.png" density="ldpi" /> <!-- iconArgs="-s 36" -->
<icon src="res/icon/android/hdpi.png" density="hdpi" /> <!-- iconArgs="-s 72" -->
<splash src="res/screen/android/port-ldpi.png" density="port-ldpi" /> <!-- splashArgs="-w 200 -h 320 -p 28" -->
<splash src="res/screen/android/port-hdpi.png" density="port-hdpi" /> <!-- splashArgs="-w 480 -h 800 -p 28" -->
</platform>
<!-- IOS properties -->
<platform name="ios">
<icon src="res/icon/ios/icon-60.png" width="60" height="60" /> <!-- iconArgs="-s 60" -->
<icon src="res/icon/ios/icon-167.png" width="167" height="167" /> <!-- iconArgs="-s 167" -->
<!-- storyboard splash screens -->
<splash src="res/screen/ios/Default@2x~iphone~anyany.png" /> <!-- splashArgs="-w 1334 -h 1334 -p 28" -->
<splash src="res/screen/ios/Default@2x~ipad~anyany.png" /> <!-- splashArgs="-w 2732 -h 2732 -p 28" -->
</platform>
Calling generateIcon.js with this file will generate the following icons and splash screens:
res/icon/android/ldpi.png: A 36x36 iconres/icon/android/hdpi.png: A 72x72 iconres/screen/android/port-ldpi.png: A 200x320 splash screenres/screen/android/hdpi-ldpi.png: A 480x800 splash screenres/icon/android/icon-60: A 60x60 iconres/icon/android/icon-167: A 167x167 iconres/screen/android/Default@2x~iphone~anyany.png: A 1334x1334 splash screenres/screen/android/Default@2x~ipad~anyany.png: A 2732x27320 splash screenlogoImage.png image underneath. The words and image will be automatically scaled to maintain the specified padding area (28% of width or height). The image will be scaled to have the same width as the words.<conigFile>config.xml file.buildIndexIcons.jsnode buildIndexIcons.js <indexFile>
This script automatically builds the icons and favicons used by the specified index.html file and any associated PWA manifest.json file. In the index.html file, it expects HTML comments of the form <!-- iconArgs="<args>" ---> or <!-- faviconArgs="<args>" ---> on the same line following any <link> elements with rel="icon" or rel="apple-touch-icon" in the index.html file. It will record the href file name in the element and the args string in the comment and call generateIcon.js or generateFavicon.js with the href filename and specified args string to generate the output.
The script also detects HTML comments of the form <!-- globalIconArgs="<args>" --->, which will add the specified argument string to any iconArgs or faviconArgs comments associated with individual <link> elements. Here's an example of the icon portion of an index.html file:
<!-- globalIconArgs="-t1 C182 -t2 Performance" -->
<!-- faviconGlobalArgs="-t1 C182 -t2 Performance" -->
<link rel="icon" href="buildStamp/image/favicon.ico" /> <!-- faviconArgs="" -->
<link rel="apple-touch-icon" href="buildStamp/image/icon-192.png" /> <!-- iconArgs="-s 192" -->
Calling generateIcon.js with this file will generate the following icons and splash screens:
buildStamp/image/favicon.ico: A favicon with the default sizesbuildStamp/image/icon-192.png: A 192x191 iconfavicon.ico will have the default sizes of 16, 32, 48, 64, 128, and 256.<indexFile>index.html file.checkMdLinks.jsnode checkMdLinks.js <mdFile>
This script checks that the links within the <mdFile> Markdown file point to valid target files and anchors.
<mdFile>generateFavicon.jsnode generateFavicon.js -o <file> -t1 <text1> [options]
This script generates an ICO favicon file containing multiple icon images of different sizes. The icon images can have one or two lines of text and a specified background color. The text will be automatically scaled so that the icon box has a specified padding. The default padding is 10% of the width. Each image is equal in width and height and may have rounded corners.
The default icon sizes are 16, 32, 48, 64, 128, and 256 pixels. For better readability, icons less than 64 pixels will only contain the first line.
-o <file> or --output <file> (required)-c <color> or --color <color> (optional)<color> string may be any CSS color string or a color range separated by a ':'. If omitted, the default string is "rgb(0,50,255):rgb(0,0,127)".-ff <string> or --fontFamily <string> (optional)-fr <number> or --fontRatio <number> (optional)-fw <string> or --fontFamily <string> (optional)-p <number> or --padding <number> (optional)-r <number> or --radius <number> (optional)-s <sizes> or --sizes <sizes> (optional)"16,32,48,64,128,256".-t1 <string> or --text1 <string> (required)-t2 <string> or --text2 <string> (optional)generateIcon.jsnode generateIcon.js -o <file> -t1 <text1> [options]
This script generates a PNG icon file. The icon can have one or two lines of text and a specified background color. The text will be automatically scaled so the icon box has a specified padding. The default padding is 10% of the width. Each image is equal in width and height and may have rounded corners.
-c <color> or --color <color> (optional)<color> string may be any CSS color string or a color range separated by a ':'. If omitted, the default string is "rgb(0,50,255):rgb(0,0,127)".-ff <string> or --fontFamily <string> (optional)-fr <number> or --fontRatio <number> (optional)-fw <string> or --fontFamily <string> (optional)-o <file> or --output <file> (required)-p <number> or --padding <number> (optional)-r <number> or --radius <number> (optional)-s <number> or --size <number> (optional)-t1 <string> or --text1 <string> (required)-t2 <string> or --text2 <string> (optional)generateSplash.jsnode generateSplash.js -o <file> -t1 <text1> -w <width> -h <height> [options]
This script generates a PNG splash screen file of the specified width and height in pixels. The icon can have one or two lines of text, an optional image, and a specified background color.
The text and image will be automatically scaled so the icon box has a specified padding. The image will have the same width as the largest line of text and both will be scaled to fit the area inside the padding.
-o <file> or --output <file> (required)-c <color> or --color <color> (optional)<color> string may be any CSS color string or a color range separated by a ':'. If omitted, the default string is "rgb(0,50,255):rgb(0,0,127)".-ff <string> or --fontFamily <string> (optional)-fr <number> or --fontRatio <number> (optional)-fw <string> or --fontFamily <string> (optional)-h <number> or --height <number> (required)-i <file> or --image <file> (optional)-p <number> or --padding <number> (optional)-t1 <string> or --text1 <string> (required)-t2 <string> or --text2 <string> (optional)-w <number> or --width <number> (required)mdToToc.jsnode mdToToc.js <mdFile>
This script generates a Table of Contents in the <mdFile> Markdown file. The script looks for the following marker comments to delineate where to insert the Table of Contents:
<!-- toc start -->: Marks the start of the insertion area<!-- toc end -->: Marks the end of the insertion areaThe first time the script is run, it inserts the generated TOC between the markers. When the file is updated and the script is re-run, it deletes the content between the markers before generating and inserting a new TOC.
By default, the script will index all headers including the heading for the Table of Contents. You can prevent indexing by adding `` at the end of the line containing a heading that should not be indexed. The script will also look for a comment of the form <!-- toc opts:[string] -->. The [string] contains a comma-separated list of heading levels to index. All other heading levels will be omitted from the TOC. For example, a line containing <!-- toc opts:h2,h3 --> will restrict indexing to only heading levels 2 and 3.
The index is a simple list containing a link to the specified section that contains the section name. Here's an example from this page:
<!-- toc opts:h2,h3 -->
# Scripts Reference <!-- index="Documents --><!-- omit from toc" -->
## Related documents
* [Development, Debugging, and Troubleshooting](development.md)
## Table of contents
<!-- toc start -->
* [Introduction](#introduction)
* [<code>buildAirportDB.js</code>](#buildairportdbjs)
* [<code>generateIcon.js</code>](#generateiconjs)
* [<code>buildConfigIcons.js</code>](#buildconfigiconsjs)
* [<code>buildIndexIcons.js</code>](#buildindexiconsjs)
* [<code>checkMdLinks.js</code>](#checkmdlinksjs)
* [<code>generateFavicon.js</code>](#generatefaviconjs)
* [<code>generateIcon.js</code>](#generateiconjs)
* [<code>generateSplash.js</code>](#generatesplashjs)
* [<code>mdToToc.js</code>](#mdtotocjs)
* [<code>mdToHtml.js</code>](#mdtohtmljs)
* [<code>mdToIndex.js</code>](#mdtoindexjs)
<!-- toc end -->
---
## Introduction
...
<mdFile>mdToHtml.jsnode mdToHtml.js -i <inputMdFile> -o <outputHtmlFile> [options]
node mdToHtml.js [options] < <inputMdFile> > <outputMdFile>
This script converts a Markdown file to an HTML file. The input Markdown can use GFM format. The input Markdown file can be on stdin or it can be specified using -i <inputMdFile>. Similarly the output file can be sent to stdout or it can be specified using -o <outputMdFile>. If a -c <cssFile> argument is provided, then the specified CSS file will be linked in the output HTML.
-c <cssFile> (optional)-i <inputMdFile> (optional)stdin is used.-o <outputHtmlFile> (optional)stdout is used.mdToIndex.jsnode mdToIndex.js [options]
This script generates an alphabetic or category index of Markdown files in a specified directory to stdout. It searches all files with a .md extension in the directory. The -a option specifies that an alphabetic index is to be generated. Otherwise, a category and sub-category index is generated.
The alphabetic index is a simple list with links to the indexed files and anchors. The category and sub-category index is an index of ### (h3) elements with the category name and #### (h4) subcategories, which contain a list of all the indexed items underneath. The categories, subcategories, and indexed lists are sorted alphabetically.
The script searches each Markdown file for comments of the form:
# <headingText> `<!-- index="<category>:<subcategory>" -->`
The heading can be at any level, but the comment must follow on the same line. This will generate a list item with a link containing the <headingText> with the file and heading as the target and anchor. The list item will be sorted into the alphabetic list when requested or placed in the correct sub-category list when a categorized list is requested.
The script also searches each Markdown file for comments of the form:
<!-- target="<targetText>" index="<category>:<subcategory>" -->
This will create a link to this file using <targetText> for the link text. This will add the link to both the alphabetical and category indexes. The latter will be under the requested <category> and <subcategory>.
The script is intended to be used by a build environment to create a Markdown file containing an index of the indexed Markdown targets in a directory. The build environment must create the surrounding elements and then use this script to generate the index contents where desired.
-a (optional)-d <directory> or --directory <directory> (optional)-i <directory> or --index-directory <directory> (optional)-v or --verbose (optional)