module TPS::TaskPaper
TaskPaper
parser
node = TaskPaper.parse("Project:\n\t- Hello\n\t- Hi") node.children #=> Array of <Node> node.level #=> 1 (depth) node.text #=> 'do things @done' node.text #=> 'do things' node.tags #=> ['@done'] node.node_type node.project? node.task? node.note?
Public Class Methods
load_file(file)
click to toggle source
# File lib/tps/taskpaper.rb, line 206 def self.load_file(file) parse File.read(file) end
parse(string)
click to toggle source
Parses a string into a node tree. Returns a node.
node = TaskPaper.parse("Project:\n\t- Hello\n\t- Hi")
# File lib/tps/taskpaper.rb, line 178 def self.parse(string) lines = string.split("\n") root = { :node_type => :root, :level => 0, :children => [] } ancestry = [root] level = 0 lines.each_with_index do |line, i| next if line.strip == "" node = Node.parse_line(line, root) if node[:level] <= level # Sibling ancestry[node[:level]-1][:children] << node elsif node[:level] == level + 1 # Child ancestry[level][:children] << node ancestry[level+1] = node else raise "Line #{i}: indentation mismatch (#{node[:level]} tabs found, expected 0..#{level+1})" end level = node[:level] ancestry[level] = node end Node.new(root) end