github.com/matislovas/ratago@v0.0.0-20240408115641-cc0857415a7a/ratago.go (about)

     1  // The ratago command-line utility runs an input file through an XSLT stylesheet.
     2  package main
     3  
     4  import (
     5  	"flag"
     6  	"fmt"
     7  	"os"
     8  
     9  	"github.com/matislovas/gokogiri/xml"
    10  	"github.com/matislovas/ratago/xslt"
    11  )
    12  
    13  func usage() {
    14  	fmt.Fprintf(os.Stderr, "Usage: %s [options] STYLESHEET INPUT\n", os.Args[0])
    15  	flag.PrintDefaults()
    16  }
    17  
    18  var indent = flag.Bool("indent", false, "Attempt to indent any XML output")
    19  
    20  func main() {
    21  	flag.Usage = usage
    22  	flag.Parse()
    23  	if flag.NArg() < 2 {
    24  		usage()
    25  		return
    26  	}
    27  	//set some prefs based on flags
    28  	xslfile := flag.Arg(0)
    29  	inxml := flag.Arg(1)
    30  
    31  	style, err := xml.ReadFile(xslfile, xml.StrictParseOption)
    32  	if err != nil {
    33  		fmt.Println(err)
    34  		return
    35  	}
    36  
    37  	doc, err := xml.ReadFile(inxml, xml.StrictParseOption)
    38  	if err != nil {
    39  		fmt.Println(err)
    40  		return
    41  	}
    42  
    43  	//TODO: register some extensions (EXSLT, testing, debug)
    44  	//TODO: process XInclude if enabled
    45  	stylesheet, err := xslt.ParseStylesheet(style, xslfile)
    46  	if err != nil {
    47  		fmt.Println(err)
    48  		return
    49  	}
    50  
    51  	options := xslt.StylesheetOptions{*indent, nil}
    52  
    53  	output, err := stylesheet.Process(doc, options)
    54  	if err != nil {
    55  		fmt.Println(err)
    56  		return
    57  	}
    58  
    59  	fmt.Println(output)
    60  }