Compare commits

..

No commits in common. "800d9897ff4e2f1df60e7d73e98c46ac12ac6bea" and "cb7e5027ede5d09542bc0df7f06a23cc5655d3fd" have entirely different histories.

2 changed files with 4 additions and 111 deletions

View File

@ -1,87 +0,0 @@
package internal
import (
"io"
"strings"
"github.com/fatih/color"
"github.com/qpliu/qrencode-go/qrencode"
)
const (
Upper byte = 1 << iota
Lower
)
var (
// Got the information from https://de.wikipedia.org/wiki/Unicodeblock_Blockelemente
byteMapping = map[byte]rune{
0: ' ',
Upper: '\u2580', // UPPER HALF BLOCK
Lower: '\u2584', // LOWER HALF BLOCK
Upper | Lower: '\u2588', // FULL BLOCK
}
)
func ConvertGridToUnicode(target io.Writer, source *qrencode.BitGrid) (err error) {
c := color.New(color.BgWhite)
c.Add(color.FgBlack)
writeSpaceLine := func() (n int, err error) {
n, err = c.Fprint(target, strings.Repeat(" ", source.Width()+2))
if err != nil {
return
}
m, err := target.Write([]byte{'\n'})
if err != nil {
return
}
n += m
return
}
if _, err = writeSpaceLine(); err != nil {
return
}
for y := 0; y < source.Height(); y += 2 {
// Go from left to right in both rows
line := " "
for x := 0; x < source.Width(); x++ {
var runeKey byte
// First row
if source.Get(x, y) {
runeKey |= Upper
}
if y+1 < source.Height() {
if source.Get(x, y+1) {
runeKey |= Lower
}
}
line += string(byteMapping[runeKey])
}
line += " "
_, err = c.Fprint(target, line)
if err != nil {
return
}
_, err = target.Write([]byte{'\n'})
if err != nil {
return
}
}
if err == io.EOF {
err = nil
}
_, err = writeSpaceLine()
return
}

28
main.go
View File

@ -1,7 +1,6 @@
package main
import (
"bytes"
"encoding/base32"
"errors"
"fmt"
@ -49,9 +48,6 @@ var (
var (
app = kingpin.New("pixelqr", "Generates QR code from any input and displays it in your ANSI true-color compatible terminal.")
flagANSImage = app.Flag("draw", "Use ANSI drawing code using ANSImage.").
Default("false").
Bool()
flagECLevel = app.Flag("ec", "Sets the error correction level for the generated code.").
Default(ECLevel_L).
Enum(ECLevel_L, ECLevel_M, ECLevel_Q, ECLevel_H)
@ -119,7 +115,7 @@ func main() {
if err != nil {
return
}
err = generateCliQR(string(input))
generateCliQR(string(input))
case cmdOtp.FullCommand(): // otp -> qr
// https://github.com/google/google-authenticator/wiki/Key-Uri-Format
@ -153,36 +149,20 @@ func main() {
RawQuery: query.Encode(),
}
log.Println("Generated URL:", url.String())
err = generateCliQR(url.String())
generateCliQR(url.String())
default: // other
err = ErrCommandNotFound
}
}
func generateCliQR(input string) (err error) {
func generateCliQR(input string) {
grid, err := qrencode.Encode(input, ecLevelMapping[*flagECLevel])
if err != nil {
return
}
var s string
if *flagANSImage {
s, err = internal.ConvertGridToANSImage(grid)
if err != nil {
return
}
} else {
w := new(bytes.Buffer)
err = internal.ConvertGridToUnicode(w, grid)
if err != nil {
return
}
s = string(w.Bytes())
}
s, err := internal.ConvertGridToANSImage(grid)
fmt.Println(s)