1 51 package org.apache.fop.fo.flow; 52 53 import org.apache.fop.fo.*; 55 import org.apache.fop.layout.*; 56 import org.apache.fop.layout.BlockArea; 57 import org.apache.fop.apps.FOPException; 58 59 public class ListBlock extends FObj { 60 61 public static class Maker extends FObj.Maker { 62 public FObj make(FObj parent, PropertyList propertyList, 63 String systemId, int line, int column) 64 throws FOPException { 65 return new ListBlock(parent, propertyList, 66 systemId, line, column); 67 } 68 69 } 70 71 public static FObj.Maker maker() { 72 return new ListBlock.Maker(); 73 } 74 75 int align; 76 int alignLast; 77 int breakBefore; 78 int breakAfter; 79 int lineHeight; 80 int startIndent; 81 int endIndent; 82 int spaceBefore; 83 int spaceAfter; 84 int spaceBetweenListRows = 0; 85 86 public ListBlock(FObj parent, PropertyList propertyList, 87 String systemId, int line, int column) { 88 super(parent, propertyList, systemId, line, column); 89 } 90 91 public String getName() { 92 return "fo:list-block"; 93 } 94 95 public int layout(Area area) throws FOPException { 96 if (this.marker == START) { 97 98 AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); 100 101 AuralProps mAurProps = propMgr.getAuralProps(); 103 104 BorderAndPadding bap = propMgr.getBorderAndPadding(); 106 BackgroundProps bProps = propMgr.getBackgroundProps(); 107 108 MarginProps mProps = propMgr.getMarginProps(); 110 111 RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); 113 114 123 this.align = this.properties.get("text-align").getEnum(); 124 this.alignLast = this.properties.get("text-align-last").getEnum(); 125 this.lineHeight = 126 this.properties.get("line-height").getLength().mvalue(); 127 this.startIndent = 128 this.properties.get("start-indent").getLength().mvalue(); 129 this.endIndent = 130 this.properties.get("end-indent").getLength().mvalue(); 131 this.spaceBefore = 132 this.properties.get("space-before.optimum").getLength().mvalue(); 133 this.spaceAfter = 134 this.properties.get("space-after.optimum").getLength().mvalue(); 135 this.spaceBetweenListRows = 0; 137 this.marker = 0; 138 139 if (area instanceof BlockArea) { 140 area.end(); 141 } 142 143 if (spaceBefore != 0) { 144 area.addDisplaySpace(spaceBefore); 145 } 146 147 if (this.isInTableCell) { 148 startIndent += forcedStartOffset; 149 endIndent += area.getAllocationWidth() - forcedWidth 150 - forcedStartOffset; 151 } 152 153 String id = this.properties.get("id").getString(); 155 try { 156 area.getIDReferences().initializeID(id, area); 157 } 158 catch(FOPException e) { 159 if (!e.isLocationSet()) { 160 e.setLocation(systemId, line, column); 161 } 162 throw e; 163 } 164 } 165 166 BlockArea blockArea = 167 new BlockArea(propMgr.getFontState(area.getFontInfo()), 168 area.getAllocationWidth(), area.spaceLeft(), 169 startIndent, endIndent, 0, align, alignLast, 170 lineHeight); 171 blockArea.setTableCellXOffset(area.getTableCellXOffset()); 173 blockArea.setGeneratedBy(this); 174 this.areasGenerated++; 175 if (this.areasGenerated == 1) 176 blockArea.isFirst(true); 177 180 184 185 blockArea.setParent(area); 186 blockArea.setPage(area.getPage()); 187 blockArea.setBackground(propMgr.getBackgroundProps()); 188 blockArea.start(); 189 190 blockArea.setAbsoluteHeight(area.getAbsoluteHeight()); 191 blockArea.setIDReferences(area.getIDReferences()); 192 193 int numChildren = this.children.size(); 194 for (int i = this.marker; i < numChildren; i++) { 195 if (!(children.get(i) instanceof ListItem)) { 196 log.error("children of list-blocks must be list-items"); 197 return Status.OK; 198 } 199 ListItem listItem = (ListItem)children.get(i); 200 int status; 201 if (Status.isIncomplete((status = listItem.layout(blockArea)))) { 202 if (status == Status.AREA_FULL_NONE && i > 0) { 203 status = Status.AREA_FULL_SOME; 204 } 205 this.marker = i; 206 blockArea.end(); 207 area.addChild(blockArea); 208 area.increaseHeight(blockArea.getHeight()); 209 return status; 210 } 211 } 212 213 blockArea.end(); 214 area.addChild(blockArea); 215 area.increaseHeight(blockArea.getHeight()); 216 217 if (spaceAfter != 0) { 218 area.addDisplaySpace(spaceAfter); 219 } 220 221 if (area instanceof BlockArea) { 222 area.start(); 223 } 224 225 blockArea.isLast(true); 226 return Status.OK; 227 } 228 229 } 230 | Popular Tags |