Style R flavour checker ;-) { Hi Joel and all, here is a littel toy to play with style R . based on carls %clean-script.r . clip some code, start script, see if you like it :)
-Volker } [ REBOL [ Title: "REBOL Script Cleaner" Hacked-by: "Volker Nitsch" one-bug: "inserts empty lines sometimes" Author: "Carl Sassenrath" File: %clean-script-style-r.r based-on: [%clean-script.r "rebol-library"] Date: 30-May-2000 Email: [EMAIL PROTECTED] Purpose: { Cleans REBOL scripts by parsing the REBOL code and supplying /cut: standard/now: Style R/ indentation and spacing. } Note: { Now it uses Joels Style R. and is hacked. ups. Well, its a toy. if Carl sees this by accident and think its more i have to do some cleanup.. Original Note by Carl: This script produces STANDARD script indentation and spacing. No doubt you will want to modify it to use your own rules. Send your enhancements and I will consider adding them to the distribution... but keep this header intact and keep the code clean. No hacks. } Category: [script util text 3] History: [ "Carl Sassenrath" 1.0.0 27-May-2000 "Original program." ] ] script-cleaner: make object! [ out: none ; output text indent: copy "" ; holds indentation tabs last-indent: none tab-spaces: next detab to-string tab big-letters: charset [#"A" - #"Z"] emit-line: func [] [ if "" = trim/lines copy last-indent [clear last-indent] append out newline ] emit-space: func [pos /local more b2 bracket b1] [ append out any [ if newline = last out [ any [ if all ;move terminating bracket down [ find "[(" bracket: first b2: back back tail out not find "[(" first pos ] [ clear b2 Emit-line Last-indent: tail out join next indent [bracket tab] ] if all [ find ["^-)^/" "^-]^/"] back back b1: back tail out find ")]" first pos any ;starts line with closing bracket? [ tail? more: next skip last-indent length? indent find ")]" first more ] ] [ remove b1 remove last-indent tab-spaces ] do [ last-indent: tail out indent ] ] ] if find ")]" first pos [ if any ;starts line with closing bracket? [ tail? more: skip last-indent 1 + length? indent find ")]" first more ] [ if tab = first back more [remove last-indent] ] either find ")]" last out [tab] [""] ] if find "[(" last out [ either any ;starts line with opening bracket? [ tail? more: skip last-indent length? indent find "[(" first more ] [tab] [""] ] " " ] ] emit: func [from to] [emit-space from Append out copy/part from to] clean-script: func [ "Returns new script text with standard spacing." script "Original Script text" /local str new blk-rule value more ] [ out: append clear copy script newline parse copy script blk-rule: [ any [ str: newline (emit-line) | #";" [thru newline | to end] new: (emit str new) | [ #"[" | #"("] (emit str 1 Append indent tab) blk-rule | [ #"]" | #")"] (remove indent Emit str 1) | skip ( set [value new] load/next str either all [ ;uppercase in line? add sme spaces not find "^/" last out any-word? :value find big-letters first str not any ;starts line with opening bracket? [ tail? more: skip last-indent length? indent find "[(" first more ] ] [ emit-space str append out join tab-spaces copy/part str new ] [ emit str new] ) :new ] ] remove out ; remove first char if error? error: try [ either equal? load script load out [return out] [ alert "formatting error (type 1)! keeping original." return script ] ] [ alert "formatting error (type 2)! keeping original." return script ] ] ] /main make script-cleaner [ view center-face layout [across backdrop [quit] t1: area para [] 600x400 detab clean-script Read clipboard:// s1: slider 16x400 [scroll-para t1 s1] ] ] ] -- To unsubscribe from this list, please send an email to [EMAIL PROTECTED] with "unsubscribe" in the subject, without the quotes.