<commit_before>@echo off & rem { /* CSS comment hiding the batch section from CSS
:##############################################################################
:#		    							      #
:#  Filename        md2h.bat                                                  #
:#		    							      #
:#  Description     Convert GitHub MarkDown to HTML, and display it           #
:#		    							      #
:#  Notes 	    This file is a dual Batch+CSS script.		      #
:#		    Dummy CSS definitions on the first line hide the batch    #
:#		    section inside a CSS comment.			      #
:#		    							      #
:#		    Uses the GitHub markdown API:			      #
:#		    https://developer.github.com/v3/markdown/		      #
:#                                                                            #
:#		    Includes the stylesheet (w. its copyright message) from:  #
:#		    https://gist.github.com/tuzz/3331384		      #
:#		    							      #
:#  Author:	JFL <EMAIL>	    <NAME>	      #
:#		    							      #
:#  History:	    							      #
:#   2019-11-30 JFL Created this script.				      #
:#		                                                              #
:#         © Copyright 2019 Hewlett Packard Enterprise Development LP         #
:# Licensed under the Apache 2.0 license  www.apache.org/licenses/LICENSE-2.0 #
:##############################################################################

setlocal EnableExtensions DisableDelayedExpansion
set "VERSION=2019-12-05"
set "SCRIPT=%~nx0"		&:# Script name
set "SNAME=%~n0"		&:# Script name, without its extension
set "SPATH=%~dp0"		&:# Script path
set "SPATH=%SPATH:~0,-1%"	&:# Script path, without the trailing \
set "SFULL=%~f0"		&:# Script full pathname
set ^"ARG0=%0^"			&:# Script invokation name
set ^"ARGS=%*^"			&:# Argument line

set "GITHUB=https://api.github.com"

goto :main

:#----------------------------------------------------------------------------#

:is_newer FILE1 FILE2
:# Query xcopy to know if the copy by date would be done.
:# If the copy is done, the file name is output.
:# If that name does not contain "\", then the drive name "C:" is prepended!
:# So search either for a : or a \
if not exist %2 exit /b 0 &:# ERRORLEVEL 0 if target is missing
xcopy /d /l /y %1 %2 | findstr ": \\" >nul &:# ERRORLEVEL 0 if newer, 1 if older
if errorlevel 1 %ECHO.D% %2 is already up-to-date
exit /b

:#----------------------------------------------------------------------------#

:help
echo %SCRIPT% - Convert GitHub MarkDown to HTML, and display it
echo.
echo Usage: %SCRIPT% [OPTIONS] PATHNAME
echo.
echo Options:
echo   -?    Display this help message and exit
echo   -v    Display curl progress messages
echo   -V    Display the script version and exit
echo   -X    Display the commands to execute, but don't run them
echo.
echo Note: This program uses curl.exe. For old Windows versions that don't have it,
echo       curl.exe can be downloaded from https://curl.haxx.se/windows/
exit /b 0

:#----------------------------------------------------------------------------#

:main
set "MD="
set "DEBUG=0"
set "ECHO.D=if 0==1 echo"
set "ECHO.V=if 0==1 echo"
set "OPTS= -s"
set "EXEC="
set ">=>"
set ">>=>>"

goto :get_arg
:next_arg
shift
:get_arg
if [%1]==[] goto :start
set "ARG=%~1"
if "%ARG%"=="-?" goto :help
if "%ARG%"=="/?" goto :help
if "%ARG%"=="-d" set "DEBUG=1" & set "ECHO.D=echo" & goto :next_arg
if "%ARG%"=="-v" set "OPTS=%OPTS: -s=%" & set "ECHO.V=echo" & goto :next_arg
if "%ARG%"=="-V" (echo %VERSION%) & exit /b
if "%ARG%"=="-X" set "EXEC=echo" & set ">=^>" & set ">>=^>^>" & goto :next_arg
if "%ARG:~0,1%"=="-" >&2 echo Error: Unexpected switch: %1 & exit /b 1
if not defined MD set "MD=%~1" & goto :next_arg
>&2 echo Error: Unexpected argument: %1
exit /b 1

:start
if not defined MD goto :help
if not exist "%MD%" (
  >&2 echo Error: File "%MD%" not found
  exit /b 1
)
%ECHO.D% # Server: %GITHUB%
for %%f in ("%MD%") do set "HTML=%TEMP%\%%~nf.htm"
%ECHO.D% # HTML file: "%HTML%"
set "CSS=%TEMP%\github.css"
%ECHO.D% # CSS file: "%HTML%"
for %%f in ("%CSS%") do set "HREF=%%~nxf"

setlocal EnableExtensions EnableDelayedExpansion

:# Unfortunately, Chrome refuses to load style sheets from files, unless they end with the .css extension.
:# So do not load this batch directly, but instead make a renamed copy in the %TEMP% directory.
:# Update the .css copy if needed
call :is_newer "!SFULL!" "!CSS!" &:# ERRORLEVEL 0 if newer, 1 if older
if not errorlevel 1 (
  %ECHO.D% # Updating "!CSS!"
  %EXEC% copy /y "!SFULL!" "!CSS!" %>% NUL
)

set "LT=<"
set "GT=>"

 > "!HTML!" echo !LT!html!GT!

>> "!HTML!" echo !LT!head!GT!
>> "!HTML!" echo !LT!meta charset="UTF-8"!GT!
>> "!HTML!" echo !LT!link rel="stylesheet" type="text/css" href="!HREF!"!GT!
>> "!HTML!" echo !LT!/head!GT!

>> "!HTML!" echo !LT!body!GT!
%EXEC% curl%OPTS% %GITHUB%/markdown/raw -X "POST" -H "Content-Type: text/plain" --data-binary "@!MD!" %>>% "!HTML!"
if errorlevel 9009 (
  >&2 echo This program uses curl.exe. For old Windows versions that don't have it,
  >&2 echo curl.exe can be downloaded from https://curl.haxx.se/windows/
  exit /b 1
)
if errorlevel 1 exit /b &:# Any other error is curl's own. Leave it to curl's message to explain.
>> "!HTML!" echo !LT!/body!GT!

>> "!HTML!" echo !LT!/html!GT!

%EXEC% "!HTML!"

exit /b

:#----------------------------------------------------------------------------#
:# Style sheet from https://gist.github.com/tuzz/3331384 - End of batch section comment */ }<commit_msg>Display which server was used. Display an error message if curl failed.<commit_after>@echo off & rem { /* CSS comment hiding the batch section from CSS
:##############################################################################
:#		    							      #
:#  Filename        md2h.bat                                                  #
:#		    							      #
:#  Description     Convert GitHub MarkDown to HTML, and display it           #
:#		    							      #
:#  Notes 	    This file is a dual Batch+CSS script.		      #
:#		    Dummy CSS definitions on the first line hide the batch    #
:#		    section inside a CSS comment.			      #
:#		    							      #
:#		    Uses the GitHub markdown API:			      #
:#		    https://developer.github.com/v3/markdown/		      #
:#                                                                            #
:#		    Includes the stylesheet (w. its copyright message) from:  #
:#		    https://gist.github.com/tuzz/3331384		      #
:#		    							      #
:#  Author:	JFL <EMAIL>	    <NAME>	      #
:#		    							      #
:#  History:	    							      #
:#   2019-11-30 JFL Created this script.				      #
:#   2019-12-09 JFL Display which server was used.			      #
:#   2019-12-13 JFL Display an error message if curl failed.		      #
:#		                                                              #
:#         © Copyright 2019 Hewlett Packard Enterprise Development LP         #
:# Licensed under the Apache 2.0 license  www.apache.org/licenses/LICENSE-2.0 #
:##############################################################################

setlocal EnableExtensions DisableDelayedExpansion
set "VERSION=2019-12-13"
set "SCRIPT=%~nx0"		&:# Script name
set "SNAME=%~n0"		&:# Script name, without its extension
set "SPATH=%~dp0"		&:# Script path
set "SPATH=%SPATH:~0,-1%"	&:# Script path, without the trailing \
set "SFULL=%~f0"		&:# Script full pathname
set ^"ARG0=%0^"			&:# Script invokation name
set ^"ARGS=%*^"			&:# Argument line

set "GITHUB=https://api.github.com"
:# Within HPE, prefer HPE's corporate github server
:# Also this avoids having to configure the http_proxy environment variable.
nslookup github.hpe.com. 2>NUL | findstr /r /c:"[ 	]github.hpe.com$" >NUL
if not errorlevel 1 set "GITHUB=https://github.hpe.com/api/v3"

goto :main

:#----------------------------------------------------------------------------#

:# Quote file pathnames that require it.
:condquote	 %1=Input variable. %2=Opt. output variable.
setlocal EnableExtensions Disabledelayedexpansion
set "RETVAR=%~2"
if not defined RETVAR set "RETVAR=%~1" &:# By default, change the input variable itself
call set "P=%%%~1%%"
:# If the value is empty, don't go any further.
if not defined P set "P=""" & goto :condquote_ret
:# Remove double quotes inside P. (Fails if P is empty)
set "P=%P:"=%"
:# If the value is empty, don't go any further.
if not defined P set "P=""" & goto :condquote_ret
:# Look for any special character that needs quoting
:# Added "@" that needs quoting ahead of commands.
:# Added "|&<>" that are not valid in file names, but that do need quoting if used in an argument string.
echo."%P%"|findstr /C:" " /C:"&" /C:"(" /C:")" /C:"[" /C:"]" /C:"{" /C:"}" /C:"^^" /C:"=" /C:";" /C:"!" /C:"'" /C:"+" /C:"," /C:"`" /C:"~" /C:"@" /C:"|" /C:"&" /C:"<" /C:">" >NUL
if not errorlevel 1 set P="%P%"
:condquote_ret
:# Contrary to the general rule, do NOT enclose the set commands below in "quotes",
:# because this interferes with the quoting already added above. This would
:# fail if the quoted string contained an & character.
:# But because of this, do not leave any space around & separators.
endlocal&set %RETVAR%=%P%&exit /b 0

:#----------------------------------------------------------------------------#

:is_newer FILE1 FILE2
:# Query xcopy to know if the copy by date would be done.
:# If the copy is done, the file name is output.
:# If that name does not contain "\", then the drive name "C:" is prepended!
:# So search either for a : or a \
if not exist %2 exit /b 0 &:# ERRORLEVEL 0 if target is missing
xcopy /d /l /y %1 %2 | findstr ": \\" >nul &:# ERRORLEVEL 0 if newer, 1 if older
if errorlevel 1 %ECHO.D% %2 is already up-to-date
exit /b

:#----------------------------------------------------------------------------#

:help
echo %SCRIPT% - Convert GitHub MarkDown to HTML, and display it
echo.
echo Usage: %SCRIPT% [OPTIONS] PATHNAME
echo.
echo Options:
echo   -?    Display this help message and exit
echo   -v    Display curl progress messages
echo   -V    Display the script version and exit
echo   -X    Display the commands to execute, but don't run them
echo.
echo Note: This program uses curl.exe. For old Windows versions that don't have it,
echo       curl.exe can be downloaded from https://curl.haxx.se/windows/
exit /b 0

:#----------------------------------------------------------------------------#

:main
set "MD="
set "DEBUG=0"
set "ECHO.D=if 0==1 echo"
set "OPTS= -s"
set "EXEC="
set ">=>"
set ">>=>>"
set "TRUE.EXE=(call,)"	&:# Macro to silently set ERRORLEVEL to 0

goto :get_arg
:next_arg
shift
:get_arg
if [%1]==[] goto :start
set "ARG=%~1"
if "%ARG%"=="-?" goto :help
if "%ARG%"=="/?" goto :help
if "%ARG%"=="-d" set "DEBUG=1" & set "ECHO.D=echo" & goto :next_arg
if "%ARG%"=="-v" set "OPTS=%OPTS: -s=%" & goto :next_arg
if "%ARG%"=="-V" (echo %VERSION%) & exit /b
if "%ARG%"=="-X" set "EXEC=echo" & set ">=^>" & set ">>=^>^>" & goto :next_arg
if "%ARG:~0,1%"=="-" >&2 echo Error: Unexpected switch: %1 & exit /b 1
if not defined MD set "MD=%~1" & goto :next_arg
>&2 echo Error: Unexpected argument: %1
exit /b 1

:start
if not defined MD goto :help
if not exist "%MD%" (
  >&2 echo Error: File "%MD%" not found
  exit /b 1
)
%ECHO.D% # Server: %GITHUB%
for %%f in ("%MD%") do set "HTML=%TEMP%\%%~nf.htm"
%ECHO.D% # HTML file: "%HTML%"
set "CSS=%TEMP%\github.css"
%ECHO.D% # CSS file: "%HTML%"
for %%f in ("%CSS%") do set "HREF=%%~nxf"

setlocal EnableExtensions EnableDelayedExpansion

:# Unfortunately, Chrome refuses to load style sheets from files, unless they end with the .css extension.
:# So do not load this batch directly, but instead make a renamed copy in the %TEMP% directory.
:# Update the .css copy if needed
call :is_newer "!SFULL!" "!CSS!" &:# ERRORLEVEL 0 if newer, 1 if older
if not errorlevel 1 (
  %ECHO.D% # Updating "!CSS!"
  %EXEC% copy /y "!SFULL!" "!CSS!" %>% NUL
)

:# Tell the user which of the possible github servers was used.
for %%m in ("%MD%") do set "NXMD=%%~nxm" &:# Extract the .md file name and extension
for /f "delims=/ tokens=2" %%u in ("%GITHUB%") do set "SERVER=%%u" &:# Extract the server DNS name
call :condquote NXMD
echo # Converting %NXMD% using %SERVER%

set "LT=<"
set "GT=>"

 > "!HTML!" echo !LT!html!GT!

>> "!HTML!" echo !LT!head!GT!
>> "!HTML!" echo !LT!meta charset="UTF-8"!GT!
>> "!HTML!" echo !LT!link rel="stylesheet" type="text/css" href="!HREF!"!GT!
>> "!HTML!" echo !LT!/head!GT!

>> "!HTML!" echo !LT!body!GT!
%TRUE.EXE% &:# Set ERRORLEVEL to 0. Useful in no-exec mode to avoid triggering error messages below.
%EXEC% curl%OPTS% %GITHUB%/markdown/raw -X "POST" -H "Content-Type: text/plain" --data-binary "@!MD!" %>>% "!HTML!"
if errorlevel 9009 (
  >&2 echo This program uses curl.exe. For old Windows versions that don't have it,
  >&2 echo curl.exe can be downloaded from https://curl.haxx.se/windows/
  exit /b 1
)
if errorlevel 1 ( :# curl sometimes fails silently, so add our won message
  >&2 echo curl.exe failed with error %ERRORLEVEL%. Aborting.
  exit /b
)
>> "!HTML!" echo !LT!/body!GT!

>> "!HTML!" echo !LT!/html!GT!

%EXEC% "!HTML!"

exit /b

:#----------------------------------------------------------------------------#
:# Style sheet from https://gist.github.com/tuzz/3331384 - End of batch section comment */ }
{'fraction_non_alphanumeric': 0.22410275783906308, 'fraction_numerical': 0.015867019267094825, 'mean_word_length': 2.405196809879084, 'pattern_counts': {'":': 2, '<': 11, '<?xml version=': 0, '>': 87, 'https://': 13, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 20, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4904026', 'n_tokens_mistral': 4741, 'n_tokens_neox': 4223, 'n_words': 1528}