File indexing completed on 2024-05-12 04:43:19

0001 /* This file is part of the KDE project
0002  * Copyright (C) 2001-2007 by OpenMFG, LLC (info@openmfg.com)
0003  * Copyright (C) 2007-2008 by Adam Pigg (adam@piggz.co.uk)
0004  * Copyright (C) 2015 Jarosław Staniek <staniek@kde.org>
0005  *
0006  * This library is free software; you can redistribute it and/or
0007  * modify it under the terms of the GNU Lesser General Public
0008  * License as published by the Free Software Foundation; either
0009  * version 2.1 of the License, or (at your option) any later version.
0010  *
0011  * This library is distributed in the hope that it will be useful,
0012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
0014  * Lesser General Public License for more details.
0015  *
0016  * You should have received a copy of the GNU Lesser General Public
0017  * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
0018  */
0019 
0020 /*
0021  *     This file contains the code that will render the extended 3of9 barcode.
0022  * This code will parse a string and build a compliant 3of9 string and then
0023  * call the 3of9 renderer to do the actual drawing.
0024  */
0025 
0026 #include <QString>
0027 #include <QRect>
0028 
0029 #include "barcodes.h"
0030 
0031 class _ext3of9map
0032 {
0033 public:
0034     _ext3of9map(const char c, const char *s)
0035         : code(c), conversion(QLatin1String(s))
0036     {
0037     }
0038     const char code;
0039     const QString conversion;
0040 };
0041 const _ext3of9map ext3of9map[] = {
0042     _ext3of9map('\0' , "%U"),   // NUL
0043     _ext3of9map('\001' , "$A"),   // SOH
0044     _ext3of9map('\002' , "$B"),   // STX
0045     _ext3of9map('\003' , "$C"),   // ETX
0046     _ext3of9map('\004' , "$D"),   // EOT
0047     _ext3of9map('\005' , "$E"),   // ENQ
0048     _ext3of9map('\006' , "$F"),   // ACK
0049     _ext3of9map('\007' , "$G"),   // BEL
0050     _ext3of9map('\010' , "$H"),   // BS
0051     _ext3of9map('\011' , "$I"),   // HT
0052     _ext3of9map('\012' , "$J"),   // LF
0053     _ext3of9map('\013' , "$K"),   // VT
0054     _ext3of9map('\014' , "$L"),   // FF
0055     _ext3of9map('\015' , "$M"),   // CR
0056     _ext3of9map('\016' , "$N"),   // SO
0057     _ext3of9map('\017' , "$O"),   // SI
0058     _ext3of9map('\020' , "$P"),   // DLE
0059     _ext3of9map('\021' , "$Q"),   // DC1
0060     _ext3of9map('\022' , "$R"),   // DC2
0061     _ext3of9map('\023' , "$S"),   // DC3
0062     _ext3of9map('\024' , "$T"),   // DC4
0063     _ext3of9map('\025' , "$U"),   // NAK
0064     _ext3of9map('\026' , "$V"),   // SYN
0065     _ext3of9map('\027' , "$W"),   // ETB
0066     _ext3of9map('\030' , "$X"),   // CAN
0067     _ext3of9map('\031' , "$Y"),   // EM
0068     _ext3of9map('\032' , "$Z"),   // SUB
0069     _ext3of9map('\033' , "%A"),   // ESC
0070     _ext3of9map('\034' , "%B"),   // FS
0071     _ext3of9map('\035' , "%C"),   // GS
0072     _ext3of9map('\036' , "%D"),   // RS
0073     _ext3of9map('\037' , "%E"),   // US
0074     _ext3of9map(' ' , " "),   // SPACE
0075     _ext3of9map('!' , "/A"),
0076     _ext3of9map('"' , "/B"),
0077     _ext3of9map('#' , "/C"),
0078     _ext3of9map('$' , "/D"),
0079     _ext3of9map('%' , "/E"),
0080     _ext3of9map('&' , "/F"),
0081     _ext3of9map('\'' , "/G"),
0082     _ext3of9map('(' , "/H"),
0083     _ext3of9map(')' , "/I"),
0084     _ext3of9map('*' , "/J"),
0085     _ext3of9map('+' , "/K"),
0086     _ext3of9map(',' , "/L"),
0087     _ext3of9map('-' , "-"),   // /M
0088     _ext3of9map('.' , "."),   // /N
0089     _ext3of9map('/' , "/O"),
0090     _ext3of9map('0' , "0"),   // /P
0091     _ext3of9map('1' , "1"),   // /Q
0092     _ext3of9map('2' , "2"),   // /R
0093     _ext3of9map('3' , "3"),   // /S
0094     _ext3of9map('4' , "4"),   // /T
0095     _ext3of9map('5' , "5"),   // /U
0096     _ext3of9map('6' , "6"),   // /V
0097     _ext3of9map('7' , "7"),   // /W
0098     _ext3of9map('8' , "8"),   // /X
0099     _ext3of9map('9' , "9"),   // /Y
0100     _ext3of9map(':' , "/Z"),
0101     _ext3of9map(';' , "%F"),
0102     _ext3of9map('<' , "%G"),
0103     _ext3of9map('=' , "%H"),
0104     _ext3of9map('>' , "%I"),
0105     _ext3of9map('?' , "%J"),
0106     _ext3of9map('@' , "%V"),
0107     _ext3of9map('A' , "A"),
0108     _ext3of9map('B' , "B"),
0109     _ext3of9map('C' , "C"),
0110     _ext3of9map('D' , "D"),
0111     _ext3of9map('E' , "E"),
0112     _ext3of9map('F' , "F"),
0113     _ext3of9map('G' , "G"),
0114     _ext3of9map('H' , "H"),
0115     _ext3of9map('I' , "I"),
0116     _ext3of9map('J' , "J"),
0117     _ext3of9map('K' , "K"),
0118     _ext3of9map('L' , "L"),
0119     _ext3of9map('M' , "M"),
0120     _ext3of9map('N' , "N"),
0121     _ext3of9map('O' , "O"),
0122     _ext3of9map('P' , "P"),
0123     _ext3of9map('Q' , "Q"),
0124     _ext3of9map('R' , "R"),
0125     _ext3of9map('S' , "S"),
0126     _ext3of9map('T' , "T"),
0127     _ext3of9map('U' , "U"),
0128     _ext3of9map('V' , "V"),
0129     _ext3of9map('W' , "W"),
0130     _ext3of9map('X' , "X"),
0131     _ext3of9map('Y' , "Y"),
0132     _ext3of9map('Z' , "Z"),
0133     _ext3of9map('[' , "%K"),
0134     _ext3of9map('\\' , "%L"),
0135     _ext3of9map(']' , "%M"),
0136     _ext3of9map('^' , "%N"),
0137     _ext3of9map('_' , "%O"),
0138     _ext3of9map('`' , "%W"),
0139     _ext3of9map('a' , "+A"),
0140     _ext3of9map('b' , "+B"),
0141     _ext3of9map('c' , "+C"),
0142     _ext3of9map('d' , "+D"),
0143     _ext3of9map('e' , "+E"),
0144     _ext3of9map('f' , "+F"),
0145     _ext3of9map('g' , "+G"),
0146     _ext3of9map('h' , "+H"),
0147     _ext3of9map('i' , "+I"),
0148     _ext3of9map('j' , "+J"),
0149     _ext3of9map('k' , "+K"),
0150     _ext3of9map('l' , "+L"),
0151     _ext3of9map('m' , "+M"),
0152     _ext3of9map('n' , "+N"),
0153     _ext3of9map('o' , "+O"),
0154     _ext3of9map('p' , "+P"),
0155     _ext3of9map('q' , "+Q"),
0156     _ext3of9map('r' , "+R"),
0157     _ext3of9map('s' , "+S"),
0158     _ext3of9map('t' , "+T"),
0159     _ext3of9map('u' , "+U"),
0160     _ext3of9map('v' , "+V"),
0161     _ext3of9map('w' , "+W"),
0162     _ext3of9map('x' , "+X"),
0163     _ext3of9map('y' , "+Y"),
0164     _ext3of9map('z' , "+Z"),
0165     _ext3of9map('{' , "%P"),
0166     _ext3of9map('|' , "%Q"),
0167     _ext3of9map('}' , "%R"),
0168     _ext3of9map('~' , "%S"),
0169     _ext3of9map('\177' , "%T"),   // DEL
0170 
0171     _ext3of9map(-1 , nullptr)
0172 };
0173 
0174 inline QString convertTo3of9(char code)
0175 {
0176     for (int i = 0; !ext3of9map[i].conversion.isEmpty(); i++)
0177         if (ext3of9map[i].code == code)
0178             return ext3of9map[i].conversion;
0179     return QString();
0180 }
0181 
0182 QString convertTo3of9(const QString &str)
0183 {
0184     QString result;
0185     for (int i = 0; i < str.length(); i++) {
0186         result += convertTo3of9(str.at(i).toLatin1());
0187     }
0188     return result;
0189 }
0190 
0191 void renderExtended3of9(OROPage * page, const QRectF & r, const QString & str, Qt::Alignment align)
0192 {
0193     render3of9(page, r, convertTo3of9(str), align);
0194 }