File "highlight.inc"
Path: /MaNo/inc/highlight.inc
File size: 3.97 KB
MIME-type:
Charset: 8 bit
'
' This INCLUDE file offers functions to be used with the 'highlight' tool
' - http://www.andre-simon.de/doku/highlight/en
' - http://www.andre-simon.de/doku/highlight/en/highlight.php
'
FUNCTION HL_is_valid_language(lng AS STRING) AS LONG
' Returns '-1' if 'highlight' is not properly installed
' '+1' if valid lexer
' '0' if invalid lexer
LOCAL lng_lst AS STRING
lng_lst = EXE.PATH$ + "highlight\README_LANGLIST.TXT"
lng_lst = Load_File(STRPTR(lng_lst))
REPLACE $CRLF WITH $SPC + $LF + $SPC IN lng_lst
IF lng_lst = "" THEN
FUNCTION = -1
ELSEIF ISTRUE INSTR(LCASE$(lng_lst), $SPC + TRIM$(LCASE$(lng)) + $SPC) THEN
FUNCTION = +1
ELSE
FUNCTION = 0
END IF
END FUNCTION
'
FUNCTION HL_extension(lng AS STRING) AS STRING
' Returns the first file extension for a given language
' This function must be called only after HL_is_valid_language(lng) returned +1
LOCAL lng_lst AS STRING
LOCAL i, j AS LONG
lng_lst = EXE.PATH$ + "highlight\README_LANGLIST.TXT"
lng_lst = Load_File(STRPTR(lng_lst))
REPLACE $CRLF WITH $SPC + $LF + $SPC IN lng_lst
i = INSTR(LCASE$(lng_lst), $SPC + TRIM$(LCASE$(lng)) + $SPC)
i = INSTR(i-LEN(lng_lst),lng_lst,$LF) + 1 ' start of line
i = INSTR(i,lng_lst,":") + 2 ' start of extensions
j = INSTR(i,lng_lst," ") ' end of first extension
FUNCTION = MID$(lng_lst,i,j-i)
END FUNCTION
'
FUNCTION HL_highlighted(cod AS STRING, lng AS STRING) AS STRING
' Returns an highlighted html for a given code and language specification
' This function must be called only after HL_is_valid_language(lng) returned +1
LOCAL tmpi AS STRING
LOCAL tmpo AS STRING
LOCAL cmd AS STRING
LOCAL args AS STRING
LOCAL buf AS STRING
LOCAL i, j AS LONG
tmpi = EXE.PATH$ + "code." + HL_extension(lng)
tmpo = EXE.PATH$ + "code.htm"
cmd = EXE.PATH$ + "highlight\highlight.exe"
args = " -i " + $DQ + tmpi + $DQ _
+ " -o " + $DQ + tmpo + $DQ
Save_File STRPTR(tmpi), cod ' save code as tmp file with valid language extension
SHELL cmd + args,%SW_HIDE ' run 'highlight' **synchronously** on tmp file
buf = Load_File(STRPTR(tmpo)) ' load result in buffer
KILL tmpi : KILL tmpo
KILL EXE.PATH$ + "highlight.css" ' do some clean-up
IF buf = "" THEN
FUNCTION = cod ' there was an error: return original code (not highlighted)
ELSE
i = INSTR(buf,"<pre")
i = INSTR(i+1,buf,">") + 1
j = INSTR(i,buf,"</pre>")
FUNCTION = MID$(buf,i,j-i) ' everything went well: return highlighted code
END IF
END FUNCTION
'
FUNCTION HL_to_github(html AS STRING) AS STRING
' Returns a 'GitHub' flavored html for a 'highlight' flavored html
' This function takes a string returned by HL_highlighted() as entry
LOCAL r AS STRING
r = html
REPLACE "hl kwa" WITH "pl-pds" IN r
REPLACE "hl kwb" WITH "pl-id" IN r
REPLACE "hl kwd" WITH "pl-en" IN r
REPLACE "hl num" WITH "pl-c1" IN r
REPLACE "hl str" WITH "pl-s" IN r
REPLACE "hl slc" WITH "pl-c" IN r
REPLACE "hl opt" WITH "pl-k" IN r
REPLACE "hl kwc" WITH "pl-v" IN r
REPLACE "hl esc" WITH "pl-e" IN r
REPLACE "hl pps" WITH "pl-s1" IN r
REPLACE "hl com" WITH "pl-mo" IN r
REPLACE "hl ppc" WITH "pl-ent" IN r
REPLACE "hl ipl" WITH "pl-ml" IN r
REPLACE "hl lin" WITH "pl-smi" IN r
FUNCTION = r
END FUNCTION
'