working version of sequential numbering in batches

added version to build
This commit is contained in:
Luke Emmet 2020-08-13 12:38:23 +01:00
parent 6b151120f3
commit 7e3518c314

View File

@ -1,93 +1,107 @@
package main package main
import ( import (
flag "github.com/spf13/pflag" "bufio"
"fmt" "errors"
"io/ioutil" "fmt"
"os" "github.com/LukeEmmet/html2gemini"
"github.com/LukeEmmet/html2gemini" flag "github.com/spf13/pflag"
"bufio" "io"
"io" "io/ioutil"
"errors" "os"
) )
var version = "0.2.1"
var ( var (
output = flag.StringP("output", "o", "", "Output path. Otherwise uses stdout\n") output = flag.StringP("output", "o", "", "Output path. Otherwise uses stdout\n")
input = flag.StringP("input", "i", "", "Input path. Otherwise uses stdin\n") input = flag.StringP("input", "i", "", "Input path. Otherwise uses stdin\n")
citationStart = flag.IntP("citationStart", "c", 1, "Start citations from this index")
linkEmitFrequency = flag.IntP("linkEmitFrequency", "l", 2, "Emit gathered links through the document after this number of paragraphs")
verFlag = flag.BoolP("version", "v", false, "Find out what version of html2gmi you're running")
) )
func check(e error) { func check(e error) {
if e != nil { if e != nil {
panic(e) panic(e)
os.Exit(1) }
}
} }
func saveFile(contents []byte, path string) { func saveFile(contents []byte, path string) {
d1 := []byte(contents) d1 := contents
err := ioutil.WriteFile(path, d1, 0644) err := ioutil.WriteFile(path, d1, 0644)
check(err) check(err)
} }
func readStdin () (string) { func readStdin() string {
// based on https://flaviocopes.com/go-shell-pipes/ // based on https://flaviocopes.com/go-shell-pipes/
reader := bufio.NewReader(os.Stdin) //default size is 4096 apparently reader := bufio.NewReader(os.Stdin) //default size is 4096 apparently
var output []rune var output []rune
for { for {
input, _, err := reader.ReadRune() input, _, err := reader.ReadRune()
if err != nil && err == io.EOF { if err != nil && err == io.EOF {
break break
} }
output = append(output, input) output = append(output, input)
} }
return string(output) return string(output)
} }
func getInput() (string, error) { func getInput() (string, error) {
var inputHtml string var inputHtml string
info, err := os.Stdin.Stat() info, err := os.Stdin.Stat()
check(err) check(err)
if info.Mode()&os.ModeNamedPipe != 0 { if info.Mode()&os.ModeNamedPipe != 0 {
// we have a pipe input // we have a pipe input
inputHtml = readStdin() inputHtml = readStdin()
} else if (*input != "") { } else if *input != "" {
//get the input file from the command line //get the input file from the command line
dat, err := ioutil.ReadFile(*input) dat, err := ioutil.ReadFile(*input)
check(err) check(err)
inputHtml = string(dat) inputHtml = string(dat)
} else { } else {
//we shouldnt get here //we shouldn't get here
return "", errors.New("Invalid option for input - use -i <path> or pipe to stdin") return "", errors.New("invalid option for input - use -i <path> or pipe to stdin")
} }
return inputHtml, nil return inputHtml, nil
} }
func main() { func main() {
var inputHtml string var inputHtml string
flag.Parse() flag.Parse()
//get the input from commandline or stdin if *verFlag {
inputHtml, err:= getInput() fmt.Println("html2gmi " + version)
check(err) return
}
//convert html to gmi //get the input from commandline or stdin
text, err := html2text.FromString(inputHtml, html2text.Options{PrettyTables: true, GeminiCitationStyleLinks: true}) inputHtml, err := getInput()
check(err) check(err)
//process the output //convert html to gmi
if (*output == "") { options := html2gemini.NewOptions()
fmt.Print(text) options.PrettyTables = true
} else { options.CitationStart = *citationStart
//save to the specified output options.LinkEmitFrequency = *linkEmitFrequency
gmiBytes := []byte(text)
saveFile(gmiBytes, *output) text, err := html2gemini.FromString(inputHtml, *options)
} check(err)
//process the output
if *output == "" {
fmt.Print(text)
} else {
//save to the specified output
gmiBytes := []byte(text)
saveFile(gmiBytes, *output)
}
} }