
Template.pudu
Pudu40 lines1.2 KB
1/** @Utils.Template.Module — fills numbered slots in message text */2module PuduLangResilience.Utils.Template34import Std.List as List5import Std.Text as Text6789export fn fill(template: Str, values: &Array[Str]) -> Str {10 var text = ""11 var rest = template12 loop {13 match Text.find(rest, "<") {14 case None => { return text + rest }15 case Some(open) => {16 let after = rest.drop(open + 1)17 let closing = Text.find(after, ">")18 let number = match closing {19 case Some(close) => Text.countOf(after.slice(0, close))20 case None => None21 }22 match (closing, number) {23 case (Some(close), Some(slot)) => {24 let value = match List.get(values, slot - 1) {25 case Some(found) => found26 case None => rest.slice(open, open + close + 2)27 }28 text = text + rest.slice(0, open) + value29 rest = after.drop(close + 1)30 }31 case _ => {32 text = text + rest.slice(0, open + 1)33 rest = after34 }35 }36 }37 }38 }39}40