Demo runner for Nick's Short Code Examples
Being too lazy to copy and paste, I wrote a program to read Nick's file of short examples, put them into a menu, and run them when selected from the menu. It's not a terribly long program even with my un-REBOL-ish style, so I will paste it in below in case anyone finds it useful. Some demos are not friendly to this kind of running, but most work. R E B O L [ title: 'Run the short demos of Nick Antonaccio' ] DEMOLIST: copy [] ;; Demo file, reassembled DEMOCODE: copy '' ;; Holding area for one block of demo code DEMOTITLE: copy '' ;; Holding area for one program title DEMOID: %demo.r ;; Temporary file for launching demo IS-HEADER?: func [ 'Check if a line of code is a REBOL header' SOURCELINE ] [ either equal? 'REBOL' copy/part trim/head SOURCELINE 5 [ return true ] [ return false ] ] GET-TITLE: func [ 'Extract any data between quotes (which will be the script title)' SOURCELINE ] [ IN-TITLE: false TITLELIT: copy '' foreach CHARACTER SOURCELINE [ either equal? CHARACTER #'^'' [ either IN-TITLE [ IN-TITLE: false ] [ IN-TITLE: true ] ] [ if IN-TITLE [ if not-equal? CHARACTER #'^'' [ append TITLELIT CHARACTER ] ] ] ] return TITLELIT ] ;; -- Bring the whole file into memory and remove the comment lines. DEMOFILE: read/lines http://re-bol.com/short_rebol_examples.r foreach LINE DEMOFILE [ if equal? ';' copy/part at trim/head LINE 1 1 [ remove DEMOFILE ] ] ;; -- Build a block of titles and the associeated REBOL code. foreach LINE DEMOFILE [ either IS-HEADER? LINE [ if not-equal? '' DEMOTITLE [ append DEMOLIST DEMOTITLE append DEMOLIST DEMOCODE ] DEMOTITLE: copy '' DEMOTITLE: GET-TITLE LINE DEMOCODE: copy '' append DEMOCODE rejoin [LINE newline] ] [ append DEMOCODE rejoin [LINE newline] ] ] ;; -- Save the last one if we hit end-of-file. if not-equal? '' DEMOTITLE [ append DEMOLIST DEMOTITLE append DEMOLIST DEMOCODE ] ;; -- Run the block of code for a selected title. RUN-DEMO: func [ CODE ] [ write/lines DEMOID CODE ;; Save to disk CODE-WINDOW/text: CODE ;; Show the code show CODE-WINDOW launch DEMOID ;; Use launch so we can close demo separately ] MAIN-WINDOW: layout [ across banner 'Select a demo to run it' return PROGRAM-LIST: text-list 400x700 data (extract DEMOLIST 2) [RUN-DEMO select DEMOLIST value] CODE-WINDOW: info 500x700 return button 'Quit' [quit] ] view center-face MAIN-WINDOW
posted by: Steven White 23-Mar-2016/16:01:45-7:00
Still a beginner am I. If you want the indenting preserved in the code window, go to those two lines with the "trim" function and replace it with "trim copy" because "trim" does not make a copy, and the trimming was removing leading spaces.
posted by: Steven White 23-Mar-2016/16:50:59-7:00
|