···177177// |N/A
178178// |Does not apply
179179// |-
180180+//
181181+// as well as both mixed, into row type
180182//
181181-// into row type
182182-//
183183-// |-
184183//
185184fn process_lines(lines: List(String), acc: List(Row)) -> List(Row) {
186185 case lines {
···194193 }
195194}
196195197197-// Parse single line entires into Row type
198198-//
199199-// !Weapon!!Attack Name!!Projectile Type!!Attack Unmodded Damage!!Actual CO Damage Bonus at +100%!!CO Damage Bonus Relative To Base Damage!!Math/Behavior Type!!Notes
200200-//
201201-// single name
202202-//
203203-// |{{Weapon|Ambassador}}||Alt-fire Hitscan AoE||AoE||800||600||75%||Adding||Radial hit only receives CO bonus on target directly hit by laser. CO-bonus scales off hitscan damage. AoE does not scale off multishot.
204204-//
205205-// multi name
206206-//
207207-// |{{Weapon|Braton}}/{{Weapon|MK1-Braton|MK1}}/{{Weapon|Braton Prime|Prime}}/{{Weapon|Braton Vandal|Vandal}}||Incarnon Form AoE||AoE||74||70||95%||Adding||Listed values for Braton Prime with inactive Daring Reverie. Radial hit only receives CO bonus on target directly hit by bullet. AoE does not scale off multishot.
208208-//
209209-// multi line - single & multi name
210210-//
211211-// |{{Weapon|Evensong}}
212212-// |Charged Radial Attack
213213-// |AoE
214214-// |150
215215-// |0
216216-// |0%
217217-// |N/A
218218-// |Does not apply
219219-// |-
196196+// parses 1 'Row' type worth of data from the supplied lines
197197+// handles single line, multi line and mixed data
220198//
221199fn parse_row(name_line: String, lines: List(String)) -> #(Row, List(String)) {
222200 let #(names, line_rest) = parse_names(name_line, [])
···244222 )
245223}
246224225225+// parses the next value from the data
226226+//
247227fn parse_next_value(
248228 line_rest: String,
249229 lines: List(String),
···251231 let sep = splitter.new(["||"])
252232253233 case splitter.split(sep, line_rest) {
254254- #("", _, _) -> do_lines(sep, lines)
234234+ #("", _, _) -> handle_empty_line(sep, lines)
255235 #(value, "||", line_rest) -> #(value, line_rest, lines)
256236 #(value, "", _) -> #(value, "", lines)
257257- #(_, _, _) -> do_lines(sep, lines)
237237+ #(_, _, _) -> handle_empty_line(sep, lines)
258238 }
259239}
260240261261-fn do_lines(sep, lines) {
241241+//
242242+//
243243+fn handle_empty_line(sep, lines) {
262244 case lines {
263245 ["|-", ..] -> #("", "", lines)
264246 ["|" <> value, ..rest] -> {
···271253 }
272254}
273255274274-// process the weapon names
256256+// parse the weapon names
275257//
276258fn parse_names(line: String, acc) {
277259 let sep = splitter.new(["}}/{{Weapon|", "}}/{{Weapon", "}}||", "}}"])