REBOL [
    Title: "Take a letter, Maria"
    Purpose: {Use a skeleton of a basic letter and fill it in
    with text requested from a window.  This saves us the labor
    of opening a word-processing program to type a basic letter.}
]

;; [---------------------------------------------------------------------------]
;; [ This is a program named after the song that starts with,                  ]
;; [ "Take a letter, Maria," by R. B. Greaves.                                 ]
;; [ It provides a box for the text of a letter, and then fills that text      ]
;; [ into a letter template and formats an html page suitable for printing.    ]
;; [ This program was created because the author got tired of fighting         ]
;; [ with a popular large word-processing program to do the logically          ]
;; [ simple task of writing a basic letter for printing.                       ]
;; [ The reason this works is that there are features in html that control     ]
;; [ the margins around various parts of the page content.  In the template    ]
;; [ below, the margins of the page are set to zero, which forces any          ]
;; [ browser-produced headings off the physical page.  Then the margins        ]
;; [ around the body move the body into the page.  The end result is that      ]
;; [ the html page contains the letter you wrote without any headers or        ]
;; [ footers or page numbers or file names produced by the browser.            ]
;; [ To use this program for your own purposes, modify the template.           ]
;; [ Note that when typing the body of the letter into the text area,          ]
;; [ if you want what will appear to be a paragraph break, use the "enter"     ]
;; [ key at the end of a paragraph to move to the next line, and then          ]
;; [ immediately hit the "enter" key again to make a blank line.               ]
;; [ The result of these keystrokes is that your text will contain a           ]
;; [ double line-feed at the point where you want a blank line in the          ]
;; [ letter body.  The program replaces double line-feeds with the "br"        ]
;; [ tag to make a blank line.                                                 ]
;; [ Note also that the trick below of fiddling with the margin seems to       ]
;; [ work in Chrome but not in IE.  To make it suppress the headers and        ]
;; [ footers in IE, it seems you have to go to the "page setup" menu and       ]
;; [ turn them off manually before printing.                                   ]
;; [---------------------------------------------------------------------------]

LETTER-TEMPLATE: {


    Letter
    



<% now/date %>

Mister Smith
123 Main St
Minneapolis MN 55431

<% LETTER-TO %>

Dear <%LETTER-SALUTATION%>:

<%LETTER-BODY%>

Sincerely yours,




Mister Smith

} DOUBLE-LF: rejoin [newline newline] LETTER-TO: copy "" LETTER-SALUTATION: copy "" LETTER-BODY: copy "" DEFAULT-FILEID: %UntitledLetter.html SAVE-FILEID: none FORMAT-LETTER: does [ either equal? "" MAIN-FILEID/text [ SAVE-FILEID: DEFAULT-FILEID ] [ SAVE-FILEID: to-file trim/all get-face MAIN-FILEID ] LETTER-TO: MAIN-TO/text LETTER-SALUTATION: get-face MAIN-SALUTATION LETTER-BODY: MAIN-BODY/text replace/all LETTER-TO newline
replace/all LETTER-BODY DOUBLE-LF "

" write SAVE-FILEID build-markup LETTER-TEMPLATE browse SAVE-FILEID ] MAIN-WINDOW: layout [ across banner "Take a letter, Maria" font [shadow: none] return label "TO" tab MAIN-TO: area 400x60 as-is return label "DEAR" tab MAIN-SALUTATION: field 400 return label "BODY" tab MAIN-BODY: area 800x600 return label "FILEID" tab MAIN-FILEID: field 400 "UntitledLetter.html" return button "Quit" [quit] button "Format" [FORMAT-LETTER] ] view center-face MAIN-WINDOW