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: "Minify"
	Date: 21-Aug-2012
	File: %minify.r
	Author: "Christopher Ross-Gill"
	Purpose: "Strips Whitespace and Comments from a Script"
	Library: [
		Level: 'beginner
		Platform: 'all
		Type: [function idiom module tool]
		Domain: [ldc parse text-processing]
		License: 'cc-by-sa
	]
]

minify: func [
	"Strips Whitespace and Comments from a Script." [catch]
	script [file! url! string!] "Script to be minified."
	/feed "Use newlines instead of spaces to separate values."
	/local out val rule ws mk ex
][
	throw-on-error [
		case/all [
			any [file? script url? script][script: read script]
			string? script [
				if error? val: try [load script][
					; to correctly report a minify failure
					val: disarm val
					make error! reduce ['syntax val/id val/arg1 val/arg2]
				]
			]
			not string? script [make error! "Unable to read script"]
		]
	]

	out: copy ""
	ws: charset "^/^-^M "
	script: trim/head/tail copy script

	either parse/all script rule: [
		some [
			mk:
			#";" [thru newline | to end] ex:
			; (append out copy/part mk ex])
			| [#"[" | #"("] any ws (append out mk/1) rule
			| any ws mk: [#"]" | #")"] (append out mk/1) break
			| some ws (append out either feed ["^/"][" "])
			| #"^@" to end
			| skip (
				set [val ex] load/next mk
				append out copy/part mk ex
			) :ex
		]
	][
		:out
	][
		throw make error! "Unable to Parse Script"
	]
]

            
            
        
Copyright © 2018 Rebol Software Foundation