# candy heart sentences
# by kevin for lel
# connerk@gmail.com
# version 1, 19 February 2008

#you should edit this to be the path to this file.
$base_path = "/Users/kevin/Desktop/hearts"

$hearts = [
    "dream ",
    "i'm sure ",
    "and ",
    "kiss me ",
    "let's kiss ",
    "to ",
    "miss you ",
    "smile ",
    "lover boy ",
    "my man ",
    "nice girl ",
    "love you ",
    "be mine ",
    "in a fog ",
    "love me ",
    "heat wave ",
    "sun shine ",
    "be my hero ",
    ":) ",
    "be good ",
    "ur kind ",
    "true love ",
    "you & me ",
    "fax me ",
    "love ",
    "chill out ",
    "marry me ",
    "cool ",
    "sure love ",
    "only you ",
    "... ",
    "do good "
    ]

$followers_by_leader = {
    "heat wave "=>["i'm sure ", "kiss me ", "let's kiss ", "lover boy ", "in a fog ", "sun shine ", ":) ", "love ", "chill out ", "sure love ", "... "],
	"marry me "=>["i'm sure ", "and ", "to ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "ur kind ", "true love ", "fax me ", "love ", "chill out ", "cool ", "only you ", "... "],
	"you & me "=>["dream ", "i'm sure ", "let's kiss ", "to ", "smile ", "my man ", "nice girl ", "in a fog ", "sun shine ", ":) ", "true love ", "love ", "chill out ", "cool ", "... ", "do good "],
	"sun shine "=>["i'm sure ", "let's kiss ", "to ", "lover boy ", "be mine ", "in a fog ", "heat wave ", ":) ", "true love ", "you & me ", "love ", "only you ", "... ", "do good "],
	"and "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "smile ", "lover boy ", "my man ", "nice girl ", "love you ", "be mine ", "love me ", "sun shine ", "be my hero ", "be good ", "ur kind ", "true love ", "you & me ", "fax me ", "love ", "chill out ", "marry me ", "only you ", "do good "],
	"smile "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "... "],
	"do good "=>["i'm sure ", "and ", "to ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "be good ", "true love ", "you & me ", "fax me ", "love ", "chill out ", "marry me ", "cool ", "only you ", "... "],
	"sure love "=>["i'm sure ", "kiss me ", "let's kiss ", "to ", "my man ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "be good ", "ur kind ", "you & me ", "fax me ", "chill out ", "marry me ", "only you ", "... ", "do good "],
	"love "=>["i'm sure ", "kiss me ", "let's kiss ", "to ", "smile ", "my man ", "nice girl ", "be mine ", "in a fog ", "sun shine ", "be my hero ", ":) ", "be good ", "ur kind ", "true love ", "you & me ", "fax me ", "chill out ", "marry me ", "sure love ", "only you ", "... "],
	"be my hero "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "chill out ", "marry me ", "only you ", "... "],
	"i'm sure "=>["and ", "let's kiss ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", ":) ", "ur kind ", "cool ", "only you ", "... "],
	"my man "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "be mine ", "in a fog ", "love me ", "be my hero ", ":) ", "be good ", "ur kind ", "you & me ", "fax me ", "chill out ", "marry me ", "only you ", "do good "],
	"cool "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "to ", "smile ", "lover boy ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "fax me ", "love ", "... "],
	"to "=>["dream ", "kiss me ", "miss you ", "smile ", "my man ", "nice girl ", "love you ", "be mine ", "love me ", "be my hero ", "be good ", "you & me ", "love ", "chill out ", "marry me ", "sure love ", "do good "],
	"nice girl "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "miss you ", "smile ", "love you ", "be mine ", "in a fog ", "love me ", "be my hero ", ":) ", "be good ", "ur kind ", "fax me ", "chill out ", "marry me ", "... "],
	"true love "=>["i'm sure ", "kiss me ", "let's kiss ", "be mine ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "be good ", "ur kind ", "you & me ", "fax me ", "do good "],
	"be good "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "love me ", "heat wave ", "sun shine ", "be my hero ", ":) ", "fax me ", "love ", "chill out ", "marry me ", "do good "],
	":) "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "miss you ", "smile ", "lover boy ", "my man ", "nice girl ", "love you ", "be mine ", "love me ", "heat wave ", "sun shine ", "be my hero ", "be good ", "ur kind ", "true love ", "you & me ", "fax me ", "love ", "chill out ", "marry me ", "cool ", "only you ", "do good "],
	"in a fog "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "lover boy ", "my man ", "nice girl ", "be mine ", "heat wave ", "sun shine ", "be my hero ", "be good ", "you & me ", "love ", "only you ", "do good "],
	"... "=>["dream ", "i'm sure ", "kiss me ", "let's kiss ", "miss you ", "smile ", "lover boy ", "my man ", "nice girl ", "love you ", "be mine ", "love me ", "sun shine ", "be my hero ", "be good ", "ur kind ", "true love ", "you & me ", "fax me ", "love ", "chill out ", "marry me ", "cool ", "sure love ", "only you ", "do good "],
	"chill out "=>["dream ", "i'm sure ", "and ", "let's kiss ", "to ", "smile ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "be good ", "true love ", "you & me ", "fax me ", "love ", "sure love ", "... "],
	"dream "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", ":) ", "love ", "cool ", "... "],
	"love me "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "... "],
	"love you "=>["i'm sure ", "and ", "let's kiss ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "chill out ", "only you ", "... "],
	"fax me "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "ur kind ", "true love ", "love ", "only you ", "... "],
	"ur kind "=>["i'm sure ", "and ", "let's kiss ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "heat wave ", "sun shine ", "be my hero ", ":) ", "fax me ", "marry me ", "only you ", "... "],
	"let's kiss "=>["and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "you & me ", "love ", "only you ", "... "],
	"miss you "=>["and ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "only you ", "... "],
	"lover boy "=>["dream ", "i'm sure ", "and ", "kiss me ", "let's kiss ", "love you ", "be mine ", "in a fog ", "love me ", "be my hero ", ":) ", "be good ", "ur kind ", "fax me ", "chill out ", "marry me ", "do good "],
	"be mine "=>["dream ", "and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "marry me ", "... "],
	"only you "=>["dream ", "i'm sure ", "to ", "smile ", "lover boy ", "my man ", "nice girl ", "be mine ", "in a fog ", "love me ", "sun shine ", "be my hero ", ":) ", "true love ", "fax me ", "love ", "marry me ", "cool ", "... ", "do good "],
	"kiss me "=>["dream ", "and ", "to ", "lover boy ", "my man ", "nice girl ", "in a fog ", "heat wave ", "sun shine ", ":) ", "true love ", "love ", "... "]
	}

#this is a markov chain by the way
def generate_sentence
    current = "... "
    result = []
    while true:
        followers = $followers_by_leader[current].clone

        #make ending sentences more likely
        followers.push("... ") if followers.member? "... "
        followers.push("... ") if followers.member? "... "
        followers.push("... ") if followers.member? "... "

        current = followers[rand(followers.length)]
        break if current == "... " and result.length > 5

        result.push current
        break if current == ":) " and result.length > 3
    end
    result
end

class Hearts < Shoes
    url "/", :index
    
    def index
        # i'm not sure what the deal is but i can't seem to get the whole window
        # to get this background color.  maybe in version 2!
        # for now i'm setting a long bottom margin so it overflows the window.
        # a scroll bar isn't such a bad price to pay.
        background rgb(0xd9, 0x51, 0x95)
        words = generate_sentence
        
        stack do
            para link("again", :click => "/", :stroke => white), :margin => 10, :margin_bottom => 5
        
            flow :margin => 10, :border_thickness => 5 do
                words.each do |word|
                    image "#{$base_path}/images/heart#{$hearts.index word}.png"
                end
            end
        
            para words.join, :margin => 10, :margin_bottom => 500, :stroke => white
        end
    end
end

Shoes.app :title => "Candy heart sentences <3"
