1 51 package org.apache.fop.fo; 52 53 import org.apache.fop.layout.Area; 54 import org.apache.fop.layout.TextState; 55 import org.apache.fop.apps.FOPException; 56 57 61 public abstract class FObjMixed extends FObj { 62 63 protected TextState textState; 65 66 private StringBuffer textBuffer; 67 68 protected FObjMixed(FObj parent, PropertyList propertyList, 69 String systemId, int line, int column) 70 throws FOPException { 71 super(parent, propertyList, systemId, line, column); 72 textState = propMgr.getTextDecoration(parent); 73 74 } 75 76 public TextState getTextState() { 77 return textState; 78 } 79 80 protected void addCharacters(char data[], int start, int length) { 81 if ( textBuffer==null ) { 82 textBuffer = new StringBuffer (); 83 } 84 textBuffer.append(data,start,length); 85 } 86 87 private final void finalizeText() { 88 if (textBuffer != null && textBuffer.length() > 0) { 89 FOText ft = new FOText(textBuffer, this); 90 ft.setTextState(textState); 91 super.addChild(ft); 92 textBuffer.setLength(0); 93 } 94 } 95 96 protected void end() { 97 finalizeText(); 98 textBuffer=null; 99 } 100 101 protected void addChild(FONode child) { 102 finalizeText(); 103 super.addChild(child); 104 } 105 106 public int layout(Area area) throws FOPException { 107 108 if (this.properties != null) { 109 Property prop = this.properties.get("id"); 110 if (prop != null) { 111 String id = prop.getString(); 112 113 if (this.marker == START) { 114 if (area.getIDReferences() != null) { 115 try { 116 area.getIDReferences().createID(id); 117 } 118 catch(FOPException e) { 119 if (!e.isLocationSet()) { 120 e.setLocation(systemId, line, column); 121 } 122 throw e; 123 } 124 } 125 this.marker = 0; 126 } 127 128 if (this.marker == 0) { 129 if (area.getIDReferences() != null) 130 area.getIDReferences().configureID(id, area); 131 } 132 } 133 } 134 135 int numChildren = this.children.size(); 136 for (int i = this.marker; i < numChildren; i++) { 137 FONode fo = (FONode)children.get(i); 138 int status; 139 if (Status.isIncomplete((status = fo.layout(area)))) { 140 this.marker = i; 141 return status; 142 } 143 } 144 return Status.OK; 145 } 146 147 } 148 149 | Popular Tags |