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! \:D