Rosetta Code/Fix code tags: Difference between revisions

Content added Content deleted
(→‎{{header|REXX}}: changed comments and indentation, added a comment. -- ~~~~)
(added go example)
Line 29:
FileAppend, % text, %2%
</lang>
 
=={{header|Go}}==
<lang go>package main
 
import "fmt"
import "io/ioutil"
import "log"
import "os"
import "regexp"
import "strings"
 
func main() {
err := fix()
if err != nil {
log.Fatalln(err)
}
}
 
func fix() (err error) {
buf, err := ioutil.ReadAll(os.Stdin)
if err != nil {
return err
}
out, err := Lang(string(buf))
if err != nil {
return err
}
fmt.Println(out)
return nil
}
 
func Lang(in string) (out string, err error) {
reg := regexp.MustCompile("<[^>]+>")
out = reg.ReplaceAllStringFunc(in, repl)
return out, nil
}
 
func repl(in string) (out string) {
if in == "</code>" {
// Change </code> to </ lang>
return "</"+"lang>"
}
 
// mid is the content in between '<' and '>'.
mid := in[1 : len(in)-1]
 
var langs = []string{
"go",
}
for _, lang := range langs {
if mid == lang {
// Change <%s> to <lang %s>
return fmt.Sprintf("<lang %s>", lang)
}
 
if strings.HasPrefix(mid, "/") {
if mid[len("/"):] == lang {
// Change </%s> to </ lang>
return "</"+"lang>"
}
}
 
if strings.HasPrefix(mid, "code ") {
if mid[len("code "):] == lang {
// Change <code %s> to <lang %s>
return fmt.Sprintf("<lang %s>", lang)
}
}
}
 
return in
}</lang>
 
=={{header|J}}==