/ Published in: Ruby
                    
                                        
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
#!/usr/bin/env ruby
require 'pp'
module TaskPaper
class TaskParser
attr_reader :task_string, :tags
def initialize(&observer)
@observers = []
@tags = []
@task_string = ""
if block_given?
@observers << observer
end
end
def on_task_parsed(&observer)
@observers << observer
end
def parseTask(taskdata)
@tags = []
$task_string = ""
matches = /^((-)*(.*?))((@.*)*)*$/.match(taskdata)
@task_string = matches[1]
tag_string = matches[4]
if tag_string
@tags = tag_string.split(/[,\s]+/)
end
@observers.each do |observer|
observer.call(self)
end
end
end
class Task
attr_accessor :tags, :task_string
def initialize(task_string_data="", task_tag_array=[])
@task_string = task_string_data
@tags = task_tag_array
end
def to_s
tags = ""
tags = @tags.join(" ") if @tags.length > 0
"#{@task_string} #{tags}"
end
def empty?
@task_string.strip.empty?
end
def is_project?
@task_string =~ /.*:$/
end
def is_task?
@task_string =~ /^-.*/
end
def is_comment?
!empty? && !is_task? && !is_project?
end
end
end
# task_list = []
#
# t = TaskPaper::TaskParser.new do |task_data|
# task = TaskPaper::Task.new(task_data.task_string, task_data.tags)
# task_list << task
# puts task
# puts "Is a Task" if task.is_task?
# puts "Is a Comment" if task.is_comment?
# puts "Is a Project" if task.is_project?
# puts "Is Empty" if task.empty?
# puts task.tags.inspect if task.tags.length > 0
# puts
# end
#
# tasks = %{Chores:
# - Take out the trash @home
# only do this if it's not raining
#
#
# - Buy a new door knob @store @hardware
# }
#
#
# tasks.split(/\n/).each do |line|
# t.parseTask(line)
# end
#
# pp task_list
Comments
 Subscribe to comments
                    Subscribe to comments
                
                