git.sr.ht/~pingoo/stdx@v0.0.0-20240218134121-094174641f6e/barcode/qr/unicode.go (about)

     1  package qr
     2  
     3  import (
     4  	"errors"
     5  
     6  	"git.sr.ht/~pingoo/stdx/barcode/utils"
     7  )
     8  
     9  func encodeUnicode(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) {
    10  	data := []byte(content)
    11  
    12  	vi := findSmallestVersionInfo(ecl, byteMode, len(data)*8)
    13  	if vi == nil {
    14  		return nil, nil, errors.New("To much data to encode")
    15  	}
    16  
    17  	// It's not correct to add the unicode bytes to the result directly but most readers can't handle the
    18  	// required ECI header...
    19  	res := new(utils.BitList)
    20  	res.AddBits(int(byteMode), 4)
    21  	res.AddBits(len(content), vi.charCountBits(byteMode))
    22  	for _, b := range data {
    23  		res.AddByte(b)
    24  	}
    25  	addPaddingAndTerminator(res, vi)
    26  	return res, vi, nil
    27  }