updated docs and code cleanup
This commit is contained in:
1 parent
bccb3d2ede
commit
d0cdae0475
10 files changed
+137
-106
No files matched your search
+77
-75
@@ -1,75 +1,77 @@
|
||||
package datamatrix
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/boombuler/barcode"
|
||||
)
|
||||
|
||||
// Encodes the given content as a DataMatrix code
|
||||
func Encode(content string) (barcode.Barcode, error) {
|
||||
data := encodeText(content)
|
||||
|
||||
var size *dmCodeSize = nil
|
||||
for _, s := range codeSizes {
|
||||
if s.DataCodewords() >= len(data) {
|
||||
size = s
|
||||
break
|
||||
}
|
||||
}
|
||||
if size == nil {
|
||||
return nil, errors.New("to much data to encode")
|
||||
}
|
||||
data = addPadding(data, size.DataCodewords())
|
||||
data = ec.calcECC(data, size)
|
||||
code := render(data, size)
|
||||
if code != nil {
|
||||
code.content = content
|
||||
return code, nil
|
||||
}
|
||||
return nil, errors.New("unable to render barcode")
|
||||
}
|
||||
|
||||
func render(data []byte, size *dmCodeSize) *datamatrixCode {
|
||||
cl := newCodeLayout(size)
|
||||
|
||||
setters := cl.IterateSetter()
|
||||
for _, b := range data {
|
||||
(<-setters)(b)
|
||||
}
|
||||
return cl.Merge()
|
||||
}
|
||||
|
||||
func encodeText(content string) []byte {
|
||||
result := make([]byte, 0)
|
||||
input := []byte(content)
|
||||
|
||||
for i := 0; i < len(input); {
|
||||
c := input[i]
|
||||
i++
|
||||
|
||||
if c >= '0' && c <= '9' && i < len(input) && input[i] >= '0' && input[i] <= '9' {
|
||||
// two numbers...
|
||||
c2 := input[i]
|
||||
i++
|
||||
cw := byte(((c-'0')*10 + (c2 - '0')) + 130)
|
||||
result = append(result, cw)
|
||||
} else if c > 127 {
|
||||
// not correct... needs to be redone later...
|
||||
result = append(result, 235, c-127)
|
||||
} else {
|
||||
result = append(result, c+1)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func addPadding(data []byte, toCount int) []byte {
|
||||
if len(data) < toCount {
|
||||
data = append(data, 129)
|
||||
}
|
||||
for len(data) < toCount {
|
||||
R := ((149 * (len(data) + 1)) % 253) + 1
|
||||
data = append(data, byte((129+R)%254))
|
||||
}
|
||||
return data
|
||||
}
|
||||
// Package datamatrix can create Datamatrix barcodes
|
||||
package datamatrix
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/boombuler/barcode"
|
||||
)
|
||||
|
||||
// Encode returns a Datamatrix barcode for the given content
|
||||
func Encode(content string) (barcode.Barcode, error) {
|
||||
data := encodeText(content)
|
||||
|
||||
var size *dmCodeSize
|
||||
for _, s := range codeSizes {
|
||||
if s.DataCodewords() >= len(data) {
|
||||
size = s
|
||||
break
|
||||
}
|
||||
}
|
||||
if size == nil {
|
||||
return nil, errors.New("to much data to encode")
|
||||
}
|
||||
data = addPadding(data, size.DataCodewords())
|
||||
data = ec.calcECC(data, size)
|
||||
code := render(data, size)
|
||||
if code != nil {
|
||||
code.content = content
|
||||
return code, nil
|
||||
}
|
||||
return nil, errors.New("unable to render barcode")
|
||||
}
|
||||
|
||||
func render(data []byte, size *dmCodeSize) *datamatrixCode {
|
||||
cl := newCodeLayout(size)
|
||||
|
||||
setters := cl.IterateSetter()
|
||||
for _, b := range data {
|
||||
(<-setters)(b)
|
||||
}
|
||||
return cl.Merge()
|
||||
}
|
||||
|
||||
func encodeText(content string) []byte {
|
||||
var result []byte
|
||||
input := []byte(content)
|
||||
|
||||
for i := 0; i < len(input); {
|
||||
c := input[i]
|
||||
i++
|
||||
|
||||
if c >= '0' && c <= '9' && i < len(input) && input[i] >= '0' && input[i] <= '9' {
|
||||
// two numbers...
|
||||
c2 := input[i]
|
||||
i++
|
||||
cw := byte(((c-'0')*10 + (c2 - '0')) + 130)
|
||||
result = append(result, cw)
|
||||
} else if c > 127 {
|
||||
// not correct... needs to be redone later...
|
||||
result = append(result, 235, c-127)
|
||||
} else {
|
||||
result = append(result, c+1)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func addPadding(data []byte, toCount int) []byte {
|
||||
if len(data) < toCount {
|
||||
data = append(data, 129)
|
||||
}
|
||||
for len(data) < toCount {
|
||||
R := ((149 * (len(data) + 1)) % 253) + 1
|
||||
data = append(data, byte((129+R)%254))
|
||||
}
|
||||
return data
|
||||
}
|
||||
Reference in new issue
Block a user