diff mupdf-source/thirdparty/zint/backend/dmatrix.h @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zint/backend/dmatrix.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,257 @@
+/* dmatrix.h - Handles Data Matrix ECC 200 */
+/*
+    libzint - the open source barcode library
+    Copyright (C) 2009-2024 Robin Stuart <rstuart114@gmail.com>
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions
+    are met:
+
+    1. Redistributions of source code must retain the above copyright
+       notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+       notice, this list of conditions and the following disclaimer in the
+       documentation and/or other materials provided with the distribution.
+    3. Neither the name of the project nor the names of its contributors
+       may be used to endorse or promote products derived from this software
+       without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+    ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+/* SPDX-License-Identifier: BSD-3-Clause */
+
+/*
+    Contains Extended Rectangular Data Matrix (DMRE)
+    See http://www.dmre.info for information
+    Contact: harald.oehlmann@eurodatacouncil.org
+ */
+
+#ifndef Z_DMATRIX_H
+#define Z_DMATRIX_H
+
+#define DM_ASCII    1
+#define DM_C40      2
+#define DM_TEXT     3
+#define DM_X12      4
+#define DM_EDIFACT  5
+#define DM_BASE256  6
+
+/* C40 shift to use per ASCII character (Table C.1) */
+static const char dm_c40_shift[128] = {
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
+    2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
+    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3
+};
+
+/* C40 ASCII values (Table C.1) */
+static const char dm_c40_value[128] = {
+     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+     3,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+     4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
+    21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+    29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 22, 23, 24, 25, 26,
+     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
+};
+
+/* Text shift to use per ASCII character (Table C.2) */
+static const char dm_text_shift[128] = {
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2,
+    2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2,
+    3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3
+};
+
+/* Text ASCII values (Table C.2) */
+static const char dm_text_value[128] = {
+     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+     3,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+     4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20,
+    21,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
+    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 22, 23, 24, 25, 26,
+     0, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+    29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 27, 28, 29, 30, 31
+};
+
+/* Number of DM Sizes */
+#define DMSIZESCOUNT 48
+/* Number of 144x144 for special interlace */
+#define DMINTSYMBOL144 47
+
+/* Total data codewords (Table 7) in ascending order */
+static const unsigned short dm_matrixbytes[DMSIZESCOUNT] = {
+    /* 0*/   3 /*10x10*/,      5 /*12x12*/,      5 /*8x18*/,       8 /*14x14*/,
+    /* 4*/  10 /*8x32*/,      12 /*16x16*/,     16 /*12x26*/,     18 /*18x18*/,
+    /* 8*/  18 /*8x48*/,      22 /*20x20*/,     22 /*12x36*/,     24 /*8x64*/,
+    /*12*/  30 /*22x22*/,     32 /*16x36*/,     32 /*8x80*/,      36 /*24x24*/,
+    /*16*/  38 /*8x96*/,      43 /*12x64*/,     44 /*26x26*/,     44 /*20x36*/,
+    /*20*/  49 /*16x48*/,     49 /*8x120*/,     56 /*20x44*/,     62 /*32x32*/,
+    /*24*/  62 /*16x64*/,     63 /*8x144*/,     64 /*12x88*/,     70 /*26x40*/,
+    /*28*/  72 /*22x48*/,     80 /*24x48*/,     84 /*20x64*/,     86 /*36x36*/,
+    /*32*/  90 /*26x48*/,    108 /*24x64*/,    114 /*40x40*/,    118 /*26x64*/,
+    /*36*/ 144 /*44x44*/,    174 /*48x48*/,    204 /*52x52*/,    280 /*64x64*/,
+    /*40*/ 368 /*72x72*/,    456 /*80x80*/,    576 /*88x88*/,    696 /*96x96*/,
+    /*44*/ 816 /*104x104*/, 1050 /*120x120*/, 1304 /*132x132*/, 1558 /*144x144*/
+};
+
+/* Index into `dm_matrixbytes` array in `symbol->option_2` (CLI `--vers`) order,
+   i.e. square symbols first, then standard rectangular, then DMRE.
+   The bracketed comment value is the total data codewords value. */
+static const unsigned char dm_intsymbol[DMSIZESCOUNT] = {
+    /* Standard DM square */
+    /*  1-4*/  0 /*10x10 (3)*/,      1 /*12x12 (5)*/,       3 /*14x14 (8)*/,       5 /*16x16 (12)*/,
+    /*  5-8*/  7 /*18x18 (18)*/,     9 /*20x20 (22)*/,     12 /*22x22 (30)*/,     15 /*24x24 (36)*/,
+    /* 9-12*/ 18 /*26x26 (44)*/,    23 /*32x32 (62)*/,     31 /*36x36 (86)*/,     34 /*40x40 (114)*/,
+    /*13-16*/ 36 /*44x44 (144)*/,   37 /*48x48 (174)*/,    38 /*52x52 (204)*/,    39 /*64x64 (280)*/,
+    /*17-20*/ 40 /*72x72 (368)*/,   41 /*80x80 (456)*/,    42 /*88x88 (576)*/,    43 /*96x96 (696)*/,
+    /*21-24*/ 44 /*104x104 (816)*/, 45 /*120x120 (1050)*/, 46 /*132x132 (1304)*/, 47 /*144x144 (1558)*/,
+
+    /* Standard DM rectangular */
+    /*25-28*/  2 /*8x18 (5)*/,       4 /*8x32 (10)*/,       6 /*12x26 (16)*/,     10 /*12x36 (22)*/,
+    /*29-30*/ 13 /*16x36 (32)*/,    20 /*16x48 (49)*/,
+
+    /* DMRE */
+    /*31-34*/  8 /*8x48 (18)*/,     11 /*8x64 (24)*/,      14 /*8x80 (32)*/,      16 /*8x96 (38)*/,
+    /*35-38*/ 21 /*8x120 (49)*/,    25 /*8x144 (63)*/,     17 /*12x64 (43)*/,     26 /*12x88 (64)*/,
+    /*39-42*/ 24 /*16x64 (62)*/,    19 /*20x36 (44)*/,     22 /*20x44 (56)*/,     30 /*20x64 (84)*/,
+    /*43-46*/ 28 /*22x48 (72)*/,    29 /*24x48 (80)*/,     33 /*24x64 (108)*/,    27 /*26x40 (70)*/,
+    /*47-48*/ 32 /*26x48 (90)*/,    35 /*26x64 (118)*/
+};
+
+/* Following arrays in total data codewords order (`dm_matrixbytes`) */
+
+/* Whether the version is DMRE */
+static const char dm_isDMRE[DMSIZESCOUNT] = {
+    /* 0*/ 0 /*10x10 (3)*/,     0 /*12x12 (5)*/,      0 /*8x18 (5)*/,       0 /*14x14 (8)*/,
+    /* 4*/ 0 /*8x32 (10)*/,     0 /*16x16 (12)*/,     0 /*12x26 (16)*/,     0 /*18x18 (18)*/,
+    /* 8*/ 1 /*8x48 (18)*/,     0 /*20x20 (22)*/,     0 /*12x36 (22)*/,     1 /*8x64 (24)*/,
+    /*12*/ 0 /*22x22 (30)*/,    0 /*16x36 (32)*/,     1 /*8x80 (32)*/,      0 /*24x24 (36)*/,
+    /*16*/ 1 /*8x96 (38)*/,     1 /*12x64 (43)*/,     0 /*26x26 (44)*/,     1 /*20x36 (44)*/,
+    /*20*/ 0 /*16x48 (49)*/,    1 /*8x120 (49)*/,     1 /*20x44 (56)*/,     0 /*32x32 (62)*/,
+    /*24*/ 1 /*16x64 (62)*/,    1 /*8x144 (63)*/,     1 /*12x88 (64)*/,     1 /*26x40 (70)*/,
+    /*28*/ 1 /*22x48 (72)*/,    1 /*24x48 (80)*/,     1 /*20x64 (84)*/,     0 /*36x36 (86)*/,
+    /*32*/ 1 /*26x48 (90)*/,    1 /*24x64 (108)*/,    0 /*40x40 (114)*/,    1 /*26x64 (118)*/,
+    /*36*/ 0 /*44x44 (144)*/,   0 /*48x48 (174)*/,    0 /*52x52 (204)*/,    0 /*64x64 (280)*/,
+    /*40*/ 0 /*72x72 (368)*/,   0 /*80x80 (456)*/,    0 /*88x88 (576)*/,    0 /*96x96 (696)*/,
+    /*44*/ 0 /*104x104 (816)*/, 0 /*120x120 (1050)*/, 0 /*132x132 (1304)*/, 0 /*144x144 (1558)*/
+};
+
+/* Horizontal matrix size */
+static const unsigned char dm_matrixH[DMSIZESCOUNT] = {
+    /* 0*/  10 /*10x10*/,    12 /*12x12 */,    8 /*8x18*/,     14 /*14x14*/,
+    /* 4*/   8 /*8x32*/,     16 /*16x16*/,    12 /*12x26*/,    18 /*18x18*/,
+    /* 8*/   8 /*8x48*/,     20 /*20x20*/,    12 /*12x36*/,     8 /*8x64*/,
+    /*12*/  22 /*22x22*/,    16 /*16x36*/,     8 /*8x80*/,     24 /*24x24*/,
+    /*16*/   8 /*8x96*/,     12 /*12x64*/,    26 /*26x26*/,    20 /*20x36*/,
+    /*20*/  16 /*16x48*/,     8 /*8x120*/,    20 /*20x44*/,    32 /*32x32*/,
+    /*24*/  16 /*16x64*/,     8 /*8x144*/,    12 /*12x88*/,    26 /*26x40*/,
+    /*28*/  22 /*22x48*/,    24 /*24x48*/,    20 /*20x64*/,    36 /*36x36*/,
+    /*32*/  26 /*26x48*/,    24 /*24x64*/,    40 /*40x40*/,    26 /*26x64*/,
+    /*36*/  44 /*44x44*/,    48 /*48x48*/,    52 /*52x52*/,    64 /*64x64*/,
+    /*40*/  72 /*72x72*/,    80 /*80x80*/,    88 /*88x88*/,    96 /*96x96*/,
+    /*44*/ 104 /*104x104*/, 120 /*120x120*/, 132 /*132x132*/, 144 /*144x144*/
+};
+
+/* Vertical matrix sizes */
+static const unsigned char dm_matrixW[DMSIZESCOUNT] = {
+    /* 0*/  10 /*10x10*/,    12 /*12x12*/,    18 /*8x18*/,     14 /*14x14*/,
+    /* 4*/  32 /*8x32*/,     16 /*16x16*/,    26 /*12x26*/,    18 /*18x18*/,
+    /* 8*/  48 /*8x48*/,     20 /*20x20*/,    36 /*12x36*/,    64 /*8x64*/,
+    /*12*/  22 /*22x22*/,    36 /*16x36*/,    80 /*8x80*/,     24 /*24x24*/,
+    /*16*/  96 /*8x96*/,     64 /*12x64*/,    26 /*26x26*/,    36 /*20x36*/,
+    /*20*/  48 /*16x48*/,   120 /*8x120*/,    44 /*20x44*/,    32 /*32x32*/,
+    /*24*/  64 /*16x64*/,   144 /*8x144*/,    88 /*12x88*/,    40 /*26x40*/,
+    /*28*/  48 /*22x48*/,    48 /*24x48*/,    64 /*20x64*/,    36 /*36x36*/,
+    /*32*/  48 /*26x48*/,    64 /*24x64*/,    40 /*40x40*/,    64 /*26x64*/,
+    /*36*/  44 /*44x44*/,    48 /*48x48*/,    52 /*52x52*/,    64 /*64x64*/,
+    /*40*/  72 /*72x72*/,    80 /*80x80*/,    88 /*88x88*/,    96 /*96x96*/,
+    /*44*/ 104 /*104x104*/, 120 /*120x120*/, 132 /*132x132*/, 144 /*144x144*/
+};
+
+/* Horizontal submodule size (including subfinder) - see Table 7 Data region H + 2 */
+static const unsigned char dm_matrixFH[DMSIZESCOUNT] = {
+    /* 0*/ 10 /*10x10*/,   12 /*12x12*/,    8 /*8x18*/,    14 /*14x14*/,
+    /* 4*/  8 /*8x32*/,    16 /*16x16*/,   12 /*12x26*/,   18 /*18x18*/,
+    /* 8*/  8 /*8x48*/,    20 /*20x20*/,   12 /*12x36*/,    8 /*8x64*/,
+    /*12*/ 22 /*22x22*/,   16 /*16x36*/,    8 /*8x80*/,    24 /*24x24*/,
+    /*16*/  8 /*8x96*/,    12 /*12x64*/,   26 /*26x26*/,   20 /*20x36*/,
+    /*20*/ 16 /*16x48*/,    8 /*8x120*/,   20 /*20x44*/,   16 /*32x32*/,
+    /*24*/ 16 /*16x64*/,    8 /*8x144*/,   12 /*12x88*/,   26 /*26x40*/,
+    /*28*/ 22 /*22x48*/,   24 /*24x48*/,   20 /*20x64*/,   18 /*36x36*/,
+    /*32*/ 26 /*26x48*/,   24 /*24x64*/,   20 /*40x40*/,   26 /*26x64*/,
+    /*36*/ 22 /*44x44*/,   24 /*48x48*/,   26 /*52x52*/,   16 /*64x64*/,
+    /*40*/ 18 /*72x72*/,   20 /*80x80*/,   22 /*88x88*/,   24 /*96x96*/,
+    /*44*/ 26 /*104x104*/, 20 /*120x120*/, 22 /*132x132*/, 24 /*144x144*/
+};
+
+/* Vertical submodule size (including subfinder) - see Table 7 Data region W + 2 */
+static const unsigned char dm_matrixFW[DMSIZESCOUNT] = {
+    /* 0*/ 10 /*10x10*/,   12 /*12x12*/,   18 /*8x18*/,    14 /*14x14*/,
+    /* 4*/ 16 /*8x32*/,    16 /*16x16*/,   26 /*12x26*/,   18 /*18x18*/,
+    /* 8*/ 24 /*8x48*/,    20 /*20x20*/,   18 /*12x36*/,   16 /*8x64*/,
+    /*12*/ 22 /*22x22*/,   18 /*16x36*/,   20 /*8x80*/,    24 /*24x24*/,
+    /*16*/ 24 /*8x96*/,    16 /*12x64*/,   26 /*26x26*/,   18 /*20x36*/,
+    /*20*/ 24 /*16x48*/,   20 /*8x120*/,   22 /*20x44*/,   16 /*32x32*/,
+    /*24*/ 16 /*16x64*/,   24 /*8x144*/,   22 /*12x88*/,   20 /*26x40*/,
+    /*28*/ 24 /*22x48*/,   24 /*24x48*/,   16 /*20x64*/,   18 /*36x36*/,
+    /*32*/ 24 /*26x48*/,   16 /*24x64*/,   20 /*40x40*/,   16 /*26x64*/,
+    /*36*/ 22 /*44x44*/,   24 /*48x48*/,   26 /*52x52*/,   16 /*64x64*/,
+    /*40*/ 18 /*72x72*/,   20 /*80x80*/,   22 /*88x88*/,   24 /*96x96*/,
+    /*44*/ 26 /*104x104*/, 20 /*120x120*/, 22 /*132x132*/, 24 /*144x144*/
+};
+
+/* Data Codewords per RS-Block */
+static const unsigned char dm_matrixdatablock[DMSIZESCOUNT] = {
+    /* 0*/   3 /*10x10*/,     5 /*12x12*/,     5 /*8x18*/,      8 /*14x14*/,
+    /* 4*/  10 /*8x32*/,     12 /*16x16*/,    16 /*12x26*/,    18 /*18x18*/,
+    /* 8*/  18 /*8x48*/,     22 /*20x20*/,    22 /*12x36*/,    24 /*8x64*/,
+    /*12*/  30 /*22x22*/,    32 /*16x36*/,    32 /*8x80*/,     36 /*24x24*/,
+    /*16*/  38 /*8x96*/,     43 /*12x64*/,    44 /*26x26*/,    44 /*20x36*/,
+    /*20*/  49 /*16x48*/,    49 /*8x120*/,    56 /*20x44*/,    62 /*32x32*/,
+    /*24*/  62 /*16x64*/,    63 /*8x144*/,    64 /*12x88*/,    70 /*26x40*/,
+    /*28*/  72 /*22x48*/,    80 /*24x48*/,    84 /*20x64*/,    86 /*36x36*/,
+    /*32*/  90 /*26x48*/,   108 /*24x64*/,   114 /*40x40*/,   118 /*26x64*/,
+    /*36*/ 144 /*44x44*/,   174 /*48x48*/,   102 /*52x52*/,   140 /*64x64*/,
+    /*40*/  92 /*72x72*/,   114 /*80x80*/,   144 /*88x88*/,   174 /*96x96*/,
+    /*44*/ 136 /*104x104*/, 175 /*120x120*/, 163 /*132x132*/, 156 /*144x144*/
+};
+
+/* ECC Codewords per RS-Block */
+static const unsigned char dm_matrixrsblock[DMSIZESCOUNT] = {
+    /* 0*/  5 /*10x10*/,    7 /*12x12*/,    7 /*8x18*/,    10 /*14x14*/,
+    /* 4*/ 11 /*8x32*/,    12 /*16x16*/,   14 /*12x26*/,   14 /*18x18*/,
+    /* 8*/ 15 /*8x48*/,    18 /*20x20*/,   18 /*12x36*/,   18 /*8x64*/,
+    /*12*/ 20 /*22x22*/,   24 /*16x36*/,   22 /*8x80*/,    24 /*24x24*/,
+    /*16*/ 28 /*8x96*/,    27 /*12x64*/,   28 /*26x26*/,   28 /*20x36*/,
+    /*20*/ 28 /*16x48*/,   32 /*8x120*/,   34 /*20x44*/,   36 /*32x32*/,
+    /*24*/ 36 /*16x64*/,   36 /*8x144*/,   36 /*12x88*/,   38 /*26x40*/,
+    /*28*/ 38 /*22x48*/,   41 /*24x48*/,   42 /*20x64*/,   42 /*36x36*/,
+    /*32*/ 42 /*26x48*/,   46 /*24x64*/,   48 /*40x40*/,   50 /*26x64*/,
+    /*36*/ 56 /*44x44*/,   68 /*48x48*/,   42 /*52x52*/,   56 /*64x64*/,
+    /*40*/ 36 /*72x72*/,   48 /*80x80*/,   56 /*88x88*/,   68 /*96x96*/,
+    /*44*/ 56 /*104x104*/, 68 /*120x120*/, 62 /*132x132*/, 62 /*144x144*/
+};
+
+/* vim: set ts=4 sw=4 et : */
+#endif /* Z_DMATRIX_H */