1 17 18 19 20 package org.apache.fop.render.txt.border; 21 22 import java.util.Arrays ; 23 24 27 public class DashedBorderElement extends AbstractBorderElement { 28 29 private static final char DASH_HORIZONTAL = '-'; 30 31 private static final char DASH_VERTICAL = '|'; 32 33 private static final char UNDEFINED = '?'; 34 35 private static final int UP2 = 1; 36 37 private static final int RIGHT2 = 2; 38 39 private static final int DOWN2 = 4; 40 41 private static final int LEFT2 = 8; 42 43 private static char[] map = new char[20]; 44 45 static { 46 Arrays.fill(map, UNDEFINED); 47 map[0] = ' '; 48 map[UP2] = DASH_VERTICAL; 49 map[DOWN2] = DASH_VERTICAL; 50 map[UP2 + DOWN2] = DASH_VERTICAL; 51 52 map[LEFT2] = DASH_HORIZONTAL; 53 map[RIGHT2] = DASH_HORIZONTAL; 54 map[LEFT2 + RIGHT2] = DASH_HORIZONTAL; 55 } 56 57 63 public DashedBorderElement(int type) { 64 super(type); 65 } 66 67 74 private AbstractBorderElement mergeSolid(SolidAndDoubleBorderElement sdb) { 75 AbstractBorderElement e = new SolidAndDoubleBorderElement(EN_SOLID, 0); 76 for (int i = 0; i < 4; i++) { 77 e.setData(i, Math.max(data[i], sdb.getData(i))); 78 } 79 return e; 80 } 81 82 89 private AbstractBorderElement mergeDashed(DashedBorderElement dbe) { 90 for (int i = 0; i < 4; i++) { 91 data[i] = Math.max(data[i], dbe.getData(i)); 92 } 93 return this; 94 } 95 96 102 private AbstractBorderElement toSolidAndDouble() { 103 AbstractBorderElement e = new SolidAndDoubleBorderElement(EN_SOLID, 0); 104 for (int i = 0; i < 4; i++) { 105 e.setData(i, data[i]); 106 } 107 return e; 108 } 109 110 115 public AbstractBorderElement merge(AbstractBorderElement e) { 116 AbstractBorderElement abe = this; 117 if (e instanceof SolidAndDoubleBorderElement) { 118 abe = mergeSolid((SolidAndDoubleBorderElement) e); 119 } else if (e instanceof DashedBorderElement) { 120 abe = mergeDashed((DashedBorderElement) e); 121 } else { 122 abe = e; 123 } 124 return abe; 125 } 126 127 130 public char convert2Char() { 131 int key = 0; 132 key += data[UP] * UP2; 133 key += data[DOWN] * DOWN2; 134 key += data[LEFT] * LEFT2; 135 key += data[RIGHT] * RIGHT2; 136 char ch = map[key]; 137 if (ch == UNDEFINED) { 138 ch = toSolidAndDouble().convert2Char(); 139 } 140 return ch; 141 } 142 } 143 | Popular Tags |