REBOL [
Title: "Momify bad words"
Author: "Brian Tiffin"
Date: 06-Jul-2007
File: %momify.r
Purpose: "Translate bad words to cartoon speak"
Version: 0.9.0
Comment: {Usage: do %momify.r clean "..."}
]
;; protect the global name space
;; do it an object or use global: do %momify
context [
;; It's a fairly incomplete list of bad words. 244 entries.
;; found at [URL="http://www.mattfacer.com/swear-filter/"][U][COLOR=#0000ff]http://www.mattfacer.com/[B]swear[/B]-[B]filter[/B][/COLOR][COLOR=#0000ff]/[/COLOR][/U][/URL]
;; If you want to add to the list:
;; evaluate unhidelist, make your edits, evaluate hidelist,
;; cut'n' paste badwords.bin to badwords
;; then delete badwords.bin and badwords.raw
;; or for more protection use shred -zu on at least badwords.raw file
unhidelist: does [
if any [not exists? %badwords.raw confirm "Overwrite badwords? "] [
write/lines %badwords.raw mold to string! first badwords
foreach word next badwords [
write/lines/append %badwords.raw mold to string! word
]
]
print "cover your eyes and edit %badwords.raw"
]
;; hidelist creates a list of words in binary so if REBOL
;; errors out no one will be exposed to the bad words.
;; After executing hidelist, you'll need to cut'n'paste include the
;; badwords.bin in the badwords definition
hidelist: has [base words] [
base: system/options/binary-base system/options/binary-base: 64
words: load %badwords.raw
while [not tail? words] [
change words to binary! first words words: next words
]
save %badwords.bin compress mold head words
system/options/binary-base: base
print "Now cut'n'paste %badwords.bin to badwords: in [COLOR=#000000][B]source[/B] [B]code[/B]" [/COLOR]
]
badwords: load decompress 64#{
eJx9l9tuqzgUhu/nKUaaFwDTVOWiFztqgaQNUqNdCB7NBYatuAmmKM2JjObd9zIB
r2VSzUUkf7/Py+tA/r6/++vfOJq5/O3x8b8/O0rX5/IHkmyQsp/vbt9KJ1KgvqIr
ZKt5W7B3pAvtiy/Yek25m7F9VaxpP6+TTc6S1lJ2OXsmY/LQ/7JXLZk8itDs+hE4
GVsPtPlxyuqFoWeP9lkjVfAlwrnkp0eqRAuLYpmxL1QuZRi0HK2hEll4yyZLz00Z
bY263dF9KmvX81Gw5QSpZM0xQ6sovxHsLAtyKv9IbgQk2PxCyf+wR4NyM+NmXD2v
wJYOVZINXy2loYOot+vRC9WJU4auS+5zmW5yXEOTF49fmgUeGcNkI5SxKatOGb4u
OxGPzNi5+V/Ct2ITl/b59EyaWvdSpvGOr2ZUZRxe991SZJWlb5biukLFn7fKaK1v
bn1ViTcbZS+NssOWWCUHsI69xq7w9AuQNe76lpfsTetAbq8pPDej03iVFGHV+w1/
CoiFeFiNybIDKF88fECCmH82dLbm+vVtpGuVs+pgE6ezDuBjk0JVHxBRrVGPhfEz
HoEVTMzztJG5l3xlq2XVKx9TdxYu1nk7rWbR8DJ8s9RePJAKamzBGRy02lXxHUP2
PKBKiTA4YbwMqu1XWv21IjMdzINcwduT+doTzG07sqyiEmpZReOQQ0zTPiDsq615
t4RvZ8X2lax37xTzbj3x0WqgePFnvlruhbeEqJiPLaJHeSWMeLMVEs0662PLmruz
TrizzrODSjBapYRXNXSHrQX6BAsmIvRJFod3l2UU956Uh8kFPQ2qjywUIeLXuV7F
5K5cQUwxX3HsV9VFYL+VBXM2IVm/I6gleKZe2VKib3NVoHKw/cRWdCRdFfEUNy9s
yF2aytDQz6lamN00iRPSm1uGSQv1zsH7ifT5qm7WY2U0TlfJpH1N57I0dhxUOrtX
YPbLejxbq4vTd2qe+ofv1cIeH92e7GHP1YMhn1oAiFgg9R3wg9aOEFsdcjhkbVCH
mLpSoLgVA4OqI4Os16ljGu250XnJrN6R6VPBfY63U1XNL3FLaflJCFfpKLD6gotF
95RwP/8DW7PQ8jVQ4PTEgztF6Yq3tRWwi1HqZJ8pqN2mkoPiFIxWp+Jp2grjH0UY
eJSSQ75aWBSP8k8RShe/4YoQbmRZGJR9YSqjbqEfdcQ41Jmp6ffpaaJ5Q9aO5kfa
l1zw2/hKW0rGLlD39pA9PCSR0jxbtJPjq5r1Xl9AREP+ov0sbgULHELeUBd7cjEP
QU2VLydKmEGBzpSkpLsAsZLkv15pxK2iClQqiEbyBQ9KQ/enGfwbCpfUwp3ybtGQ
I3uaUOLueC7NoZ0SLa0bnV26v2vRRGL+LLypzMwtyqfAgV8Vv1lKWFXoS3C2Cv1c
06816YNMVm2y9DRS8H8OkGNXc60UFuFpO4L9yYl6xfb+QR2tE12/ayzFg3+CVGHB
gZwlKujuUSlHZFm+U6LhXxCQK2rSB0Rfpdw8O9yby4GCulBDLitVJUnf5ccJY06f
EP13dF5NaAVNJh71/8vM5A9N+AUA3xfwr9Gyl1b0f78//vkN4gHQ8mQPAAA=
}
;; Generate a parse rule
rules: copy []
terms: exclude charset [#"^(00)" - #"^(ff)"]
charset [#"a" - #"z" #"A" - #"Z" #"0" - #"9"]
comicbook: "!@#$%^&*.~*&^%$#@!.~!@#$%^&*.~*&^%$#@!"
foreach word badwords [
insert tail rules compose [
mark: (word) [terms | end] (to paren! compose [
change mark copy/part random comicbook (length? word)
]) |
]
]
insert tail rules [skip]
;;
;; Get rid of badwords
;;
momify: func [
"Replace bad words with comic book text"
instr [string!] "String to clean - Modified"
][
parse/all instr [some rules]
instr
]
;; uncomment to expose momify as clean,
;; or comment to hide all the words and then the usage is
;; a: do %momify.r a/momify "..."
set 'clean :momify
]
--