001 /** 002 * This library is free software; you can redistribute it and/or modify it 003 * under the terms of the GNU Lesser General Public License (LGPL) as 004 * published by the Free Software Foundation; either version 3.0 of the 005 * License, or (at your option) any later version. 006 * 007 * This library is distributed in the hope that it will be useful, but 008 * WITHOUT ANY WARRANTY; without even the implied warranty of 009 * MERCHANTABILITY of FITNESS FOR A PARTICULAR PURPOSE. See the GNU 010 * Lesser General Public License for more details. 011 */ 012 013 /** 014 * Title: JBarcodeBean 015 * Description: Barcode JavaBeans Component 016 * Copyright: Copyright (C) 2004 017 * Company: Dafydd Walters 018 */ 019 package net.sourceforge.jbarcodebean.model; 020 021 /** 022 * This class, which implements the {@link BarcodeStrategy} interface, 023 * knows how to encode the 3:1 (wide) 024 * variant of the Extended Code 3 of 9 barcode type. 025 */ 026 public class ExtendedCode39 extends BaseCode39 implements java.io.Serializable { 027 028 private static Conversion[] conversions = { 029 new Conversion('\u0000', "%U"), 030 new Conversion('\u0001', "$A"), 031 new Conversion('\u0002', "$B"), 032 new Conversion('\u0003', "$C"), 033 new Conversion('\u0004', "$D"), 034 new Conversion('\u0005', "$E"), 035 new Conversion('\u0006', "$F"), 036 new Conversion('\u0007', "$G"), 037 new Conversion('\b', "$H"), 038 new Conversion('\t', "$I"), 039 new Conversion('\n', "$J"), 040 new Conversion('\u000B', "$K"), 041 new Conversion('\f', "$L"), 042 new Conversion('\r', "$M"), 043 new Conversion('\u000E', "$N"), 044 new Conversion('\u000F', "$O"), 045 new Conversion('\u0010', "$P"), 046 new Conversion('\u0011', "$Q"), 047 new Conversion('\u0012', "$R"), 048 new Conversion('\u0013', "$S"), 049 new Conversion('\u0014', "$T"), 050 new Conversion('\u0015', "$U"), 051 new Conversion('\u0016', "$V"), 052 new Conversion('\u0017', "$W"), 053 new Conversion('\u0018', "$X"), 054 new Conversion('\u0019', "$Y"), 055 new Conversion('\u001A', "$Z"), 056 new Conversion('\u001B', "%A"), 057 new Conversion('\u001C', "%B"), 058 new Conversion('\u001D', "%C"), 059 new Conversion('\u001E', "%D"), 060 new Conversion('\u001F', "%E"), 061 // Space is not converted 062 new Conversion('!', "/A"), 063 new Conversion('"', "/B"), 064 new Conversion('#', "/C"), 065 new Conversion('$', "/D"), 066 new Conversion('%', "/E"), 067 new Conversion('&', "/F"), 068 new Conversion('\'', "/G"), 069 new Conversion('(', "/H"), 070 new Conversion(')', "/I"), 071 new Conversion('*', "/J"), 072 new Conversion('+', "/K"), 073 new Conversion(',', "/L"), 074 new Conversion('-', "/M"), 075 new Conversion('.', "/N"), 076 new Conversion('/', "/O"), 077 // Digits 0 through 9 not converted 078 new Conversion(':', "/Z"), 079 new Conversion(';', "%F"), 080 new Conversion('<', "%G"), 081 new Conversion('=', "%H"), 082 new Conversion('>', "%I"), 083 new Conversion('?', "%J"), 084 new Conversion('@', "%V"), 085 // Upper case letters A through Z not converted 086 new Conversion('[', "%K"), 087 new Conversion('\\', "%L"), 088 new Conversion(']', "%M"), 089 new Conversion('^', "%N"), 090 new Conversion('_', "%O"), 091 new Conversion('`', "%W"), 092 new Conversion('a', "+A"), 093 new Conversion('b', "+B"), 094 new Conversion('c', "+C"), 095 new Conversion('d', "+D"), 096 new Conversion('e', "+E"), 097 new Conversion('f', "+F"), 098 new Conversion('g', "+G"), 099 new Conversion('h', "+H"), 100 new Conversion('i', "+I"), 101 new Conversion('j', "+J"), 102 new Conversion('k', "+K"), 103 new Conversion('l', "+L"), 104 new Conversion('m', "+M"), 105 new Conversion('n', "+N"), 106 new Conversion('o', "+O"), 107 new Conversion('p', "+P"), 108 new Conversion('q', "+Q"), 109 new Conversion('r', "+R"), 110 new Conversion('s', "+S"), 111 new Conversion('t', "+T"), 112 new Conversion('u', "+U"), 113 new Conversion('v', "+V"), 114 new Conversion('w', "+W"), 115 new Conversion('x', "+X"), 116 new Conversion('y', "+Y"), 117 new Conversion('z', "+Z"), 118 new Conversion('{', "%P"), 119 new Conversion('|', "%Q"), 120 new Conversion('}', "%R"), 121 new Conversion('~', "%S"), 122 new Conversion('\u007F', "%T") 123 }; 124 125 /** 126 * This implementation of <tt>getCodes</tt> returns {@link BaseCode39#codes}. 127 */ 128 protected CharacterCode[] getCodes() { 129 return BaseCode39.codes; 130 } 131 132 /** 133 * Converts ASCII to Code 39 characters. 134 */ 135 protected String preprocess(String text) { 136 // Convert ASCII to extended Code 39 codes. 137 String toText = ""; 138 int len = text.length(); 139 for (int i = 0; i < len; i++) { 140 char ch = text.charAt(i); 141 boolean found = false; 142 for (int j = 0; j < conversions.length; j++) { 143 if (ch == conversions[j].from) { 144 toText += conversions[j].to; 145 found = true; 146 break; 147 } 148 } 149 if (!found) { 150 toText += ch; 151 } 152 } 153 return toText; 154 } 155 156 /** 157 * Returns the <tt>text</tt> parameter unmodified. 158 */ 159 protected String getBarcodeLabelText(String text) { 160 return text; 161 } 162 163 private static class Conversion { 164 char from; 165 String to; 166 public Conversion(char from, String to) { 167 this.from = from; 168 this.to = to; 169 } 170 } 171 }