Glenn Barnas
KiX Supporter
Registered: 2003-01-28
Posts: 4396
Loc: New Jersey
WARNING - the PostPrep.zip attached to this post does not work with Kix32 version 4.63. An update is being tested and will be uploaded when validated.
For those of you that don't know - PostPrep is the Kix script that colorizes kix code, generating HTML that can be pasted directly into a message as you see below, without using Code tags. You must select HTML or HTML/UBB as the message type when posting a message with PostPrep content.
This postprep release runs from a command line -
Kix32 ppcl.kix -s:myscript.kix -c
The postprepped code is placed on the clipboard, ready to paste into a KORG message. The default (without -c) writes a .HTM file with the same name as the source file. Run without args for usage info.
The PostPrep.INI file will be posted in the next message. The script expects this file to be in the path defined by %S_CONFIG%, or - if not there - in @SCRIPTDIR.
This version is quick & easy to use, and is capable of postprepping an entire folder of Kix files automatically. The zip file contains both the GUI and command-line versions of PostPrep, and both share a common configuration file.
Due to the size of this post, it is presented in 3 parts. Parts 1 & 2 are the core script, part 3 is the config file. The code presented here is primarily to illustrate the concept and code structure. You are strongly encouraged to download the entire code set - PostPrep.kxw, PostPrep.ini, PPCL.Kix, and the ReadMe.txt file from the attached zip file. Only the zip file will be updated as versions change!!
Enjoy!
Glenn
;; KixGenerated: 2007/10/13 21:46:19
; UBB PostPrep 2.0.0
; ----------------------------------------------------------------------------------------------
; MINIMUM REQUIREMENTS
;
; KIXTART 4.53 (KiX32.exe)
; ----------------------------------------------------------------------------------------------
; AUTHORs
; Glenn Barnas - This development tree
; ----------------------------------------------------------------------------------------------
; ACKNOWLEDGEMENTS
; Jochen Polster - Form, Controls, original design
; Jooel Nieminen - original conversion Engine !
; ----------------------------------------------------------------------------------------------
; VERSION HISTORY
;
; 2.0.0.0 - 12/30/2006 Glenn Barnas - New development tree based on PostPrep 1.0.3.4
; requires Kix 4.53
; COMMAND-LINE version, HTML only (no UBB output)
; 2.0.0.1 - 03/24/2007 Changes to Kix2Htm UDF
; 2.0.2.0 - 10/15/2007 Change to WC function to allow WORDWRAP=0 setting
; Added support to Kix2Htm() to support Block Comments
; ----------------------------------------------------------------------------------------------
Break On
Dim $ShowStats ; Display conversion time stats if true
Dim $Version ; Current version string
Dim $ ; general purpose "throwaway" var
Dim $ConfigFile ; Filespec for PPCL configuration file
Dim $SourceFile ; Source file to process
Dim $DestFile ; Output file
Dim $FileContent ; Content of file as a single string
Dim $CommandLine ; Command Line Args
Dim $I ; Index pointer
Dim $Clip ; Boolean - copy generated output to clipboard if true
Dim $Wrap ; Boolean - wrap long lines when true
Dim $Commands ; Array of Commands
Dim $Functions ; Array of Functions
Dim $Border ; Border / background specification
Dim $TimerS ; Start time of conversion
Dim $TimerE ; End time of conversino
Dim $Body ; Body text specifier
Dim $Sections [7 ] ; Types of formatting
Dim $ColorTable [7 ] ; Table of format colors for various types
Dim $BoldTable [7 ] ; Table of format bolding for various types
$Sections = 'Comments' ,'Strings' ,'Numbers' ,'Commands' ,'Functions' ,'Macros' ,'Operators' ,'Variables'
$ = SetAscii ('On' )
$ = SetOption ('Explicit' , 'On' )
$ = SetOption ('WrapAtEOL' , 'On' )
$ = SetOption ('NoVarsInStrings' , 'On' )
$ = SetOption ('NoMacrosInStrings' , 'On' )
$Version = '2.0'
; Exit if not at KiX V4.53
$ = KixVer('4.53' )
; initialization
$ConfigFile = ''
$SourceFile = ''
$DestFile = ''
; check for a Config file in the standard system configuration folder
If Exist (%S_CONFIG% + '\PostPrep.ini' )
$ConfigFile = %S_CONFIG% + '\PostPrep.ini'
EndIF
; If we didn't find it in the standard location, look in the folder where the script was launched
If Exist (@SCRIPTDIR + '\PostPrep.ini' ) And Not $ConfigFile
$ConfigFile = @SCRIPTDIR + '\PostPrep.ini'
EndIf
; Parse the command line
$CommandLine = GetCommandLine (1 )
; Complain and exit if no arguments were specified.
If UBound ($CommandLine ) = 1
'No input arguments were specified.' ?
' Usage: ppcl -s:SrcFileSpec [-o:DestFileSpec] [-p:AltConfigFile] [-c]' ?
' -c copies the resulting HTM output to the clipboard INSTEAD OF' ?
' generating the .HTM file.' ?
Quit 1
EndIF
; Have arguments - figure out what to do
For $I = 2 to UBound ($CommandLine )
Select
Case Left ($CommandLine [$I ], 3 ) = '-s:'
$SourceFile = SubStr ($CommandLine [$I ], 4 )
Case Left ($CommandLine [$I ], 3 ) = '-o:'
$DestFile = SubStr ($CommandLine [$I ], 4 )
Case Left ($CommandLine [$I ], 3 ) = '-p:'
$ConfigFile = SubStr ($CommandLine [$I ], 4 )
Case $CommandLine [$I ] = '-c'
$Clip = 1
Case 1
'Warning: Argument ' $CommandLine [$I ] ' was not understood! Ignored!' ?
EndSelect
Next
; Verify that the source file exists
If Not $SourceFile
? 'A source file was not specified - aborting!' ? ?
Quit 1
EndIF
If Not Exist ($SourceFile )
? 'The defined source file "' $SourceFile '" was not found - aborting!' ? ?
Quit 1
EndIf
; If the destination file wasn't specified, use the SourceFileSpec and change the extension to ".htm"
If Not $DestFile
$DestFile = Left ($SourceFile , InStrRev ($SourceFile , '.' )) + 'htm'
EndIf
; Abort if no config file was found, otherwise load the configuration settings
If Not $ConfigFile
'This Script requires a PostPrep.ini configuration - aborting!' ?
Quit 1
Else
; OK to proceed - read the configuration data
For $I = 0 to UBound ($Sections )
$ColorTable [$I ] = ReadProfileString ($ConfigFile , 'FormatTable' , $Sections [$I ] + 'Color' )
$BoldTable [$I ] = Bool(ReadProfileString ($ConfigFile , 'FormatTable' , $Sections [$I ] + 'Bold' ))
Next
$Commands = EnumIni($ConfigFile , 'Commands' )
$Functions = EnumIni($ConfigFile , 'Functions' )
; verify the config file contains valid information
If Not UBound ($Commands )
Or Not UBound ($Functions )
Or Not UBound ($ColorTable )
Or Not UBound ($BoldTable )
? 'This Script requires a consistent configuration file - aborting!' ? ?
Quit 1
EndIf
$ShowStats = Bool(ReadProfileString ($ConfigFile , 'Global' , 'ShowStats' ))
$Wrap = ReadProfileString ($ConfigFile , 'Global' , 'WordWrap' )
$Border = Bool(ReadProfileString ($ConfigFile , 'Global' , 'Border' ))
; Set the Border directive based on the flag value
If $Border
; read from PostPrep.ini - can be one of none,hidden,dotted,dashed,solid,double,groove,ridge,inset, or outset
$I = ReadProfileString ($ConfigFile , 'FieldSet' , 'Background-Color' )
$Border = 'background:' + IIf ($I , $I , 'white' )
$I = ReadProfileString ($ConfigFile , 'FieldSet' , 'Border-Style' )
$Border = $Border + ';border-style:' + IIf ($I , $I , 'none' )
$I = ReadProfileString ($ConfigFile , 'FieldSet' , 'Border-Width' )
$Border = $Border + ';border-width:' + IIf ($I , $I , '0' )
Else
$Border = 'background:white;border-style:none;border-width:0'
EndIf
; Define the body settings
$Body = '<font face="'
$I = ReadProfileString ($ConfigFile , 'FieldSet' , 'TypeFace' )
$Body = $Body + IIf ($I , $I , 'Courier New' )
$I = ReadProfileString ($ConfigFile , 'FieldSet' , 'FontSize' )
$Body = $Body + '" size="' + IIf ($I , $I , '2' )
$Body = $Body + '" color="#000000">'
EndIf
;===================================================================
; Load the file contents into a string
If Open (1 ,$SourceFile ,2 ) = 0
$I = ReadLine (1 ) + @CRLF
While @ERROR = 0
$FileContent = $FileContent + $I
$I = ReadLine (1 ) + @CRLF
Loop
$ = Close (1 )
Else
? 'Error opening ' $SourceFile ' - aborting!' ?
@SERROR ? ?
Quit 1
EndIf
;===================================================================
$TimerS = @TICKS
$FileContent = Kix2HTM($FileContent ,$ColorTable ,$BoldTable ,$Functions ,$Commands ,$Border , $Body , $Wrap )
$TimerE = @TICKS - $TimerS
; Copy to clipboard if the -c option was specified.
If $Clip
$ = CopyToClipboard($FileContent )
Else
Del $DestFile
$ = RedirectOutput ($DestFile )
$FileContent
$ = RedirectOutput ('' )
EndIf
; Display time statistics if requested
If $ShowStats
? 'PostPrep completed processing in '
If Val ($TimerE ) < 1000
$TimerE ' milliseconds.' ?
Else
($TimerE / 1000 ) '.' CStr($TimerE Mod 1000 ) ' seconds.' ?
EndIf
EndIf
Function CopyToClipboard($strCopy )
Dim $objIE
$objIE = CreateObject ("InternetExplorer.Application" )
$objIE .Navigate("about:blank" )
$CopyToClipboard = $objIE .document.parentwindow.clipboardData.SetData("Text" ,$strCopy )
$objIE .Quit
Exit @ERROR
EndFunction
;;
;;======================================================================
;;
;;FUNCTION Bool()
;;
;;ACTION return True if Flag is "non-zero", "T", "Y", or "ON"
;;
;;AUTHOR Glenn Barnas
;;
;;SYNTAX Bool(flag [,other_true] [,default])
;;
;;PARAMETERS Flag - REQUIRED, a text string - can be null
;;
;; Extra - OPTIONAL, a string of other "true" matches, comma-delimited.
;; "En*" will match the leftmost 2 chars
;;
;; Default - OPTIONAL, a default value to use if Flag is null
;;
;;REMARKS Returns TRUE if any of the following condidions are met:
;; First char of flag is "Y" (yes)
;; First char of flag is "T" (true)
;; First char of flag is a non-zero digit
;; Flag text is "ON"
;; Flag text matches optional Extra value
;;
;;RETURNS 1 if the flag evaluates to a "true" boolean, 0 otherwise
;;
;;DEPENDENCIES none
;;
;;TESTED WITH W2K, WXP, W2K3
;;
;;EXAMPLES If Bool(ReadProfileString('config.ini', 'sect', 'setting')
;; 'Setting is on!' ?
;; EndIf
;;
;; ; In this configuration, the default is T, and the config.ini value is
;; ; used to turn it off. If the setting in the ini file is not defined,
;; ; the default value is used.
;; $Default = 'T'
;; If Bool(ReadProfileString('config.ini', 'sect2', 'setting'), '', $Default)
;; 'Setting is on!' ?
;; EndIf
;
Function Bool($_Flag , OPTIONAL $_Extra , OPTIONAL $_Default )
; Handle embedded ReadLine errors passed to this wrapper func
If @ERROR Exit @ERROR EndIf
Dim $_XV , $_aXV , $bT , $bF
$bT = Not 0 ; TRUE value
$bF = Not $bT ; FALSE value
; set default value if defined and test value (Flag) is not defined
If $_Flag = '' And $_Default <> ''
$_Flag = $_Default
EndIf
$_Flag = UCase ($_Flag ) ; force uppercase chars
$Bool = $bF ; default to FALSE
If $_Extra
$_Extra = 'ON,TRUE,T,YES,Y,' + $_Extra
Else
$_Extra = 'ON,TRUE,T,YES,Y' ; default test values
EndIf
; Handle the numeric test
If Val ($_Flag ) <> 0 ; flag is non-zero
$Bool = $bT
EndIf
; process string comparisons
If Not $Bool
$_aXV = Split ($_Extra , ',' ) ; get array of string match values
For Each $_XV in $_aXV ; then compare each one
If InStr ($_XV , '*' ) ; is it a substring compare?
If UCase (Left ($_XV , InStr ($_XV , '*' ) - 1 )) = Left ($_Flag , InStr ($_XV , '*' ) - 1 )
$Bool = $bT
EndIf
Else ; or a direct compare
If UCase ($_XV ) = $_Flag
$Bool = $bT
EndIf
EndIf
Next
EndIf
Exit 0 ; always successful
EndFunction
;;
;;======================================================================
;;
;;FUNCTION EnumIni()
;;
;;ACTION Enumerates sections or keys of an INI file
;;
;;AUTHOR Glenn Barnas
;;
;;VERSION 2.0
;;
;;DATE CREATED 2003/11/17
;;
;;DATE MODIFIED 2004/10/16
;;
;;SYNTAX EnumIni(File [, Section])
;;
;;PARAMETERS File - REQUIRED, path/name of INI file to examine
;;
;; Section - OPTIONAL, Section name to parse
;;
;;REMARKS Returns an array containing the sections in an INI file, or
;; an array of key names in a specified section. Errors are returned
;; for non-existant files or INI file reads. If the specified file
;; contains no sections, or the specified section contains no keys,
;; the UDF exits with error 13 and returns a null array. Thus, a For-Each loop
;; will properly perform no iterations if no data is returned.
;;
;; CAUTION - Error 13 is returned for empty files, or nonexistant sections.
;; This is not necessarily a "failure".
;;
;;RETURNS Array of sections or keys in a section
;;
;;DEPENDENCIES none
;;
;;TESTED WITH Kix 4.2+, NT4, W2K, WXP, W2K3
;;
;;EXAMPLES $Sections = EnumIni('.\config.ini')
;; $Keys = EnumIni('.\config.ini', 'Common')
;
Function EnumIni($_fSrcFile , OPTIONAL $_fSectName )
Dim $_fSectList
; die if the file doesn't exist
If Exist ($_fSrcFile ) = 0
Exit 2
EndIf
; Get the list of sections or keys
$_fSectList = ReadProfileString ($_fSrcFile , $_fSectName , '' )
; Return if error occurred
If @ERROR
Exit @ERROR
EndIf
; If len is >0, return an array of sections
; If len is 0, either no sections or keys exist, or an invalid section name was specified. Return nothing.
If Len ($_fSectList ) > 0
$EnumIni = Split (Left ($_fSectList ,len ($_fSectList )-1 ), Chr (10 ))
Exit 0
EndIF
; return an error here for value not found (no sections or no keys in section)
Exit 13
EndFunction
Attachments
PostPrep.zip (1291 downloads) Description:
_________________________
Actually I
am a Rocket Scientist!