add flags
authorDavid Blacka <david@blacka.com>
Fri, 21 Oct 2011 13:06:47 +0000 (09:06 -0400)
committerDavid Blacka <david@blacka.com>
Fri, 21 Oct 2011 13:06:47 +0000 (09:06 -0400)
madlibs.rb
ml_1.txt

index 6cb83ac..3d095c2 100755 (executable)
@@ -11,6 +11,7 @@ end
 madlibstr = IO.read(ARGV[0]) # the madlib
 
 # Parse and replace the tokens with unique placeholder strings.
+# Token format: ((name:prompt:flags))
 pos = 1
 madlibstr.gsub!(/\(\(([^)]+)\)\)/) do |token|
   token.delete!("()") # clean up token
@@ -18,13 +19,19 @@ madlibstr.gsub!(/\(\(([^)]+)\)\)/) do |token|
   if token =~ /^(\w+):(.*)$/
     # we have a named token, so record the name and position
     names[$1] = pos
-    token = $2
+    token     = $2
   elsif names[token]
     # we are using a named token
     next "<<#{names[token]}>>"
   end
   # otherwise, we have a new token
-  tokens << { :token => token, :pos => pos }
+  if token =~ /^(.*):(\w+)$/
+    token = $1
+    flags = $2
+  else
+    flags = ""
+  end
+  tokens << { :token => token, :pos => pos, :flags => flags}
 
   pos += 1
   "<<#{pos - 1}>>"
@@ -34,6 +41,11 @@ end
 tokens.each do |token|
   print "Tell me #{token[:token]}? "
   value = $stdin.gets.chomp
+
+  value.capitalize! if token[:flags].include? ?c
+  value.upcase!     if token[:flags].include? ?u
+  value.downcase!   if token[:flags].include? ?d
+
   madlibstr.gsub!("<<#{token[:pos]}>>", value)
 end
 
index 9018d12..0eea026 100644 (file)
--- a/ml_1.txt
+++ b/ml_1.txt
@@ -1,4 +1,6 @@
-Our favorite language is ((gem:a gemstone)).  We think ((gem)) is
-better than ((another gemstone)).
+Our favorite language is ((gem:a gemstone:u)).  We think ((gem)) is
+better than ((another gemstone:c)).
+
+Some ((a plural noun)) like ((a reptile:c)) better, but we know
+better.
 
-Some ((a plural noun)) like ((a reptile)) better, but we know better.