Compare commits
No commits in common. "800d9897ff4e2f1df60e7d73e98c46ac12ac6bea" and "cb7e5027ede5d09542bc0df7f06a23cc5655d3fd" have entirely different histories.
800d9897ff
...
cb7e5027ed
|
@ -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
28
main.go
|
@ -1,7 +1,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"encoding/base32"
|
"encoding/base32"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -49,9 +48,6 @@ var (
|
||||||
var (
|
var (
|
||||||
app = kingpin.New("pixelqr", "Generates QR code from any input and displays it in your ANSI true-color compatible terminal.")
|
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.").
|
flagECLevel = app.Flag("ec", "Sets the error correction level for the generated code.").
|
||||||
Default(ECLevel_L).
|
Default(ECLevel_L).
|
||||||
Enum(ECLevel_L, ECLevel_M, ECLevel_Q, ECLevel_H)
|
Enum(ECLevel_L, ECLevel_M, ECLevel_Q, ECLevel_H)
|
||||||
|
@ -119,7 +115,7 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = generateCliQR(string(input))
|
generateCliQR(string(input))
|
||||||
|
|
||||||
case cmdOtp.FullCommand(): // otp -> qr
|
case cmdOtp.FullCommand(): // otp -> qr
|
||||||
// https://github.com/google/google-authenticator/wiki/Key-Uri-Format
|
// https://github.com/google/google-authenticator/wiki/Key-Uri-Format
|
||||||
|
@ -153,36 +149,20 @@ func main() {
|
||||||
RawQuery: query.Encode(),
|
RawQuery: query.Encode(),
|
||||||
}
|
}
|
||||||
log.Println("Generated URL:", url.String())
|
log.Println("Generated URL:", url.String())
|
||||||
err = generateCliQR(url.String())
|
generateCliQR(url.String())
|
||||||
|
|
||||||
default: // other
|
default: // other
|
||||||
err = ErrCommandNotFound
|
err = ErrCommandNotFound
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateCliQR(input string) (err error) {
|
func generateCliQR(input string) {
|
||||||
grid, err := qrencode.Encode(input, ecLevelMapping[*flagECLevel])
|
grid, err := qrencode.Encode(input, ecLevelMapping[*flagECLevel])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var s string
|
s, err := internal.ConvertGridToANSImage(grid)
|
||||||
|
|
||||||
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())
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(s)
|
fmt.Println(s)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue