Codebase list golang-rsc-qr / 0a64805 coding / gen.go
0a64805

Tree @0a64805 (Download .tar.gz)

gen.go @0a64805raw · history · blame

// +build ignore

package main

import "fmt"

// tables from qrencode-3.1.1/qrspec.c

var capacity = [41]struct {
	width     int
	words     int
	remainder int
	ec        [4]int
}{
	{0, 0, 0, [4]int{0, 0, 0, 0}},
	{21, 26, 0, [4]int{7, 10, 13, 17}}, // 1
	{25, 44, 7, [4]int{10, 16, 22, 28}},
	{29, 70, 7, [4]int{15, 26, 36, 44}},
	{33, 100, 7, [4]int{20, 36, 52, 64}},
	{37, 134, 7, [4]int{26, 48, 72, 88}}, // 5
	{41, 172, 7, [4]int{36, 64, 96, 112}},
	{45, 196, 0, [4]int{40, 72, 108, 130}},
	{49, 242, 0, [4]int{48, 88, 132, 156}},
	{53, 292, 0, [4]int{60, 110, 160, 192}},
	{57, 346, 0, [4]int{72, 130, 192, 224}}, //10
	{61, 404, 0, [4]int{80, 150, 224, 264}},
	{65, 466, 0, [4]int{96, 176, 260, 308}},
	{69, 532, 0, [4]int{104, 198, 288, 352}},
	{73, 581, 3, [4]int{120, 216, 320, 384}},
	{77, 655, 3, [4]int{132, 240, 360, 432}}, //15
	{81, 733, 3, [4]int{144, 280, 408, 480}},
	{85, 815, 3, [4]int{168, 308, 448, 532}},
	{89, 901, 3, [4]int{180, 338, 504, 588}},
	{93, 991, 3, [4]int{196, 364, 546, 650}},
	{97, 1085, 3, [4]int{224, 416, 600, 700}}, //20
	{101, 1156, 4, [4]int{224, 442, 644, 750}},
	{105, 1258, 4, [4]int{252, 476, 690, 816}},
	{109, 1364, 4, [4]int{270, 504, 750, 900}},
	{113, 1474, 4, [4]int{300, 560, 810, 960}},
	{117, 1588, 4, [4]int{312, 588, 870, 1050}}, //25
	{121, 1706, 4, [4]int{336, 644, 952, 1110}},
	{125, 1828, 4, [4]int{360, 700, 1020, 1200}},
	{129, 1921, 3, [4]int{390, 728, 1050, 1260}},
	{133, 2051, 3, [4]int{420, 784, 1140, 1350}},
	{137, 2185, 3, [4]int{450, 812, 1200, 1440}}, //30
	{141, 2323, 3, [4]int{480, 868, 1290, 1530}},
	{145, 2465, 3, [4]int{510, 924, 1350, 1620}},
	{149, 2611, 3, [4]int{540, 980, 1440, 1710}},
	{153, 2761, 3, [4]int{570, 1036, 1530, 1800}},
	{157, 2876, 0, [4]int{570, 1064, 1590, 1890}}, //35
	{161, 3034, 0, [4]int{600, 1120, 1680, 1980}},
	{165, 3196, 0, [4]int{630, 1204, 1770, 2100}},
	{169, 3362, 0, [4]int{660, 1260, 1860, 2220}},
	{173, 3532, 0, [4]int{720, 1316, 1950, 2310}},
	{177, 3706, 0, [4]int{750, 1372, 2040, 2430}}, //40
}

