func getCodeIndexList(content []rune) *utils.BitList { result := new(utils.BitList) curEncoding := byte(0) for i := 0; i < len(content); i++ { if shouldUseCTable(content[i:], curEncoding) { if curEncoding != startCSymbol { result.AddByte(startCSymbol) curEncoding = startCSymbol } idx := (content[i] - '0') * 10 i++ idx = idx + (content[i] - '0') result.AddByte(byte(idx)) } else { if curEncoding != startBSymbol { result.AddByte(startBSymbol) curEncoding = startBSymbol } idx := strings.IndexRune(bTable, content[i]) if idx < 0 { return nil } result.AddByte(byte(idx)) } } fmt.Println(result.GetBytes()) return result }
func addPaddingAndTerminator(bl *utils.BitList, vi *versionInfo) { for i := 0; i < 4 && bl.Len() < vi.totalDataBytes()*8; i++ { bl.AddBit(false) } for bl.Len()%8 != 0 { bl.AddBit(false) } for i := 0; bl.Len() < vi.totalDataBytes()*8; i++ { if i%2 == 0 { bl.AddByte(236) } else { bl.AddByte(17) } } }
func encodeUnicode(content string, ecl ErrorCorrectionLevel) (*utils.BitList, *versionInfo, error) { data := []byte(content) vi := findSmallestVersionInfo(ecl, byteMode, len(data)*8) if vi == nil { return nil, nil, errors.New("To much data to encode") } // It's not correct to add the unicode bytes to the result directly but most readers can't handle the // required ECI header... res := new(utils.BitList) res.AddBits(int(byteMode), 4) res.AddBits(len(content), vi.charCountBits(byteMode)) for _, b := range data { res.AddByte(b) } addPaddingAndTerminator(res, vi) return res, vi, nil }
func getCodeIndexList(content []rune) *utils.BitList { result := new(utils.BitList) curEncoding := byte(0) for i := 0; i < len(content); i++ { if shouldUseCTable(content[i:], curEncoding) { if curEncoding != startCSymbol { if curEncoding == byte(0) { result.AddByte(startCSymbol) } else { result.AddByte(codeCSymbol) } curEncoding = startCSymbol } idx := (content[i] - '0') * 10 i++ idx = idx + (content[i] - '0') result.AddByte(byte(idx)) } else { if curEncoding != startBSymbol { if curEncoding == byte(0) { result.AddByte(startBSymbol) } else { result.AddByte(codeBSymbol) } curEncoding = startBSymbol } var idx int switch content[i] { case FNC1: idx = 102 break case FNC2: idx = 97 break case FNC3: idx = 96 break case FNC4: idx = 100 break default: idx = strings.IndexRune(bTable, content[i]) break } if idx < 0 { return nil } result.AddByte(byte(idx)) } } return result }