USAGE NOTES
static site checker
https://ssc.lu/
(c) 2020-2022 Dylan Harris


Running SSC
===========
To run SSC, install curl (if necessary), bring up the command line, change to
the install directory, and then try:

    Windows: ssc
    Unix: ./ssc

If it is installed correctly, it should respond with (c) info.

It is possible to set up configuration files, but, to start, we'll try a simple
set of command line options. It the HTML files belonging to your website is
located in DIR, and the main index file is called index.html, then all you need
type is:

ssc DIR

and off it will go, reporting on any issues it finds in all HTML files in DIR
and its descendants.

reports
-------
When ssc reports issues, it reports the HTML where it realised there was a
problem, with the corresponding line number. This may be after the actual point
of the problem. Consider, for example:

<P>Wombats on taost<A href="https://example.com/superdoopersecretrecipe.html"
title="what a wonderful page oh so wow" onclick="haltandcatchfire"
onhover="winkembarrassingly" wimper=frequently>a delicious</A> thing.</P>

The word ssc spots is "taosta". It knows there's a word to check when it gets
to the end of the word, e.g. at the space that follows it. In this case, the
word is interrupted by rather a lot of HTML, which is ignored when checking
spelling. Because the intervening HTML is so long, crossing a number of lines,
and ssc reports small snippets of HTML per issue, to avoid spouting too much
verbiage, it will not show sufficient HTML to see the entire misspelt word.
That's why, for some errors, you must take the HTML snippet and corresponding
line number as a hint, not an absolute. There is an issue, it is near the
reported HTML and line number, but, in this case, is not actually there. Of
course, the report of the misspelt word does report the word it considers
misspelt (here, "taosta").


switches
--------
SSC has a number of switches:

-h	        Output simple help
-V	        Output the version of SSC
-f file	    Load a runtime configuration from file
-F	        Load a runtime configuration from ~/.ssc/config

-o file     Output report to file

-v x	    Report level x issues, where x is
	0 None
	1 Catastrophes
	2 Errors
	3 Warnings
	4 Info
	5 Comments
	6 Debug
	7... more and more debug

-I	        Process (simple) Server Side Includes
-g dir      set website root directory (defaults to current directory)
-x xxx      treat files with extension xxx as HTML/XHTML (may be repeated)
-i file     file is index file in directories (default index.html)
-s dom      dom is the local site’s domain name (may be repeated)
-L arg      Define virtual directory (arg is formatted ‘virtual=physical’)
            (may be repeated)

-e	        Check external links (each link is checked once per run, not once
            per encounter)
-3	        Report HTTP 301 and 308 as errors (e.g. forwarding)
-l	        Check internal links
-O	        Report each broken link only once, not each time it occurs
-r	        Do not check whether https certificates have been revoked
-X	        Check crosslinked IDs (e.g. id attribute)

-M	        Check microformats.org set using class attribute
-m	        Check schema.org data set using WhatWG microdata attributes

-S	        Report site statistics

A longer list of switches is given by the -h switch.


Environment
-----------
SSC will process the following environment variables:
SSC_CONFIG  name of configuration file if none given on the command line
SSC_ARGS    command line switches

SSC will recognise when it is running in a CGI environment by processing
QUERY_STRING and other CGI environment variables. In such circumstances,
QUERY_STRING must contain a parameter called html.snippet, with an appropriate
value.



Configuration Files
===================

SSC will accept configuration files in INI file format. Here are some examples,
mostly adapted from the tests:


A simple configuration file
---------------------------
[general]
verbose=4
output=ssc.out
class=yes

[site]
domain=example.edu
extension=html
index=index.html
root=~/www/htdocs

The website for example.edu can be found in ~/www.htdocs. Standard index files
are called index.html, and html files always have the html extension.

The configuration outputs errors, warnings and info messages to ssc.out. It
analyses class identifiers, so will scan CSS files for class names.


Links and virtual directories
-----------------------------
[general]
verbose=4
output=ssc.out

[site]
domain=example.edu
extension=html
index=index.html
root=~/www/htdocs
virtual=/net=tests/virtual

[link]
check=yes
external=yes
xlink=yes

Beyond the previous example, SSC will also check links, including external
links and crosslinked ids.

The configuration file specifies a virtual directory. When a link refers to the
local directory /net, SSC will seek the corresponding file(s) in tests/virtual
(relative to the current directory, not the root).


Microformats
------------
[general]
verbose=4
output=ssc.out
class=yes

[site]
domain=example.edu
extension=html
index=index.html
root=~/www/htdocs

[microformat]
verify=yes

The only new thing here is to turn on microformats analysis (class analysis is
required).


Microdata
------------
[general]
verbose=4
output=ssc.out
class=yes

[site]
domain=example.edu
extension=html
index=index.html
root=~/www/htdocs

Actually, SSC will report on any microdata it finds, no matter what. Note that,
if you use itemref in your pages, ssc may give false warnings in the section
referenced by the itemref. This is because ssc does not always know that the
referenced data is not intended to be used in its own right, unless you put it
under a TEMPLATE
element.

You can export the microdata encountered in JSON file format by using the
export setting (not shown).


Statistics
----------
[general]
ssi=yes
verbose=4
output=ssc.out
class=yes

[site]
domain=example.edu
extension=html
extension=shtml
index=index.html
root=~/www/htdocs

[stats]
summary=yes

Turn on summary statistics, which produces a grand total at the end of a
complete run (add page=yes below summary for individual page stats).

Note that server side includes have been turned on using general.ssi, and files
with the SHTML extension will be treated as web pages.


MathML 2
--------
This configuration file could be used to test MathML 2.

[general]
verbose=4
output=m2.out
class=yes

[link]
check=yes

[site]
domain=example.edu
extension=html
index=index.html
root=~/www/htdocs

[math]
version=2

[validation]
citype=function
citype=list
citype=logical
citype=matrix
citype=set
citype=var-x
citype=vector

What's interesting here is the validation section. The MathML documentation
lists a specific set of values that can be used with the TYPE attribute on the
CI element. The examples in the specification give this attribute many
additional, and apparently illegal, values. (This apparent inconsistency is not
uncommon amongst web specifications.) The way to avoid SSC complaining about
these extra values is to give CI TYPE additional values in the configuration
file, as noted.

Indeed, many enumerated attribute values can be extended in this way. Use the
--validation switch to get a complete list.


arts & ego
----------
This is the configuration file I use to analyse my site.

[general]
verbose=4
class=yes
output=ssc.out
ssi=yes

[site]
domain=dylanharris.org
extension=shtml
extension=html
extension=htm
extension=asp
index=index.shtml
root=X:\Site

[link]
check=yes
xlink=yes

[microformat]
verify=yes

[stats]
summary=yes

My site has been built by hand over the decades, and is full of errors. I wrote
ssc because I was frustrated that I could find no tool to properly check it.
Unfortunately, SSC is too successful: it finds hundreds of errors in arts &
ego. I am slowly repairing the site accordingly.
