diff options
author | Leon Rische <leon.rische@me.com> | 2020-01-11 15:24:56 +0100 |
---|---|---|
committer | Leon Rische <leon.rische@me.com> | 2020-01-11 15:24:56 +0100 |
commit | 1c7838eb972ac365e648fc231620cb5f18a07788 (patch) | |
tree | d0a339cec50b9ecb468f2c7d380e3d3c37e85927 /awk/index_positions.awk |
Initial commit
Diffstat (limited to 'awk/index_positions.awk')
-rw-r--r-- | awk/index_positions.awk | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/awk/index_positions.awk b/awk/index_positions.awk new file mode 100644 index 0000000..36e9cbe --- /dev/null +++ b/awk/index_positions.awk @@ -0,0 +1,69 @@ +BEGIN { + FS="|"; + + fc_tag = ":" or_default(fc_tag, "fc") ":"; + suspended_tag = ":" or_default(suspended_tag, "suspended") ":"; + review_data_drawer = ":" or_default(review_data_drawer, "REVIEW_DATA") ":"; + type_property = or_default(type_property, "FC_TYPE"); + created_property = or_default(created_property, "FC_CREATED"); +} + +## Heading Parsing + +/^\*+[ \t]+.*$/ { + # tag re based on org-tag-re + match($0, /^\*+[ \t]+.*[ \t]+(:([a-zA-Z0-9_@#%]+:)+)$/, a) + tags = a[1] + + id = "none"; + + if (tags ~ fc_tag) { + in_card = 1; + suspended = (tags ~ suspended_tag); + } else { + in_card = 0; + } + next +} + +## Property parsing + +in_card && /:PROPERTIES:/ { + in_properties = 1; + delete properties; +} + +in_properties && match($0, /^[ \t]*:([a-zA-Z0-9_]+):[ \t]*(.+)$/, a) { + properties[a[1]] = trim_surrounding(a[2]); +} + +in_properties && /:END:/ { + in_properties = 0; +} + +## Review data parsing + +in_card && $0 ~ review_data_drawer { + in_data = 1; +} + +in_data && /:END:/ { + in_data = 0; +} + +in_data && /^\|.*\|$/ { + # Make sure we're inside a data block, + # check NF to skip the |--+--| table separator + # match on $2 to skip the table header + if (in_data == 1 && NF == 7 && $2 !~ "position") { + id = properties["ID"]; + type = properties[type_property]; + + position = trim($2); + ease = trim($3); + box = trim($4); + interval = trim($5); + due = trim_surrounding($6); + print FILENAME "\t" id "\t" type "\t" suspended "\t" position "\t" ease "\t" box "\t" interval "\t" due; + } +} |