Rewrite to Odin
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package main
|
||||
|
||||
import "core:fmt"
|
||||
import "core:strings"
|
||||
|
||||
replace_text :: proc(text: string, start: int, len_: int, repl: string) -> string {
|
||||
builder := strings.builder_make(context.temp_allocator)
|
||||
strings.write_string(&builder, text[:start])
|
||||
strings.write_string(&builder, repl)
|
||||
strings.write_string(&builder, text[start + len_:])
|
||||
return strings.to_string(builder)
|
||||
}
|
||||
|
||||
parse_header :: proc(line: string) -> (int, string) {
|
||||
if len(line) == 0 {
|
||||
return 0, line
|
||||
}
|
||||
|
||||
lvl := 0
|
||||
for lvl < len(line) && line[lvl] == '!' {
|
||||
lvl += 1
|
||||
}
|
||||
if lvl == 0 || lvl >= len(line) || line[lvl] != ' ' {
|
||||
return 0, line
|
||||
}
|
||||
return lvl, line[lvl + 1:]
|
||||
}
|
||||
|
||||
parse :: proc(lines: []string, allocator := context.allocator) -> string {
|
||||
builder := strings.builder_make(allocator)
|
||||
strings.write_string(&builder, "<p>")
|
||||
|
||||
for line in lines {
|
||||
trimmed := strings.trim_space(line)
|
||||
|
||||
if len(trimmed) == 0 {
|
||||
strings.write_string(&builder, "<br>\n")
|
||||
continue
|
||||
}
|
||||
|
||||
lvl, text := parse_header(trimmed)
|
||||
is_header := lvl > 0
|
||||
|
||||
if is_header {
|
||||
fmt.sbprintf(&builder, "<h%d>", lvl)
|
||||
strings.write_string(&builder, text)
|
||||
fmt.sbprintf(&builder, "</h%d>", lvl)
|
||||
} else {
|
||||
strings.write_string(&builder, text)
|
||||
strings.write_string(&builder, "<br>")
|
||||
}
|
||||
|
||||
strings.write_string(&builder, "\n")
|
||||
}
|
||||
|
||||
strings.write_string(&builder, "</p>")
|
||||
return strings.to_string(builder)
|
||||
}
|
||||
Reference in New Issue
Block a user