fix output sometimes outputting lines longer than 80 characters
[ssp.git] / kjv.awk
blob33d0b8413f90a4d47196c78e435f114d1e18a5db
1 BEGIN {
2 # $1 Book name
3 # $2 Book abbreviation
4 # $3 Book number
5 # $4 Chapter number
6 # $5 Verse number
7 # $6 Verse
8 FS = "\t"
10 if (cmd == "ref") {
11 mode = parseref(ref, p)
12 p["book"] = tolower(p["book"])
16 cmd == "list" {
17 if (!($2 in seen_books)) {
18 printf("%s (%s)\n", $1, $2)
19 seen_books[$2] = 1
23 function parseref(ref, arr) {
24 # 1. <book>
25 # 2. <book>:?<chapter>
26 # 3. <book>:?<chapter>:<verse>
27 # 4. <book>:?<chapter>-<chapter>
28 # 5. <book>:?<chapter>:<verse>-<verse>
29 # 6. <book>:?<chapter>:<verse>-<chapter>:<verse>
30 # 7. /<search>
31 # 8. <book>/search
32 # 9. <book>:?<chapter>/search
34 if (match(ref, "^[1-9]?[a-zA-Z ]+")) {
35 # 1, 2, 3, 4, 5, 6, 8, 9
36 arr["book"] = substr(ref, 1, RLENGTH)
37 ref = substr(ref, RLENGTH + 1)
38 } else if (match(ref, "^/")) {
39 # 7
40 arr["search"] = substr(ref, 2)
41 return "search"
42 } else {
43 return "unknown"
46 if (match(ref, "^:?[1-9]+[0-9]*")) {
47 # 2, 3, 4, 5, 6, 9
48 if (sub("^:", "", ref)) {
49 arr["chapter"] = int(substr(ref, 1, RLENGTH - 1))
50 ref = substr(ref, RLENGTH)
51 } else {
52 arr["chapter"] = int(substr(ref, 1, RLENGTH))
53 ref = substr(ref, RLENGTH + 1)
55 } else if (match(ref, "^/")) {
56 # 8
57 arr["search"] = substr(ref, 2)
58 return "search"
59 } else if (ref == "") {
60 # 1
61 return "exact"
62 } else {
63 return "unknown"
66 if (match(ref, "^:[1-9]+[0-9]*")) {
67 # 3, 5, 6
68 arr["verse"] = int(substr(ref, 2, RLENGTH - 1))
69 ref = substr(ref, RLENGTH + 1)
70 } else if (match(ref, "^-[1-9]+[0-9]*$")) {
71 # 4
72 arr["chapter_end"] = int(substr(ref, 2))
73 return "range"
74 } else if (match(ref, "^/")) {
75 # 9
76 arr["search"] = substr(ref, 2)
77 return "search"
78 } else if (ref == "") {
79 # 2
80 return "exact"
81 } else {
82 return "unknown"
85 if (match(ref, "^-[1-9]+[0-9]*$")) {
86 # 5
87 arr["verse_end"] = int(substr(ref, 2))
88 return "range"
89 } else if (match(ref, "-[1-9]+[0-9]*")) {
90 # 6
91 arr["chapter_end"] = int(substr(ref, 2, RLENGTH - 1))
92 ref = substr(ref, RLENGTH + 1)
93 } else if (ref == "") {
94 # 3
95 return "exact"
96 } else {
97 return "unknown"
100 if (match(ref, "^:[1-9]+[0-9]*$")) {
102 arr["verse_end"] = int(substr(ref, 2))
103 return "range_ext"
104 } else {
105 return "unknown"
109 function printverse(verse, word_count, characters_printed) {
110 word_count = split(verse, words, " ")
111 for (i = 1; i <= word_count; i++) {
112 if (characters_printed + length(words[i]) + (characters_printed > 0 ? 1 : 0) > 72) {
113 printf("\n\t")
114 characters_printed = 0
116 if (characters_printed > 0) {
117 printf(" ")
118 characters_printed++
120 printf("%s", words[i])
121 characters_printed += length(words[i])
123 printf("\n")
126 function processline() {
127 if (last_book_printed != $2) {
128 print $1
129 last_book_printed = $2
132 printf("%d:%d\t", $4, $5)
133 printverse($6)
134 outputted_records++
137 cmd == "ref" && mode == "exact" && (tolower($1) == p["book"] || tolower($2) == p["book"]) && (p["chapter"] == "" || $4 == p["chapter"]) && (p["verse"] == "" || $5 == p["verse"]) {
138 processline()
141 cmd == "ref" && mode == "range" && (tolower($1) == p["book"] || tolower($2) == p["book"]) && ((p["chapter_end"] == "" && $4 == p["chapter"]) || ($4 >= p["chapter"] && $4 <= p["chapter_end"])) && (p["verse"] == "" || $5 >= p["verse"]) && (p["verse_end"] == "" || $5 <= p["verse_end"]) {
142 processline()
145 cmd == "ref" && mode == "range_ext" && (tolower($1) == p["book"] || tolower($2) == p["book"]) && (($4 == p["chapter"] && $5 >= p["verse"] && p["chapter"] != p["chapter_end"]) || ($4 > p["chapter"] && $4 < p["chapter_end"]) || ($4 == p["chapter_end"] && $5 <= p["verse_end"] && p["chapter"] != p["chapter_end"]) || (p["chapter"] == p["chapter_end"] && $4 == p["chapter"] && $5 >= p["verse"] && $5 <= p["verse_end"])) {
146 processline()
149 cmd == "ref" && mode == "search" && (p["book"] == "" || tolower($1) == p["book"] || tolower($2) == p["book"]) && (p["chapter"] == "" || $4 == p["chapter"]) && match(tolower($6), tolower(p["search"])) {
150 processline()
153 END {
154 if (cmd == "ref" && outputted_records == 0) {
155 print "Unknown reference: " ref