You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PropertySets.java 52KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086
  1. /*
  2. * Copyright 1999-2004 The Apache Software Foundation.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. /* $Id$ */
  17. package org.apache.fop.fo;
  18. import org.apache.fop.fo.Constants;
  19. import java.util.BitSet;
  20. import java.util.ArrayList;
  21. public class PropertySets {
  22. private static short[][] mapping = null;
  23. private Element[] elements = new Element[Constants.ELEMENT_COUNT+1];
  24. private BitSet block_elems = new BitSet();
  25. private BitSet inline_elems = new BitSet();
  26. BitSet CommonAccessibilityProperties = new BitSet();
  27. BitSet CommonAbsolutePositionProperties = new BitSet();
  28. BitSet CommonAuralProperties = new BitSet();
  29. BitSet CommonBorderPaddingBackgroundProperties = new BitSet();
  30. BitSet CommonFontProperties = new BitSet();
  31. BitSet CommonHyphenationProperties = new BitSet();
  32. BitSet CommonMarginPropertiesBlock = new BitSet();
  33. BitSet CommonMarginPropertiesInline = new BitSet();
  34. BitSet CommonRelativePositionProperties = new BitSet();
  35. public void initializeElements() {
  36. block_elems.set(Constants.FO_BLOCK);
  37. block_elems.set(Constants.FO_BLOCK_CONTAINER);
  38. block_elems.set(Constants.FO_TABLE_AND_CAPTION);
  39. block_elems.set(Constants.FO_TABLE);
  40. block_elems.set(Constants.FO_LIST_BLOCK);
  41. inline_elems.set(Constants.FO_BIDI_OVERRIDE);
  42. inline_elems.set(Constants.FO_CHARACTER);
  43. inline_elems.set(Constants.FO_EXTERNAL_GRAPHIC);
  44. inline_elems.set(Constants.FO_INSTREAM_FOREIGN_OBJECT);
  45. inline_elems.set(Constants.FO_INLINE);
  46. inline_elems.set(Constants.FO_INLINE_CONTAINER);
  47. inline_elems.set(Constants.FO_LEADER);
  48. inline_elems.set(Constants.FO_PAGE_NUMBER);
  49. inline_elems.set(Constants.FO_PAGE_NUMBER_CITATION);
  50. inline_elems.set(Constants.FO_BASIC_LINK);
  51. inline_elems.set(Constants.FO_MULTI_TOGGLE);
  52. }
  53. public void initializeCommon() {
  54. CommonAccessibilityProperties.set(Constants.PR_SOURCE_DOCUMENT);
  55. CommonAccessibilityProperties.set(Constants.PR_ROLE);
  56. CommonAbsolutePositionProperties.set(Constants.PR_ABSOLUTE_POSITION);
  57. CommonAbsolutePositionProperties.set(Constants.PR_POSITION);
  58. CommonAbsolutePositionProperties.set(Constants.PR_TOP);
  59. CommonAbsolutePositionProperties.set(Constants.PR_RIGHT);
  60. CommonAbsolutePositionProperties.set(Constants.PR_BOTTOM);
  61. CommonAbsolutePositionProperties.set(Constants.PR_LEFT);
  62. CommonAuralProperties.set(Constants.PR_AZIMUTH);
  63. CommonAuralProperties.set(Constants.PR_CUE_AFTER);
  64. CommonAuralProperties.set(Constants.PR_CUE_BEFORE);
  65. CommonAuralProperties.set(Constants.PR_CUE);
  66. CommonAuralProperties.set(Constants.PR_ELEVATION);
  67. CommonAuralProperties.set(Constants.PR_PAUSE_AFTER);
  68. CommonAuralProperties.set(Constants.PR_PAUSE_BEFORE);
  69. CommonAuralProperties.set(Constants.PR_PAUSE);
  70. CommonAuralProperties.set(Constants.PR_PITCH);
  71. CommonAuralProperties.set(Constants.PR_PITCH_RANGE);
  72. CommonAuralProperties.set(Constants.PR_PLAY_DURING);
  73. CommonAuralProperties.set(Constants.PR_RICHNESS);
  74. CommonAuralProperties.set(Constants.PR_SPEAK);
  75. CommonAuralProperties.set(Constants.PR_SPEAK_HEADER);
  76. CommonAuralProperties.set(Constants.PR_SPEAK_NUMERAL);
  77. CommonAuralProperties.set(Constants.PR_SPEAK_PUNCTUATION);
  78. CommonAuralProperties.set(Constants.PR_SPEECH_RATE);
  79. CommonAuralProperties.set(Constants.PR_STRESS);
  80. CommonAuralProperties.set(Constants.PR_VOICE_FAMILY);
  81. CommonAuralProperties.set(Constants.PR_VOLUME);
  82. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_ATTACHMENT);
  83. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_COLOR);
  84. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_IMAGE);
  85. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_REPEAT);
  86. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_POSITION_HORIZONTAL);
  87. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BACKGROUND_POSITION_VERTICAL);
  88. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BEFORE_COLOR);
  89. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BEFORE_STYLE);
  90. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BEFORE_WIDTH);
  91. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_AFTER_COLOR);
  92. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_AFTER_STYLE);
  93. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_AFTER_WIDTH);
  94. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_START_COLOR);
  95. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_START_STYLE);
  96. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_START_WIDTH);
  97. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_END_COLOR);
  98. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_END_STYLE);
  99. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_END_WIDTH);
  100. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_TOP_COLOR);
  101. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_TOP_STYLE);
  102. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_TOP_WIDTH);
  103. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BOTTOM_COLOR);
  104. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BOTTOM_STYLE);
  105. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BOTTOM_WIDTH);
  106. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_LEFT_COLOR);
  107. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_LEFT_STYLE);
  108. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_LEFT_WIDTH);
  109. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_RIGHT_COLOR);
  110. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_RIGHT_STYLE);
  111. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_RIGHT_WIDTH);
  112. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_BEFORE);
  113. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_AFTER);
  114. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_START);
  115. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_END);
  116. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_TOP);
  117. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_BOTTOM);
  118. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_LEFT);
  119. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING_RIGHT);
  120. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER);
  121. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_STYLE);
  122. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_WIDTH);
  123. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_COLOR);
  124. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_TOP);
  125. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_BOTTOM);
  126. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_LEFT);
  127. CommonBorderPaddingBackgroundProperties.set(Constants.PR_BORDER_RIGHT);
  128. CommonBorderPaddingBackgroundProperties.set(Constants.PR_PADDING);
  129. CommonFontProperties.set(Constants.PR_FONT);
  130. CommonFontProperties.set(Constants.PR_FONT_FAMILY);
  131. CommonFontProperties.set(Constants.PR_FONT_SELECTION_STRATEGY);
  132. CommonFontProperties.set(Constants.PR_FONT_SIZE);
  133. CommonFontProperties.set(Constants.PR_FONT_STRETCH);
  134. CommonFontProperties.set(Constants.PR_FONT_SIZE_ADJUST);
  135. CommonFontProperties.set(Constants.PR_FONT_STYLE);
  136. CommonFontProperties.set(Constants.PR_FONT_VARIANT);
  137. CommonFontProperties.set(Constants.PR_FONT_WEIGHT);
  138. CommonHyphenationProperties.set(Constants.PR_COUNTRY);
  139. CommonHyphenationProperties.set(Constants.PR_LANGUAGE);
  140. CommonHyphenationProperties.set(Constants.PR_SCRIPT);
  141. CommonHyphenationProperties.set(Constants.PR_HYPHENATE);
  142. CommonHyphenationProperties.set(Constants.PR_HYPHENATION_CHARACTER);
  143. CommonHyphenationProperties.set(Constants.PR_HYPHENATION_PUSH_CHARACTER_COUNT);
  144. CommonHyphenationProperties.set(Constants.PR_HYPHENATION_REMAIN_CHARACTER_COUNT);
  145. CommonMarginPropertiesBlock.set(Constants.PR_MARGIN);
  146. CommonMarginPropertiesBlock.set(Constants.PR_MARGIN_TOP);
  147. CommonMarginPropertiesBlock.set(Constants.PR_MARGIN_BOTTOM);
  148. CommonMarginPropertiesBlock.set(Constants.PR_MARGIN_LEFT);
  149. CommonMarginPropertiesBlock.set(Constants.PR_MARGIN_RIGHT);
  150. CommonMarginPropertiesBlock.set(Constants.PR_SPACE_BEFORE);
  151. CommonMarginPropertiesBlock.set(Constants.PR_SPACE_AFTER);
  152. CommonMarginPropertiesBlock.set(Constants.PR_START_INDENT);
  153. CommonMarginPropertiesBlock.set(Constants.PR_END_INDENT);
  154. CommonMarginPropertiesInline.set(Constants.PR_SPACE_END);
  155. CommonMarginPropertiesInline.set(Constants.PR_SPACE_START);
  156. CommonRelativePositionProperties.set(Constants.PR_RELATIVE_POSITION);
  157. }
  158. public void initialize() {
  159. // define the fo: elements
  160. for (int i = 1; i < elements.length; i++) {
  161. elements[i] = new Element(i);
  162. }
  163. // populate the elements with properties and content elements.
  164. Element elem;
  165. elem = elements[Constants.FO_ROOT];
  166. elem.addProperty(Constants.PR_MEDIA_USAGE);
  167. elem.addContent(Constants.FO_LAYOUT_MASTER_SET);
  168. elem.addContent(Constants.FO_DECLARATION);
  169. elem.addContent(Constants.FO_PAGE_SEQUENCE);
  170. elem = elements[Constants.FO_DECLARATION];
  171. elem.addContent(Constants.FO_COLOR_PROFILE);
  172. elem = elements[Constants.FO_COLOR_PROFILE];
  173. elem.addProperty(Constants.PR_SRC);
  174. elem.addProperty(Constants.PR_COLOR_PROFILE_NAME);
  175. elem.addProperty(Constants.PR_RENDERING_INTENT);
  176. elem = elements[Constants.FO_PAGE_SEQUENCE];
  177. elem.addProperty(Constants.PR_COUNTRY);
  178. elem.addProperty(Constants.PR_FORMAT);
  179. elem.addProperty(Constants.PR_LANGUAGE);
  180. elem.addProperty(Constants.PR_LETTER_VALUE);
  181. elem.addProperty(Constants.PR_GROUPING_SEPARATOR);
  182. elem.addProperty(Constants.PR_GROUPING_SIZE);
  183. elem.addProperty(Constants.PR_ID);
  184. elem.addProperty(Constants.PR_INITIAL_PAGE_NUMBER);
  185. elem.addProperty(Constants.PR_FORCE_PAGE_COUNT);
  186. elem.addProperty(Constants.PR_MASTER_REFERENCE);
  187. elem.addContent(Constants.FO_TITLE);
  188. elem.addContent(Constants.FO_STATIC_CONTENT);
  189. elem.addContent(Constants.FO_FLOW);
  190. elem = elements[Constants.FO_LAYOUT_MASTER_SET];
  191. elem.addProperty(Constants.PR_MASTER_NAME);
  192. elem.addContent(Constants.FO_SIMPLE_PAGE_MASTER);
  193. elem.addContent(Constants.FO_PAGE_SEQUENCE_MASTER);
  194. elem = elements[Constants.FO_PAGE_SEQUENCE_MASTER];
  195. elem.addProperty(Constants.PR_MASTER_NAME);
  196. elem.addContent(Constants.FO_SINGLE_PAGE_MASTER_REFERENCE);
  197. elem.addContent(Constants.FO_REPEATABLE_PAGE_MASTER_REFERENCE);
  198. elem.addContent(Constants.FO_REPEATABLE_PAGE_MASTER_ALTERNATIVES);
  199. elem = elements[Constants.FO_SINGLE_PAGE_MASTER_REFERENCE];
  200. elem.addProperty(Constants.PR_MASTER_REFERENCE);
  201. elem = elements[Constants.FO_REPEATABLE_PAGE_MASTER_REFERENCE];
  202. elem.addProperty(Constants.PR_MASTER_REFERENCE);
  203. elem.addProperty(Constants.PR_MAXIMUM_REPEATS);
  204. elem = elements[Constants.FO_REPEATABLE_PAGE_MASTER_ALTERNATIVES];
  205. elem.addProperty(Constants.PR_MAXIMUM_REPEATS);
  206. elem.addContent(Constants.FO_CONDITIONAL_PAGE_MASTER_REFERENCE);
  207. elem = elements[Constants.FO_CONDITIONAL_PAGE_MASTER_REFERENCE];
  208. elem.addProperty(Constants.PR_MASTER_REFERENCE);
  209. elem.addProperty(Constants.PR_PAGE_POSITION);
  210. elem.addProperty(Constants.PR_ODD_OR_EVEN);
  211. elem.addProperty(Constants.PR_BLANK_OR_NOT_BLANK);
  212. elem = elements[Constants.FO_SIMPLE_PAGE_MASTER];
  213. elem.addProperties(CommonMarginPropertiesBlock);
  214. elem.addProperty(Constants.PR_MASTER_NAME);
  215. elem.addProperty(Constants.PR_PAGE_HEIGHT);
  216. elem.addProperty(Constants.PR_PAGE_WIDTH);
  217. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  218. elem.addProperty(Constants.PR_WRITING_MODE);
  219. elem.addContent(Constants.FO_REGION_BODY);
  220. elem.addContent(Constants.FO_REGION_BEFORE);
  221. elem.addContent(Constants.FO_REGION_AFTER);
  222. elem.addContent(Constants.FO_REGION_START);
  223. elem.addContent(Constants.FO_REGION_END);
  224. elem = elements[Constants.FO_REGION_BODY];
  225. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  226. elem.addProperties(CommonMarginPropertiesBlock);
  227. elem.addProperty(Constants.PR_CLIP);
  228. elem.addProperty(Constants.PR_COLUMN_COUNT);
  229. elem.addProperty(Constants.PR_COLUMN_GAP);
  230. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  231. elem.addProperty(Constants.PR_OVERFLOW);
  232. elem.addProperty(Constants.PR_REGION_NAME);
  233. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  234. elem.addProperty(Constants.PR_WRITING_MODE);
  235. elem = elements[Constants.FO_REGION_BEFORE];
  236. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  237. elem.addProperty(Constants.PR_CLIP);
  238. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  239. elem.addProperty(Constants.PR_EXTENT);
  240. elem.addProperty(Constants.PR_OVERFLOW);
  241. elem.addProperty(Constants.PR_PRECEDENCE);
  242. elem.addProperty(Constants.PR_REGION_NAME);
  243. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  244. elem.addProperty(Constants.PR_WRITING_MODE);
  245. elem = elements[Constants.FO_REGION_AFTER];
  246. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  247. elem.addProperty(Constants.PR_CLIP);
  248. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  249. elem.addProperty(Constants.PR_EXTENT);
  250. elem.addProperty(Constants.PR_OVERFLOW);
  251. elem.addProperty(Constants.PR_PRECEDENCE);
  252. elem.addProperty(Constants.PR_REGION_NAME);
  253. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  254. elem.addProperty(Constants.PR_WRITING_MODE);
  255. elem = elements[Constants.FO_REGION_START];
  256. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  257. elem.addProperty(Constants.PR_CLIP);
  258. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  259. elem.addProperty(Constants.PR_EXTENT);
  260. elem.addProperty(Constants.PR_OVERFLOW);
  261. elem.addProperty(Constants.PR_REGION_NAME);
  262. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  263. elem.addProperty(Constants.PR_WRITING_MODE);
  264. elem = elements[Constants.FO_REGION_END];
  265. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  266. elem.addProperty(Constants.PR_CLIP);
  267. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  268. elem.addProperty(Constants.PR_EXTENT);
  269. elem.addProperty(Constants.PR_OVERFLOW);
  270. elem.addProperty(Constants.PR_REGION_NAME);
  271. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  272. elem.addProperty(Constants.PR_WRITING_MODE);
  273. elem = elements[Constants.FO_FLOW];
  274. elem.addProperty(Constants.PR_FLOW_NAME);
  275. elem.addContent(block_elems);
  276. elem = elements[Constants.FO_STATIC_CONTENT];
  277. elem.addProperty(Constants.PR_FLOW_NAME);
  278. elem.addContent(block_elems);
  279. elem = elements[Constants.FO_TITLE];
  280. elem.addProperties(CommonAccessibilityProperties);
  281. elem.addProperties(CommonAuralProperties);
  282. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  283. elem.addProperties(CommonFontProperties);
  284. elem.addProperties(CommonMarginPropertiesInline);
  285. elem.addProperty(Constants.PR_COLOR);
  286. elem.addProperty(Constants.PR_LINE_HEIGHT);
  287. elem.addProperty(Constants.PR_VISIBILITY);
  288. elem.addContent(inline_elems);
  289. elem = elements[Constants.FO_BLOCK];
  290. elem.addProperties(CommonAccessibilityProperties);
  291. elem.addProperties(CommonAuralProperties);
  292. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  293. elem.addProperties(CommonFontProperties);
  294. elem.addProperties(CommonHyphenationProperties);
  295. elem.addProperties(CommonMarginPropertiesBlock);
  296. elem.addProperties(CommonRelativePositionProperties);
  297. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  298. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  299. elem.addProperty(Constants.PR_BREAK_AFTER);
  300. elem.addProperty(Constants.PR_BREAK_BEFORE);
  301. elem.addProperty(Constants.PR_COLOR);
  302. elem.addProperty(Constants.PR_TEXT_DEPTH);
  303. elem.addProperty(Constants.PR_TEXT_ALTITUDE);
  304. elem.addProperty(Constants.PR_HYPHENATION_KEEP);
  305. elem.addProperty(Constants.PR_HYPHENATION_LADDER_COUNT);
  306. elem.addProperty(Constants.PR_ID);
  307. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  308. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  309. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  310. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  311. elem.addProperty(Constants.PR_LAST_LINE_END_INDENT);
  312. elem.addProperty(Constants.PR_LINEFEED_TREATMENT);
  313. elem.addProperty(Constants.PR_LINE_HEIGHT);
  314. elem.addProperty(Constants.PR_LINE_HEIGHT_SHIFT_ADJUSTMENT);
  315. elem.addProperty(Constants.PR_LINE_STACKING_STRATEGY);
  316. elem.addProperty(Constants.PR_ORPHANS);
  317. elem.addProperty(Constants.PR_WHITE_SPACE_TREATMENT);
  318. elem.addProperty(Constants.PR_SPAN);
  319. elem.addProperty(Constants.PR_TEXT_ALIGN);
  320. elem.addProperty(Constants.PR_TEXT_ALIGN_LAST);
  321. elem.addProperty(Constants.PR_TEXT_INDENT);
  322. elem.addProperty(Constants.PR_VISIBILITY);
  323. elem.addProperty(Constants.PR_WHITE_SPACE_COLLAPSE);
  324. elem.addProperty(Constants.PR_WIDOWS);
  325. elem.addProperty(Constants.PR_WRAP_OPTION);
  326. elem.addContent(inline_elems);
  327. elem.addContent(block_elems);
  328. elem = elements[Constants.FO_BLOCK_CONTAINER];
  329. elem.addProperties(CommonAbsolutePositionProperties);
  330. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  331. elem.addProperties(CommonMarginPropertiesBlock);
  332. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  333. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  334. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  335. elem.addProperty(Constants.PR_BREAK_AFTER);
  336. elem.addProperty(Constants.PR_BREAK_BEFORE);
  337. elem.addProperty(Constants.PR_CLIP);
  338. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  339. elem.addProperty(Constants.PR_HEIGHT);
  340. elem.addProperty(Constants.PR_ID);
  341. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  342. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  343. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  344. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  345. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  346. elem.addProperty(Constants.PR_OVERFLOW);
  347. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  348. elem.addProperty(Constants.PR_SPAN);
  349. elem.addProperty(Constants.PR_WIDTH);
  350. elem.addProperty(Constants.PR_WRITING_MODE);
  351. elem.addProperty(Constants.PR_Z_INDEX);
  352. elem.addContent(block_elems);
  353. elem = elements[Constants.FO_BIDI_OVERRIDE];
  354. elem.addProperties(CommonAuralProperties);
  355. elem.addProperties(CommonFontProperties);
  356. elem.addProperties(CommonRelativePositionProperties);
  357. elem.addProperty(Constants.PR_COLOR);
  358. elem.addProperty(Constants.PR_DIRECTION);
  359. elem.addProperty(Constants.PR_ID);
  360. elem.addProperty(Constants.PR_LETTER_SPACING);
  361. elem.addProperty(Constants.PR_LINE_HEIGHT);
  362. elem.addProperty(Constants.PR_SCORE_SPACES);
  363. elem.addProperty(Constants.PR_UNICODE_BIDI);
  364. elem.addProperty(Constants.PR_WORD_SPACING);
  365. elem.addContent(inline_elems);
  366. elem.addContent(block_elems);
  367. elem = elements[Constants.FO_CHARACTER];
  368. elem.addProperties(CommonAuralProperties);
  369. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  370. elem.addProperties(CommonFontProperties);
  371. elem.addProperties(CommonHyphenationProperties);
  372. elem.addProperties(CommonMarginPropertiesInline);
  373. elem.addProperties(CommonRelativePositionProperties);
  374. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  375. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  376. elem.addProperty(Constants.PR_TREAT_AS_WORD_SPACE);
  377. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  378. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  379. elem.addProperty(Constants.PR_CHARACTER);
  380. elem.addProperty(Constants.PR_COLOR);
  381. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  382. elem.addProperty(Constants.PR_TEXT_DEPTH);
  383. elem.addProperty(Constants.PR_TEXT_ALTITUDE);
  384. elem.addProperty(Constants.PR_GLYPH_ORIENTATION_HORIZONTAL);
  385. elem.addProperty(Constants.PR_GLYPH_ORIENTATION_VERTICAL);
  386. elem.addProperty(Constants.PR_ID);
  387. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  388. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  389. elem.addProperty(Constants.PR_LETTER_SPACING);
  390. elem.addProperty(Constants.PR_LINE_HEIGHT);
  391. elem.addProperty(Constants.PR_SCORE_SPACES);
  392. elem.addProperty(Constants.PR_SUPPRESS_AT_LINE_BREAK);
  393. elem.addProperty(Constants.PR_TEXT_DECORATION);
  394. elem.addProperty(Constants.PR_TEXT_SHADOW);
  395. elem.addProperty(Constants.PR_TEXT_TRANSFORM);
  396. elem.addProperty(Constants.PR_VISIBILITY);
  397. elem.addProperty(Constants.PR_WORD_SPACING);
  398. elem = elements[Constants.FO_INITIAL_PROPERTY_SET];
  399. elem.addProperties(CommonAccessibilityProperties);
  400. elem.addProperties(CommonAuralProperties);
  401. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  402. elem.addProperties(CommonFontProperties);
  403. elem.addProperties(CommonRelativePositionProperties);
  404. elem.addProperty(Constants.PR_COLOR);
  405. elem.addProperty(Constants.PR_ID);
  406. elem.addProperty(Constants.PR_LETTER_SPACING);
  407. elem.addProperty(Constants.PR_LINE_HEIGHT);
  408. elem.addProperty(Constants.PR_SCORE_SPACES);
  409. elem.addProperty(Constants.PR_TEXT_DECORATION);
  410. elem.addProperty(Constants.PR_TEXT_SHADOW);
  411. elem.addProperty(Constants.PR_TEXT_TRANSFORM);
  412. elem.addProperty(Constants.PR_WORD_SPACING);
  413. elem = elements[Constants.FO_EXTERNAL_GRAPHIC];
  414. elem.addProperties(CommonAccessibilityProperties);
  415. elem.addProperties(CommonAuralProperties);
  416. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  417. elem.addProperties(CommonMarginPropertiesInline);
  418. elem.addProperties(CommonRelativePositionProperties);
  419. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  420. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  421. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  422. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  423. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  424. elem.addProperty(Constants.PR_CLIP);
  425. elem.addProperty(Constants.PR_CONTENT_HEIGHT);
  426. elem.addProperty(Constants.PR_CONTENT_TYPE);
  427. elem.addProperty(Constants.PR_CONTENT_WIDTH);
  428. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  429. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  430. elem.addProperty(Constants.PR_HEIGHT);
  431. elem.addProperty(Constants.PR_ID);
  432. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  433. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  434. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  435. elem.addProperty(Constants.PR_LINE_HEIGHT);
  436. elem.addProperty(Constants.PR_OVERFLOW);
  437. elem.addProperty(Constants.PR_SCALING);
  438. elem.addProperty(Constants.PR_SCALING_METHOD);
  439. elem.addProperty(Constants.PR_SRC);
  440. elem.addProperty(Constants.PR_TEXT_ALIGN);
  441. elem.addProperty(Constants.PR_WIDTH);
  442. elem = elements[Constants.FO_INSTREAM_FOREIGN_OBJECT];
  443. elem.addProperties(CommonAccessibilityProperties);
  444. elem.addProperties(CommonAuralProperties);
  445. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  446. elem.addProperties(CommonMarginPropertiesInline);
  447. elem.addProperties(CommonRelativePositionProperties);
  448. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  449. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  450. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  451. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  452. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  453. elem.addProperty(Constants.PR_CLIP);
  454. elem.addProperty(Constants.PR_CONTENT_HEIGHT);
  455. elem.addProperty(Constants.PR_CONTENT_TYPE);
  456. elem.addProperty(Constants.PR_CONTENT_WIDTH);
  457. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  458. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  459. elem.addProperty(Constants.PR_HEIGHT);
  460. elem.addProperty(Constants.PR_ID);
  461. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  462. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  463. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  464. elem.addProperty(Constants.PR_LINE_HEIGHT);
  465. elem.addProperty(Constants.PR_OVERFLOW);
  466. elem.addProperty(Constants.PR_SCALING);
  467. elem.addProperty(Constants.PR_SCALING_METHOD);
  468. elem.addProperty(Constants.PR_TEXT_ALIGN);
  469. elem.addProperty(Constants.PR_WIDTH);
  470. elem = elements[Constants.FO_INLINE];
  471. elem.addProperties(CommonAccessibilityProperties);
  472. elem.addProperties(CommonAuralProperties);
  473. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  474. elem.addProperties(CommonFontProperties);
  475. elem.addProperties(CommonMarginPropertiesInline);
  476. elem.addProperties(CommonRelativePositionProperties);
  477. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  478. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  479. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  480. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  481. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  482. elem.addProperty(Constants.PR_COLOR);
  483. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  484. elem.addProperty(Constants.PR_HEIGHT);
  485. elem.addProperty(Constants.PR_ID);
  486. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  487. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  488. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  489. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  490. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  491. elem.addProperty(Constants.PR_LINE_HEIGHT);
  492. elem.addProperty(Constants.PR_TEXT_DECORATION);
  493. elem.addProperty(Constants.PR_VISIBILITY);
  494. elem.addProperty(Constants.PR_WIDTH);
  495. elem.addProperty(Constants.PR_WRAP_OPTION);
  496. elem.addContent(inline_elems);
  497. elem.addContent(block_elems);
  498. elem = elements[Constants.FO_INLINE_CONTAINER];
  499. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  500. elem.addProperties(CommonMarginPropertiesInline);
  501. elem.addProperties(CommonRelativePositionProperties);
  502. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  503. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  504. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  505. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  506. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  507. elem.addProperty(Constants.PR_CLIP);
  508. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  509. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  510. elem.addProperty(Constants.PR_HEIGHT);
  511. elem.addProperty(Constants.PR_ID);
  512. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  513. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  514. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  515. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  516. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  517. elem.addProperty(Constants.PR_LINE_HEIGHT);
  518. elem.addProperty(Constants.PR_OVERFLOW);
  519. elem.addProperty(Constants.PR_REFERENCE_ORIENTATION);
  520. elem.addProperty(Constants.PR_WIDTH);
  521. elem.addProperty(Constants.PR_WRITING_MODE);
  522. elem.addContent(block_elems);
  523. elem = elements[Constants.FO_LEADER];
  524. elem.addProperties(CommonAccessibilityProperties);
  525. elem.addProperties(CommonAuralProperties);
  526. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  527. elem.addProperties(CommonFontProperties);
  528. elem.addProperties(CommonMarginPropertiesInline);
  529. elem.addProperties(CommonRelativePositionProperties);
  530. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  531. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  532. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  533. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  534. elem.addProperty(Constants.PR_COLOR);
  535. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  536. elem.addProperty(Constants.PR_TEXT_DEPTH);
  537. elem.addProperty(Constants.PR_TEXT_ALTITUDE);
  538. elem.addProperty(Constants.PR_ID);
  539. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  540. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  541. elem.addProperty(Constants.PR_LEADER_ALIGNMENT);
  542. elem.addProperty(Constants.PR_LEADER_LENGTH);
  543. elem.addProperty(Constants.PR_LEADER_PATTERN);
  544. elem.addProperty(Constants.PR_LEADER_PATTERN_WIDTH);
  545. elem.addProperty(Constants.PR_RULE_STYLE);
  546. elem.addProperty(Constants.PR_RULE_THICKNESS);
  547. elem.addProperty(Constants.PR_LETTER_SPACING);
  548. elem.addProperty(Constants.PR_LINE_HEIGHT);
  549. elem.addProperty(Constants.PR_TEXT_SHADOW);
  550. elem.addProperty(Constants.PR_VISIBILITY);
  551. elem.addProperty(Constants.PR_WORD_SPACING);
  552. elem.addContent(inline_elems);
  553. elem = elements[Constants.FO_PAGE_NUMBER];
  554. elem.addProperties(CommonAccessibilityProperties);
  555. elem.addProperties(CommonAuralProperties);
  556. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  557. elem.addProperties(CommonFontProperties);
  558. elem.addProperties(CommonMarginPropertiesInline);
  559. elem.addProperties(CommonRelativePositionProperties);
  560. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  561. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  562. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  563. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  564. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  565. elem.addProperty(Constants.PR_ID);
  566. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  567. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  568. elem.addProperty(Constants.PR_LETTER_SPACING);
  569. elem.addProperty(Constants.PR_LINE_HEIGHT);
  570. elem.addProperty(Constants.PR_SCORE_SPACES);
  571. elem.addProperty(Constants.PR_TEXT_ALTITUDE);
  572. elem.addProperty(Constants.PR_TEXT_DECORATION);
  573. elem.addProperty(Constants.PR_TEXT_DEPTH);
  574. elem.addProperty(Constants.PR_TEXT_SHADOW);
  575. elem.addProperty(Constants.PR_TEXT_TRANSFORM);
  576. elem.addProperty(Constants.PR_VISIBILITY);
  577. elem.addProperty(Constants.PR_WORD_SPACING);
  578. elem.addProperty(Constants.PR_WRAP_OPTION);
  579. elem = elements[Constants.FO_PAGE_NUMBER_CITATION];
  580. elem.addProperties(CommonAccessibilityProperties);
  581. elem.addProperties(CommonAuralProperties);
  582. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  583. elem.addProperties(CommonFontProperties);
  584. elem.addProperties(CommonMarginPropertiesInline);
  585. elem.addProperties(CommonRelativePositionProperties);
  586. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  587. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  588. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  589. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  590. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  591. elem.addProperty(Constants.PR_ID);
  592. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  593. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  594. elem.addProperty(Constants.PR_LETTER_SPACING);
  595. elem.addProperty(Constants.PR_LINE_HEIGHT);
  596. elem.addProperty(Constants.PR_REF_ID);
  597. elem.addProperty(Constants.PR_SCORE_SPACES);
  598. elem.addProperty(Constants.PR_TEXT_ALTITUDE);
  599. elem.addProperty(Constants.PR_TEXT_DECORATION);
  600. elem.addProperty(Constants.PR_TEXT_DEPTH);
  601. elem.addProperty(Constants.PR_TEXT_SHADOW);
  602. elem.addProperty(Constants.PR_TEXT_TRANSFORM);
  603. elem.addProperty(Constants.PR_VISIBILITY);
  604. elem.addProperty(Constants.PR_WORD_SPACING);
  605. elem.addProperty(Constants.PR_WRAP_OPTION);
  606. elem = elements[Constants.FO_TABLE_AND_CAPTION];
  607. elem.addProperties(CommonAccessibilityProperties);
  608. elem.addProperties(CommonAuralProperties);
  609. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  610. elem.addProperties(CommonMarginPropertiesBlock);
  611. elem.addProperties(CommonRelativePositionProperties);
  612. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  613. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  614. elem.addProperty(Constants.PR_BREAK_AFTER);
  615. elem.addProperty(Constants.PR_BREAK_BEFORE);
  616. elem.addProperty(Constants.PR_CAPTION_SIDE);
  617. elem.addProperty(Constants.PR_ID);
  618. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  619. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  620. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  621. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  622. elem.addProperty(Constants.PR_TEXT_ALIGN);
  623. elem.addContent(Constants.FO_TABLE_CAPTION);
  624. elem.addContent(Constants.FO_TABLE);
  625. elem = elements[Constants.FO_TABLE];
  626. elem.addProperties(CommonAccessibilityProperties);
  627. elem.addProperties(CommonAuralProperties);
  628. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  629. elem.addProperties(CommonMarginPropertiesBlock);
  630. elem.addProperties(CommonRelativePositionProperties);
  631. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  632. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  633. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  634. elem.addProperty(Constants.PR_BORDER_SPACING);
  635. elem.addProperty(Constants.PR_BORDER_COLLAPSE);
  636. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  637. elem.addProperty(Constants.PR_BORDER_SEPARATION);
  638. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  639. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  640. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  641. elem.addProperty(Constants.PR_BREAK_AFTER);
  642. elem.addProperty(Constants.PR_BREAK_BEFORE);
  643. elem.addProperty(Constants.PR_ID);
  644. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  645. elem.addProperty(Constants.PR_HEIGHT);
  646. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  647. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  648. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  649. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  650. elem.addProperty(Constants.PR_TABLE_LAYOUT);
  651. elem.addProperty(Constants.PR_TABLE_OMIT_FOOTER_AT_BREAK);
  652. elem.addProperty(Constants.PR_TABLE_OMIT_HEADER_AT_BREAK);
  653. elem.addProperty(Constants.PR_WIDTH);
  654. elem.addProperty(Constants.PR_WRITING_MODE);
  655. elem.addContent(Constants.FO_TABLE_COLUMN);
  656. elem.addContent(Constants.FO_TABLE_HEADER);
  657. elem.addContent(Constants.FO_TABLE_FOOTER);
  658. elem.addContent(Constants.FO_TABLE_BODY);
  659. elem = elements[Constants.FO_TABLE_COLUMN];
  660. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  661. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  662. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  663. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  664. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  665. elem.addProperty(Constants.PR_COLUMN_NUMBER);
  666. elem.addProperty(Constants.PR_COLUMN_WIDTH);
  667. elem.addProperty(Constants.PR_NUMBER_COLUMNS_REPEATED);
  668. elem.addProperty(Constants.PR_NUMBER_COLUMNS_SPANNED);
  669. elem.addProperty(Constants.PR_VISIBILITY);
  670. elem = elements[Constants.FO_TABLE_CAPTION];
  671. elem.addProperties(CommonAccessibilityProperties);
  672. elem.addProperties(CommonAuralProperties);
  673. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  674. elem.addProperties(CommonRelativePositionProperties);
  675. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  676. elem.addProperty(Constants.PR_HEIGHT);
  677. elem.addProperty(Constants.PR_ID);
  678. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  679. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  680. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  681. elem.addProperty(Constants.PR_WIDTH);
  682. elem.addContent(block_elems);
  683. elem = elements[Constants.FO_TABLE_HEADER];
  684. elem.addProperties(CommonAccessibilityProperties);
  685. elem.addProperties(CommonAuralProperties);
  686. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  687. elem.addProperties(CommonRelativePositionProperties);
  688. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  689. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  690. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  691. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  692. elem.addProperty(Constants.PR_ID);
  693. elem.addProperty(Constants.PR_VISIBILITY);
  694. elem.addContent(Constants.FO_TABLE_ROW);
  695. elem.addContent(Constants.FO_TABLE_CELL);
  696. elem = elements[Constants.FO_TABLE_FOOTER];
  697. elem.addProperties(CommonAccessibilityProperties);
  698. elem.addProperties(CommonAuralProperties);
  699. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  700. elem.addProperties(CommonRelativePositionProperties);
  701. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  702. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  703. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  704. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  705. elem.addProperty(Constants.PR_ID);
  706. elem.addProperty(Constants.PR_VISIBILITY);
  707. elem.addContent(Constants.FO_TABLE_ROW);
  708. elem.addContent(Constants.FO_TABLE_CELL);
  709. elem = elements[Constants.FO_TABLE_BODY];
  710. elem.addProperties(CommonAccessibilityProperties);
  711. elem.addProperties(CommonAuralProperties);
  712. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  713. elem.addProperties(CommonRelativePositionProperties);
  714. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  715. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  716. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  717. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  718. elem.addProperty(Constants.PR_ID);
  719. elem.addProperty(Constants.PR_VISIBILITY);
  720. elem.addContent(Constants.FO_TABLE_ROW);
  721. elem.addContent(Constants.FO_TABLE_CELL);
  722. elem = elements[Constants.FO_TABLE_ROW];
  723. elem.addProperties(CommonAccessibilityProperties);
  724. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  725. elem.addProperties(CommonAuralProperties);
  726. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  727. elem.addProperties(CommonRelativePositionProperties);
  728. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  729. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  730. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  731. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  732. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  733. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  734. elem.addProperty(Constants.PR_BREAK_AFTER);
  735. elem.addProperty(Constants.PR_BREAK_BEFORE);
  736. elem.addProperty(Constants.PR_ID);
  737. elem.addProperty(Constants.PR_HEIGHT);
  738. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  739. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  740. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  741. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  742. elem.addProperty(Constants.PR_VISIBILITY);
  743. elem.addContent(Constants.FO_TABLE_CELL);
  744. elem = elements[Constants.FO_TABLE_CELL];
  745. elem.addProperties(CommonAccessibilityProperties);
  746. elem.addProperties(CommonAuralProperties);
  747. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  748. elem.addProperties(CommonRelativePositionProperties);
  749. elem.addProperty(Constants.PR_BORDER_AFTER_PRECEDENCE);
  750. elem.addProperty(Constants.PR_BORDER_BEFORE_PRECEDENCE);
  751. elem.addProperty(Constants.PR_BORDER_END_PRECEDENCE);
  752. elem.addProperty(Constants.PR_BORDER_START_PRECEDENCE);
  753. elem.addProperty(Constants.PR_BLOCK_PROGRESSION_DIMENSION);
  754. elem.addProperty(Constants.PR_COLUMN_NUMBER);
  755. elem.addProperty(Constants.PR_DISPLAY_ALIGN);
  756. elem.addProperty(Constants.PR_RELATIVE_ALIGN);
  757. elem.addProperty(Constants.PR_EMPTY_CELLS);
  758. elem.addProperty(Constants.PR_ENDS_ROW);
  759. elem.addProperty(Constants.PR_HEIGHT);
  760. elem.addProperty(Constants.PR_ID);
  761. elem.addProperty(Constants.PR_INLINE_PROGRESSION_DIMENSION);
  762. elem.addProperty(Constants.PR_NUMBER_COLUMNS_SPANNED);
  763. elem.addProperty(Constants.PR_NUMBER_ROWS_SPANNED);
  764. elem.addProperty(Constants.PR_STARTS_ROW);
  765. elem.addProperty(Constants.PR_WIDTH);
  766. elem.addContent(block_elems);
  767. elem = elements[Constants.FO_LIST_BLOCK];
  768. elem.addProperties(CommonAccessibilityProperties);
  769. elem.addProperties(CommonAuralProperties);
  770. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  771. elem.addProperties(CommonMarginPropertiesBlock);
  772. elem.addProperties(CommonRelativePositionProperties);
  773. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  774. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  775. elem.addProperty(Constants.PR_BREAK_AFTER);
  776. elem.addProperty(Constants.PR_BREAK_BEFORE);
  777. elem.addProperty(Constants.PR_ID);
  778. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  779. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  780. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  781. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  782. elem.addProperty(Constants.PR_PROVISIONAL_DISTANCE_BETWEEN_STARTS);
  783. elem.addProperty(Constants.PR_PROVISIONAL_LABEL_SEPARATION);
  784. elem.addContent(Constants.FO_LIST_ITEM);
  785. elem = elements[Constants.FO_LIST_ITEM];
  786. elem.addProperties(CommonAccessibilityProperties);
  787. elem.addProperties(CommonAuralProperties);
  788. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  789. elem.addProperties(CommonMarginPropertiesBlock);
  790. elem.addProperties(CommonRelativePositionProperties);
  791. elem.addProperty(Constants.PR_PAGE_BREAK_AFTER);
  792. elem.addProperty(Constants.PR_PAGE_BREAK_BEFORE);
  793. elem.addProperty(Constants.PR_BREAK_AFTER);
  794. elem.addProperty(Constants.PR_BREAK_BEFORE);
  795. elem.addProperty(Constants.PR_ID);
  796. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  797. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  798. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  799. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  800. elem.addProperty(Constants.PR_RELATIVE_ALIGN);
  801. elem.addContent(Constants.FO_LIST_ITEM_LABEL);
  802. elem.addContent(Constants.FO_LIST_ITEM_BODY);
  803. elem = elements[Constants.FO_LIST_ITEM_BODY];
  804. elem.addProperties(CommonAccessibilityProperties);
  805. elem.addProperty(Constants.PR_ID);
  806. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  807. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  808. elem.addContent(block_elems);
  809. elem = elements[Constants.FO_LIST_ITEM_LABEL];
  810. elem.addProperties(CommonAccessibilityProperties);
  811. elem.addProperty(Constants.PR_ID);
  812. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  813. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  814. elem.addContent(block_elems);
  815. elem = elements[Constants.FO_BASIC_LINK];
  816. elem.addProperties(CommonAccessibilityProperties);
  817. elem.addProperties(CommonAuralProperties);
  818. elem.addProperties(CommonBorderPaddingBackgroundProperties);
  819. elem.addProperties(CommonMarginPropertiesInline);
  820. elem.addProperties(CommonRelativePositionProperties);
  821. elem.addProperty(Constants.PR_VERTICAL_ALIGN);
  822. elem.addProperty(Constants.PR_ALIGNMENT_ADJUST);
  823. elem.addProperty(Constants.PR_ALIGNMENT_BASELINE);
  824. elem.addProperty(Constants.PR_BASELINE_SHIFT);
  825. elem.addProperty(Constants.PR_DESTINATION_PLACEMENT_OFFSET);
  826. elem.addProperty(Constants.PR_DOMINANT_BASELINE);
  827. elem.addProperty(Constants.PR_EXTERNAL_DESTINATION);
  828. elem.addProperty(Constants.PR_ID);
  829. elem.addProperty(Constants.PR_INDICATE_DESTINATION);
  830. elem.addProperty(Constants.PR_INTERNAL_DESTINATION);
  831. elem.addProperty(Constants.PR_PAGE_BREAK_INSIDE);
  832. elem.addProperty(Constants.PR_KEEP_TOGETHER);
  833. elem.addProperty(Constants.PR_KEEP_WITH_NEXT);
  834. elem.addProperty(Constants.PR_KEEP_WITH_PREVIOUS);
  835. elem.addProperty(Constants.PR_LINE_HEIGHT);
  836. elem.addProperty(Constants.PR_SHOW_DESTINATION);
  837. elem.addProperty(Constants.PR_TARGET_PROCESSING_CONTEXT);
  838. elem.addProperty(Constants.PR_TARGET_PRESENTATION_CONTEXT);
  839. elem.addProperty(Constants.PR_TARGET_STYLESHEET);
  840. elem.addContent(inline_elems);
  841. elem.addContent(block_elems);
  842. elem = elements[Constants.FO_MULTI_SWITCH];
  843. elem.addProperties(CommonAccessibilityProperties);
  844. elem.addProperty(Constants.PR_AUTO_RESTORE);
  845. elem.addProperty(Constants.PR_ID);
  846. elem.addContent(Constants.FO_MULTI_CASE);
  847. elem = elements[Constants.FO_MULTI_CASE];
  848. elem.addProperties(CommonAccessibilityProperties);
  849. elem.addProperty(Constants.PR_ID);
  850. elem.addProperty(Constants.PR_STARTING_STATE);
  851. elem.addProperty(Constants.PR_CASE_NAME);
  852. elem.addProperty(Constants.PR_CASE_TITLE);
  853. elem.addContent(inline_elems);
  854. elem.addContent(block_elems);
  855. elem = elements[Constants.FO_MULTI_TOGGLE];
  856. elem.addProperties(CommonAccessibilityProperties);
  857. elem.addProperty(Constants.PR_ID);
  858. elem.addProperty(Constants.PR_SWITCH_TO);
  859. elem.addContent(inline_elems);
  860. elem.addContent(block_elems);
  861. elem = elements[Constants.FO_MULTI_PROPERTIES];
  862. elem.addProperties(CommonAccessibilityProperties);
  863. elem.addProperty(Constants.PR_ID);
  864. elem.addContent(Constants.FO_MULTI_PROPERTY_SET);
  865. elem.addContent(Constants.FO_WRAPPER);
  866. elem = elements[Constants.FO_MULTI_PROPERTY_SET];
  867. elem.addProperty(Constants.PR_ID);
  868. elem.addProperty(Constants.PR_ACTIVE_STATE);
  869. elem = elements[Constants.FO_FLOAT];
  870. elem.addProperty(Constants.PR_FLOAT);
  871. elem.addProperty(Constants.PR_CLEAR);
  872. elem.addContent(block_elems);
  873. elem = elements[Constants.FO_FOOTNOTE];
  874. elem.addProperties(CommonAccessibilityProperties);
  875. elem.addContent(Constants.FO_INLINE);
  876. elem.addContent(Constants.FO_FOOTNOTE_BODY);
  877. elem = elements[Constants.FO_FOOTNOTE_BODY];
  878. elem.addProperties(CommonAccessibilityProperties);
  879. elem.addContent(block_elems);
  880. elem = elements[Constants.FO_WRAPPER];
  881. elem.addProperty(Constants.PR_ID);
  882. elem.addContent(inline_elems);
  883. elem.addContent(block_elems);
  884. elem = elements[Constants.FO_MARKER];
  885. elem.addProperty(Constants.PR_MARKER_CLASS_NAME);
  886. elem.addContent(inline_elems);
  887. elem.addContent(block_elems);
  888. elem = elements[Constants.FO_RETRIEVE_MARKER];
  889. elem.addProperty(Constants.PR_RETRIEVE_CLASS_NAME);
  890. elem.addProperty(Constants.PR_RETRIEVE_POSITION);
  891. elem.addProperty(Constants.PR_RETRIEVE_BOUNDARY);
  892. // Merge the attributes from the children into the parent.
  893. for (boolean dirty = true; dirty; ) {
  894. dirty = false;
  895. for (int i = 1; i < elements.length; i++) {
  896. dirty = dirty || elements[i].merge();
  897. }
  898. }
  899. // Calculate the sparse indices for each element.
  900. for (int i = 1; i < elements.length; i++) {
  901. mapping[i] = makeSparseIndices(elements[i].valid);
  902. }
  903. }
  904. /**
  905. * Turn a BitSet into an array of shorts with the first element
  906. * on the array the number of set bits in the BitSet.
  907. */
  908. private static short[] makeSparseIndices(BitSet set) {
  909. short[] indices = new short[Constants.PROPERTY_COUNT+1];
  910. int j = 1;
  911. for (int i = 0; i < Constants.PROPERTY_COUNT+1; i++) {
  912. if (set.get(i)) {
  913. indices[i] = (short) j++;
  914. }
  915. }
  916. indices[0] = (short)j;
  917. return indices;
  918. }
  919. public static short[] getPropertySet(int elementId) {
  920. if (mapping == null) {
  921. mapping = new short[Constants.ELEMENT_COUNT+1][];
  922. PropertySets ps = new PropertySets();
  923. ps.initializeElements();
  924. ps.initializeCommon();
  925. ps.initialize();
  926. }
  927. return mapping[elementId];
  928. }
  929. /**
  930. * An object that represent the properties and contents of a fo element
  931. */
  932. class Element {
  933. BitSet relevant = new BitSet();
  934. BitSet valid = new BitSet();
  935. int elementId;
  936. ArrayList children;
  937. Element(int elementId) {
  938. this.elementId = elementId;
  939. }
  940. /**
  941. * Add a single property to the element.
  942. */
  943. public void addProperty(int propId) {
  944. relevant.set(propId);
  945. valid.set(propId);
  946. }
  947. /**
  948. * Add a set of properties to the element.
  949. */
  950. public void addProperties(BitSet properties) {
  951. relevant.or(properties);
  952. valid.or(properties);
  953. }
  954. /**
  955. * Add a single fo element as a content child.
  956. */
  957. public void addContent(int elementId) {
  958. if (children == null) {
  959. children = new ArrayList();
  960. }
  961. children.add(elements[elementId]);
  962. }
  963. /**
  964. * Add a set of fo elements as content children.
  965. */
  966. public void addContent(BitSet elements) {
  967. for (int i = 0; i < elements.size(); i++) {
  968. if (elements.get(i)) {
  969. addContent(i);
  970. }
  971. }
  972. }
  973. /**
  974. * Merge the properties from the children into the set of valid
  975. * properties. Return true if at least one property could be added.
  976. */
  977. public boolean merge() {
  978. if (children == null) {
  979. return false;
  980. }
  981. boolean dirty = false;
  982. for (int i = 0; i < children.size(); i++) {
  983. Element child = (Element) children.get(i);
  984. BitSet childValid = child.valid;
  985. int n = childValid.length();
  986. for (int j = 0; j < n; j++) {
  987. if (childValid.get(j) && !valid.get(j)) {
  988. dirty = true;
  989. valid.set(j);
  990. }
  991. }
  992. }
  993. return dirty;
  994. }
  995. }
  996. }