REBOL [
Title: "Color code REBOL code based on brackets"
]
;; [---------------------------------------------------------------------------]
;; [ This is a REBOL debugging tool. ]
;; [ Run the program, and when asked, open a REBOL code file. ]
;; [ The program will display the file in an html page, with a color change ]
;; [ at each opening bracket. At each closing bracket, the color will ]
;; [ revert to the previous color. ]
;; [ The use of this program is for locating missing brackets, which is a ]
;; [ common REBOL coding error and can be hard to find in a large program. ]
;; [---------------------------------------------------------------------------]
;; The colors can be changed to your liking.
COLOR-LIST: [
"#000000"
"#FF0000"
"#008500"
"#0000FF"
"#64C88B"
"#E0C800"
"#6BBDFF"
"#FFBD00"
"#FFbdFF"
"#660099"
]
;; Goes up as we hit open brackets, and back down for closed.
COLOR-IN-USE: 1
;; Our data areas.
TEXT-IN: copy ""
TEXT-IN-ID: none
TEXT-OUT: copy ""
TEXT-OUT-ID: %ColoredBlocks.html
;; Emit an opening font tag to set color of text to follow.
EMIT-FONT-TAG: does [
append TEXT-OUT rejoin [
{}
]
]
;; Emit closing font tag so we can re-open a new font tag.
EMIT-FONT-END: does [
append TEXT-OUT rejoin [
{}
]
]
;; Get the name of the file to scan; should be a REBOL script.
if not TEXT-IN-ID: request-file/only [
alert "No file selected."
quit
]
;; Set up the output html page.
append TEXT-OUT rejoin [
""
"Colored blocks"
""
""
newline
]
;; Bring in the data file as-is.
TEXT-IN: to-string read/binary TEXT-IN-ID
;; Set up the base level text color.
EMIT-FONT-TAG
;; Copy input to output, change colors as we find brackets.
foreach BYTE TEXT-IN [
if equal? BYTE #"[" [
EMIT-FONT-END
COLOR-IN-USE: COLOR-IN-USE + 1
EMIT-FONT-TAG
]
if equal? BYTE #"]" [
EMIT-FONT-END
COLOR-IN-USE: COLOR-IN-USE - 1
if equal? COLOR-IN-USE 0 [
COLOR-IN-USE: 1
]
EMIT-FONT-TAG
]
append TEXT-OUT BYTE
]
;; Close the html page.
append TEXT-OUT rejoin [
"
"
]
;; Put the output data on disk.
write/binary TEXT-OUT-ID TEXT-OUT
;; Pop up a browser to show the results.
browse TEXT-OUT-ID
;; Sample lines to put into a text file for testing.
;; Remove comment character before using.
;BASE TEXT [
; OPEN LEVEL 1 [
; OPEN LEVEL 2 [
; OPEN LEVEL 3 [
; OPEN LEVEL 4 [
; OPEN LEVEL 5 [
; OPEN LEVEL 6 [
; level 6 text
; ]
; level 5 text
; ]
; level 4 text
; ]
; level 3 text
; ]
; level 2 text
; ]
; level 1 text
; ]
; base level text
;]