#!/usr/bin/env perl
#===============================================================================
#
#         FILE: validate_html
#
#        USAGE: ./validate_html file
#
#  DESCRIPTION: Validate HTML show notes using HTML::Valid
#
#      OPTIONS: ---
# REQUIREMENTS: ---
#         BUGS: ---
#        NOTES: Much of this code is as seen in 'htmlok' because the
#               documentation with HTML::Valid is poor.
#       AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
#      VERSION: 0.0.3
#      CREATED: 2018-06-01 16:25:27
#     REVISION: 2019-11-10 21:25:06
#
#===============================================================================

use 5.010;
use strict;
use warnings;
use utf8;

# In the POD, without explanation
use FindBin '$Bin';

# Found in 'htmlok', not documented
use HTML::Valid 'sanitize_errors';
use Path::Tiny;

#
# Version number (manually incremented)
#
our $VERSION = '0.0.3';

#
# Script and directory names
#
( my $PROG = $0 ) =~ s|.*/||mx;
( my $DIR  = $0 ) =~ s|/?[^/]*$||mx;
$DIR = '.' unless $DIR;

#-------------------------------------------------------------------------------
# Declarations
#-------------------------------------------------------------------------------
#
# Constants and other declarations
#
my $basedir = "$ENV{HOME}/HPR/Show_Submission";

#
# Enable Unicode mode
#
binmode STDOUT, ":encoding(UTF-8)";
binmode STDERR, ":encoding(UTF-8)";

#
# Create the object
#
my $htv = HTML::Valid->new(
    quiet          => 1, # omit summary, etc
    doctype        => 'omit',
    show_body_only => 1, # print only the contents of the body tag as an HTML fragment
    show_info      => 1, # test; omit info-level messages
    show_warnings  => 1, # include warnings if set
);

#
# We expect a file as an argument
#
my $file = shift @ARGV;
die "Usage: $PROG filename\n" unless $file;
my $content;
if ( -f $file ) {
    $content = path($file)->slurp_utf8();
    $htv->set_filename($file);
}
else {
    die "$PROG: Cannot find '$file'.\n";
}

#
# Largely undocumented but seen in 'htmlok'
#
my ( undef, $errors ) = $htv->run($content);
if ($errors) {
    print sanitize_errors ($errors);
    exit 1;
}

exit;

# vim: syntax=perl:ts=8:sw=4:et:ai:tw=78:fo=tcrqn21:fdm=marker