skeleton and readme

This commit is contained in:
dre 2021-07-03 23:26:27 +08:00
commit 57896f7dcd
2 changed files with 105 additions and 0 deletions

19
README.md Normal file
View file

@ -0,0 +1,19 @@
## md2gmi
Convert Markdown to Gemini Gemini "gemtext" markup with Go.
### Usage
```
Usage of ./md2gmi:
-in string
specify a .md (Markdown) file to read from, otherwise stdin (default)
-out string
specify a .gmi (gemtext) file to write to, otherwise stdout (default)
```
### Example
go get github.com/n0x1m/md2gmi
cat file.md | md2gmi
md2gmi -in file.md -out file.gmi

86
main.go Normal file
View file

@ -0,0 +1,86 @@
package main
import (
"bufio"
"flag"
"fmt"
"io"
"os"
)
func read(in string, data chan<- []byte) error {
if in != "" {
file, err := os.Open(in)
if err != nil {
return err
}
defer file.Close()
s := bufio.NewScanner(file)
for s.Scan() {
data <- s.Bytes()
}
return nil
}
s := bufio.NewScanner(os.Stdin)
for s.Scan() {
data <- s.Bytes()
}
return nil
}
func writer(out string) (io.Writer, error) {
if out != "" {
file, err := os.Open(out)
if err != nil {
return nil, err
}
return file, nil
}
return os.Stdout, nil
}
func write(out string, data <-chan []byte, quit chan struct{}) error {
w, err := writer(out)
if err != nil {
return fmt.Errorf("writer: %w", err)
}
NewParser(data, w, quit).Parse()
for {
select {
case <-quit:
return nil
case b := <-data:
fmt.Fprintf(w, string(b)+"\n")
}
}
}
func main() {
var in, out string
flag.StringVar(&in, "in", "", "specify a .md (Markdown) file to read from, otherwise stdin (default)")
flag.StringVar(&out, "out", "", "specify a .gmi (gemtext) file to write to, otherwise stdout (default)")
flag.Parse()
quit := make(chan struct{})
data := make(chan []byte)
go func() {
if err := read(in, data); err != nil {
fmt.Fprintf(os.Stderr, err.Error())
}
close(quit)
}()
if err := write(out, data, quit); err != nil {
fmt.Fprintf(os.Stderr, err.Error())
}
}