var eccTable = [41][4][2]int{
	{{0, 0}, {0, 0}, {0, 0}, {0, 0}},
	{{1, 0}, {1, 0}, {1, 0}, {1, 0}}, // 1
	{{1, 0}, {1, 0}, {1, 0}, {1, 0}},
	{{1, 0}, {1, 0}, {2, 0}, {2, 0}},
	{{1, 0}, {2, 0}, {2, 0}, {4, 0}},
	{{1, 0}, {2, 0}, {2, 2}, {2, 2}}, // 5
	{{2, 0}, {4, 0}, {4, 0}, {4, 0}},
	{{2, 0}, {4, 0}, {2, 4}, {4, 1}},
	{{2, 0}, {2, 2}, {4, 2}, {4, 2}},
	{{2, 0}, {3, 2}, {4, 4}, {4, 4}},
	{{2, 2}, {4, 1}, {6, 2}, {6, 2}}, //10
	{{4, 0}, {1, 4}, {4, 4}, {3, 8}},
	{{2, 2}, {6, 2}, {4, 6}, {7, 4}},
	{{4, 0}, {8, 1}, {8, 4}, {12, 4}},
	{{3, 1}, {4, 5}, {11, 5}, {11, 5}},
	{{5, 1}, {5, 5}, {5, 7}, {11, 7}}, //15
	{{5, 1}, {7, 3}, {15, 2}, {3, 13}},
	{{1, 5}, {10, 1}, {1, 15}, {2, 17}},
	{{5, 1}, {9, 4}, {17, 1}, {2, 19}},
	{{3, 4}, {3, 11}, {17, 4}, {9, 16}},
	{{3, 5}, {3, 13}, {15, 5}, {15, 10}}, //20
	{{4, 4}, {17, 0}, {17, 6}, {19, 6}},
	{{2, 7}, {17, 0}, {7, 16}, {34, 0}},
	{{4, 5}, {4, 14}, {11, 14}, {16, 14}},
	{{6, 4}, {6, 14}, {11, 16}, {30, 2}},
	{{8, 4}, {8, 13}, {7, 22}, {22, 13}}, //25
	{{10, 2}, {19, 4}, {28, 6}, {33, 4}},
	{{8, 4}, {22, 3}, {8, 26}, {12, 28}},
	{{3, 10}, {3, 23}, {4, 31}, {11, 31}},
	{{7, 7}, {21, 7}, {1, 37}, {19, 26}},
	{{5, 10}, {19, 10}, {15, 25}, {23, 25}}, //30
	{{13, 3}, {2, 29}, {42, 1}, {23, 28}},
	{{17, 0}, {10, 23}, {10, 35}, {19, 35}},
	{{17, 1}, {14, 21}, {29, 19}, {11, 46}},
	{{13, 6}, {14, 23}, {44, 7}, {59, 1}},
	{{12, 7}, {12, 26}, {39, 14}, {22, 41}}, //35
	{{6, 14}, {6, 34}, {46, 10}, {2, 64}},
	{{17, 4}, {29, 14}, {49, 10}, {24, 46}},
	{{4, 18}, {13, 32}, {48, 14}, {42, 32}},
	{{20, 4}, {40, 7}, {43, 22}, {10, 67}},
	{{19, 6}, {18, 31}, {34, 34}, {20, 61}}, //40
}

var align = [41][2]int{
	{0, 0},
	{0, 0}, {18, 0}, {22, 0}, {26, 0}, {30, 0}, // 1- 5
	{34, 0}, {22, 38}, {24, 42}, {26, 46}, {28, 50}, // 6-10
	{30, 54}, {32, 58}, {34, 62}, {26, 46}, {26, 48}, //11-15
	{26, 50}, {30, 54}, {30, 56}, {30, 58}, {34, 62}, //16-20
	{28, 50}, {26, 50}, {30, 54}, {28, 54}, {32, 58}, //21-25
	{30, 58}, {34, 62}, {26, 50}, {30, 54}, {26, 52}, //26-30
	{30, 56}, {34, 60}, {30, 58}, {34, 62}, {30, 54}, //31-35
	{24, 50}, {28, 54}, {32, 58}, {26, 54}, {30, 58}, //35-40
}

var versionPattern = [41]int{
	0,
	0, 0, 0, 0, 0, 0,
	0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,
	0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,
	0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,
	0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,
	0x27541, 0x28c69,
}

func main() {
	fmt.Printf("\t{},\n")
	for i := 1; i <= 40; i++ {
		apos := align[i][0] - 2
		if apos < 0 {
			apos = 100
		}
		astride := align[i][1] - align[i][0]
		if astride < 1 {
			astride = 100
		}
		fmt.Printf("\t{%v, %v, %v, %#x, [4]level{{%v, %v}, {%v, %v}, {%v, %v}, {%v, %v}}},  // %v\n",
			apos, astride, capacity[i].words,
			versionPattern[i],
			eccTable[i][0][0]+eccTable[i][0][1],
			float64(capacity[i].ec[0])/float64(eccTable[i][0][0]+eccTable[i][0][1]),
			eccTable[i][1][0]+eccTable[i][1][1],
			float64(capacity[i].ec[1])/float64(eccTable[i][1][0]+eccTable[i][1][1]),
			eccTable[i][2][0]+eccTable[i][2][1],
			float64(capacity[i].ec[2])/float64(eccTable[i][2][0]+eccTable[i][2][1]),
			eccTable[i][3][0]+eccTable[i][3][1],
			float64(capacity[i].ec[3])/float64(eccTable[i][3][0]+eccTable[i][3][1]),
			i,
		)
	}
}