AI
Animation
CGI
Compression
Console
Database
Debug
Dialects
Dialogs
Editor
Email
Encryption
Extension
External Library
File
File Handling
Files
Financial
FTP
Game
Games
Graphics
GUI
HTML
HTTP
Internet
LDC
Markup
Math
Module
Network
Networking
None
Other - Net
Parse
Patch
Printing
Protocol
Rebol
Scheme
Scientific
SDK
Security
Shell
Sound
SQL
TCP
Testing
Text
Text Processing
UI
User Interface
Util
Utility
VID
Visualization
Web
Win API
X-File
XML
REBOL [
    Title: "Web Site Builder"
    Date: 3-Jun-1999
    File: %build-site.r
    Author: "Carl Sassenrath"
    Purpose: {The actual script that builds the REBOL web site (using a master template and a navigation structure).}
    library: [
        level: 'advanced 
        platform: 'all 
        type: 'Tool 
        domain: [file-handling html markup web] 
        tested-under: none 
        support: none 
        license: none 
        see-also: none
    ]
    Version: 1.0.0
]

Verbose: on          ; print more info
Auto-expand: off     ; auto expanding menus

Source-Dir: %source  ; where to find raw page content files
Output-Dir: %www     ; where to put the finished HTLM files

site-path: "www.rebol.com/www"


;****** REBOL Site Structure **************************************************
;   Specifies the structure of the web site, and is used to build the
;   navigation menu on the left side of the screen.

Menu: [

    HOME %home.html none

    INTRODUCTION %introduction.html [
        "In a Nutshell"       %nutshell.html
        "REBOL Features"      %features.html
        "REBOL with a Cause"  %rebolcause.html
        "Messaging Language?" %msglang.html
        "REBOL in Ten Steps"  %rebolsteps.html
    ]
                                           
    DOWNLOAD %downloads.html none

    LIBRARY %library.html [
       "Script Library"     %examples.html
       "User's Library"     %userlib.html
   ]

    SUPPORT %support.html [
        "How-To"            %howto.html
        "Guides"            %docs.html
        "Feedback"          %feedback.html
    ]

    COMPANY %company.html [
        "Mission & Vision"  %mission.html
        "Fact Sheet"        %factsheet.html
        ;"In the News"       %inthenews.html
        "Backgrounder"      %background.html
        "Executive Bios"    %bios.html
        "To Contact Us"          %contacts.html
    ]

    JOBS %jobs.html none
]

Other-files: [
    %application.html
    %jobthanks.html
    %missing.html
    %news9511.html
    %platforms.html
    %releases.html

    ;-- How-tos:
    %database.html %ftp.html %email-read.html
    %email-send.html %net-setup.html %series-format.html
    %tcp.html %web-read.html
]


;****** Utility Functions *****************************************************

error: func [msg] [print msg halt]


;****** HTML Template *********************************************************
;   Specifies the HTML template markers.  These are words which will hold
;   the location of the insertion points for various items in the template.
;   The loop searchs for each word, then sets the word to the location.

Markers: [menu-area content-area]  ; must be unique words in the template

Template: read source-dir/master.html

item: template
foreach word markers [
    item: find item form word
    if none? item [error ["No template marker for:" word]]
    set word index? item
    remove/part item length? form word
]

Updated-files: []

time-stamp: either exists? %timestamp.r [load %timestamp.r][1-1-1900]


;****** Builder Functions *****************************************************

make-page: func [
    "Make the new web page with menus."
    file section title
    /local contents page
][
    if not exists? source-dir/:file [error ["Missing source file:" file]]
    if all [time-stamp > modified? %build-site.r
        time-stamp > modified? source-dir/:file] [exit]
    if verbose [print ["Building:" file]]
    contents: read source-dir/:file
    if not parse contents [to "" copy page to  to end][
        error ["Invalid source file:" file]
    ]

    ; Insert the body html into the template at the desired position:
    page: head insert at copy template content-area page
    make-menu page section title
    insert find page  join " " title
    write output-dir/:file page
    append updated-files file
]

make-menu: func [
    "Make the approriate menu for a page."
    page section title
    /local menu-part
][
    menu-part: at page menu-area
    foreach [menu-item file sub-menu] menu [
        menu-part: link-menu menu-part file menu-item false 
            all [menu-item = section title = section]
        if any [not auto-expand menu-item = section] [  ; we are in this section
            if sub-menu <> 'none [
                foreach [titl file] sub-menu [
                    menu-part: link-menu menu-part file titl true titl = title
                ]
            ]
        ]
        menu-part: insert menu-part 

] ] link-menu: func [ "Create a linked menu item." menu-tail file text sub current ][ insert menu-tail reduce either current [[ either sub [{  }][ {}] text
either sub [
]["
"] ]][[ either sub [{  }][] {} text
either sub [
][] ]] ] ;****** Main Loop ************************************************************* foreach [section file sub-menu] menu [ make-page file section section if block? sub-menu [ foreach [title file] sub-menu [make-page file section title] ] ] foreach file other-files [ make-page file none none ] ;****** Upload Files ********************************************************** if find/match ask "Upload now? " "y" [ print "Uploading..." either exists? %userpass.r [do %userpass.r][ user: ask "Username? " pass: ask "Password? " ] foreach file updated-files [ print ["Uploading:" file] ;write join ftp:// [user ":" pass "@" site-path "/" file] read output-dir/:file ] ;save %timestamp.r now ] quit

Copyright © 2018 Rebol Software Foundation