1 // Copyright (c) 1996 James Clark
2 // See the file copying.txt for copying permission.
5 #include "FOTBuilder.h"
10 namespace DSSSL_NAMESPACE {
13 const char *FOTBuilder::symbolName(Symbol sym)
15 if (sym < 2 || sym >= int(nSymbols))
17 // These must match the order in Symbol
18 static const char *names[] = {
39 "back-slanted-oblique",
41 "back-slanted-italic",
123 ASSERT(SIZEOF(names) == nSymbols - 2);
124 return names[sym - 2];
127 SaveFOTBuilder *FOTBuilder::asSaveFOTBuilder()
132 FOTBuilder::~FOTBuilder()
136 void FOTBuilder::start()
140 void FOTBuilder::end()
144 void FOTBuilder::atomic()
150 void FOTBuilder::characters(const Char *, size_t)
154 void FOTBuilder::charactersFromNode(const NodePtr &, const Char *s, size_t n)
159 void FOTBuilder::character(const CharacterNIC &nic)
162 characters(&nic.ch, 1);
166 void FOTBuilder::startSequence()
171 void FOTBuilder::endSequence()
176 void FOTBuilder::startLineField(const LineFieldNIC &)
181 void FOTBuilder::endLineField()
186 void FOTBuilder::paragraphBreak(const ParagraphNIC &)
191 void FOTBuilder::externalGraphic(const ExternalGraphicNIC &)
196 void FOTBuilder::rule(const RuleNIC &)
201 void FOTBuilder::alignmentPoint()
206 void FOTBuilder::formattingInstruction(const StringC &)
211 void FOTBuilder::startParagraph(const ParagraphNIC &)
216 void FOTBuilder::endParagraph()
221 void FOTBuilder::startDisplayGroup(const DisplayGroupNIC &)
226 void FOTBuilder::endDisplayGroup()
231 void FOTBuilder::startScroll()
236 void FOTBuilder::endScroll()
241 void FOTBuilder::startLink(const Address &)
246 void FOTBuilder::endLink()
251 void FOTBuilder::startMarginalia()
256 void FOTBuilder::endMarginalia()
261 void FOTBuilder::startMultiMode(const FOTBuilder::MultiMode *,
262 const Vector<FOTBuilder::MultiMode> &,
263 Vector<FOTBuilder *> &ports)
266 for (size_t i = 0; i < ports.size(); i++)
270 void FOTBuilder::endMultiMode()
275 void FOTBuilder::startScore(Symbol)
280 void FOTBuilder::startScore(Char)
285 void FOTBuilder::startScore(const LengthSpec &)
290 void FOTBuilder::endScore()
295 void FOTBuilder::startLeader(const LeaderNIC &)
300 void FOTBuilder::endLeader()
305 void FOTBuilder::startBox(const BoxNIC &)
310 void FOTBuilder::endBox()
315 void FOTBuilder::startSideline()
319 void FOTBuilder::endSideline()
323 void FOTBuilder::startSimplePageSequence(FOTBuilder* headerFooter[nHF])
325 for ( unsigned i = 0; i < nHF; ++i )
326 headerFooter[i] = this;
330 void FOTBuilder::endSimplePageSequenceHeaderFooter()
334 void FOTBuilder::endSimplePageSequence()
339 void FOTBuilder::pageNumber()
343 void FOTBuilder::startTable(const TableNIC &)
348 void FOTBuilder::endTable()
353 void FOTBuilder::tableBeforeRowBorder()
358 void FOTBuilder::tableAfterRowBorder()
363 void FOTBuilder::tableBeforeColumnBorder()
368 void FOTBuilder::tableAfterColumnBorder()
373 void FOTBuilder::startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer)
376 header = footer = this;
379 void FOTBuilder::endTablePart()
384 void FOTBuilder::tableColumn(const TableColumnNIC &)
389 void FOTBuilder::startTableRow()
394 void FOTBuilder::endTableRow()
399 void FOTBuilder::startTableCell(const TableCellNIC &)
404 void FOTBuilder::endTableCell()
409 void FOTBuilder::tableCellBeforeRowBorder()
414 void FOTBuilder::tableCellAfterRowBorder()
419 void FOTBuilder::tableCellBeforeColumnBorder()
424 void FOTBuilder::tableCellAfterColumnBorder()
429 void FOTBuilder::startMathSequence()
434 void FOTBuilder::endMathSequence()
439 void FOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator)
442 numerator = denominator = this;
445 void FOTBuilder::endFraction()
450 void FOTBuilder::fractionBar()
455 void FOTBuilder::startUnmath()
460 void FOTBuilder::endUnmath()
465 void FOTBuilder::startSuperscript()
470 void FOTBuilder::endSuperscript()
475 void FOTBuilder::startSubscript()
480 void FOTBuilder::endSubscript()
485 void FOTBuilder::startScript(FOTBuilder *&preSup,
487 FOTBuilder *&postSup,
488 FOTBuilder *&postSub,
493 preSup = preSub = postSup = postSub = midSup = midSub = this;
496 void FOTBuilder::endScript()
501 void FOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark)
504 overMark = underMark = this;
507 void FOTBuilder::endMark()
512 void FOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close)
518 void FOTBuilder::endFence()
523 void FOTBuilder::startRadical(FOTBuilder *°ree)
529 void FOTBuilder::endRadical()
534 void FOTBuilder::radicalRadical(const CharacterNIC &)
539 void FOTBuilder::radicalRadicalDefaulted()
543 void FOTBuilder::startMathOperator(FOTBuilder *&oper,
544 FOTBuilder *&lowerLimit,
545 FOTBuilder *&upperLimit)
548 oper = lowerLimit = upperLimit = this;
551 void FOTBuilder::endMathOperator()
556 void FOTBuilder::startGrid(const GridNIC &)
561 void FOTBuilder::endGrid()
566 void FOTBuilder::startGridCell(const GridCellNIC &)
571 void FOTBuilder::endGridCell()
576 void FOTBuilder::extension(const ExtensionFlowObj &, const NodePtr &)
581 void FOTBuilder::startExtension(const CompoundExtensionFlowObj &,
583 Vector<FOTBuilder *> &ports)
585 for (size_t i = 0; i < ports.size(); i++)
590 void FOTBuilder::endExtension(const CompoundExtensionFlowObj &)
596 void FOTBuilder::setFontSize(Length)
600 void FOTBuilder::setFontFamilyName(const StringC &)
604 void FOTBuilder::setFontWeight(Symbol)
608 void FOTBuilder::setFontPosture(Symbol)
612 void FOTBuilder::setStartIndent(const LengthSpec &)
616 void FOTBuilder::setEndIndent(const LengthSpec &)
620 void FOTBuilder::setFirstLineStartIndent(const LengthSpec &)
624 void FOTBuilder::setLastLineEndIndent(const LengthSpec &)
628 void FOTBuilder::setLineSpacing(const LengthSpec &)
632 void FOTBuilder::setFieldWidth(const LengthSpec &)
636 void FOTBuilder::setQuadding(Symbol)
640 void FOTBuilder::setDisplayAlignment(Symbol)
644 void FOTBuilder::setFieldAlign(Symbol)
648 void FOTBuilder::setLines(Symbol)
652 void FOTBuilder::setColor(const DeviceRGBColor &)
656 void FOTBuilder::setBackgroundColor(const DeviceRGBColor &)
660 void FOTBuilder::setBackgroundColor()
664 void FOTBuilder::setPageWidth(Length)
668 void FOTBuilder::setPageHeight(Length)
672 void FOTBuilder::setLeftMargin(Length)
676 void FOTBuilder::setRightMargin(Length)
680 void FOTBuilder::setTopMargin(Length)
684 void FOTBuilder::setBottomMargin(Length)
688 void FOTBuilder::setHeaderMargin(Length)
692 void FOTBuilder::setFooterMargin(Length)
696 void FOTBuilder::setBorderPresent(bool)
700 void FOTBuilder::setLineThickness(Length)
704 void FOTBuilder::setCellBeforeRowMargin(Length)
708 void FOTBuilder::setCellAfterRowMargin(Length)
712 void FOTBuilder::setCellBeforeColumnMargin(Length)
716 void FOTBuilder::setCellAfterColumnMargin(Length)
720 void FOTBuilder::setLineSep(Length)
724 void FOTBuilder::setBoxSizeBefore(Length)
728 void FOTBuilder::setBoxSizeAfter(Length)
732 void FOTBuilder::setPositionPointShift(const LengthSpec &)
736 void FOTBuilder::setStartMargin(const LengthSpec &)
740 void FOTBuilder::setEndMargin(const LengthSpec &)
744 void FOTBuilder::setSidelineSep(const LengthSpec &)
748 void FOTBuilder::setAsisWrapIndent(const LengthSpec &)
752 void FOTBuilder::setLineNumberSep(const LengthSpec &)
756 void FOTBuilder::setLastLineJustifyLimit(const LengthSpec &)
760 void FOTBuilder::setJustifyGlyphSpaceMaxAdd(const LengthSpec &)
764 void FOTBuilder::setJustifyGlyphSpaceMaxRemove(const LengthSpec &)
768 void FOTBuilder::setTableCornerRadius(const LengthSpec &)
772 void FOTBuilder::setBoxCornerRadius(const LengthSpec &)
776 void FOTBuilder::setMarginaliaSep(const LengthSpec &)
780 void FOTBuilder::setMinPreLineSpacing(const OptLengthSpec &)
784 void FOTBuilder::setMinPostLineSpacing(const OptLengthSpec &)
788 void FOTBuilder::setMinLeading(const OptLengthSpec &)
792 void FOTBuilder::setInhibitLineBreaks(bool)
796 void FOTBuilder::setHyphenate(bool)
800 void FOTBuilder::setKern(bool)
804 void FOTBuilder::setLigature(bool)
808 void FOTBuilder::setScoreSpaces(bool)
812 void FOTBuilder::setFloatOutMarginalia(bool)
816 void FOTBuilder::setFloatOutSidelines(bool)
820 void FOTBuilder::setFloatOutLineNumbers(bool)
824 void FOTBuilder::setCellBackground(bool)
828 void FOTBuilder::setSpanWeak(bool)
832 void FOTBuilder::setIgnoreRecordEnd(bool)
836 void FOTBuilder::setNumberedLines(bool)
840 void FOTBuilder::setHangingPunct(bool)
844 void FOTBuilder::setBoxOpenEnd(bool)
848 void FOTBuilder::setTruncateLeader(bool)
852 void FOTBuilder::setAlignLeader(bool)
856 void FOTBuilder::setTablePartOmitMiddleHeader(bool)
860 void FOTBuilder::setTablePartOmitMiddleFooter(bool)
864 void FOTBuilder::setBorderOmitAtBreak(bool)
868 void FOTBuilder::setPrincipalModeSimultaneous(bool)
872 void FOTBuilder::setMarginaliaKeepWithPrevious(bool)
876 void FOTBuilder::setGridEquidistantRows(bool)
880 void FOTBuilder::setGridEquidistantColumns(bool)
884 void FOTBuilder::setLineJoin(Symbol)
888 void FOTBuilder::setLineCap(Symbol)
892 void FOTBuilder::setLineNumberSide(Symbol)
896 void FOTBuilder::setKernMode(Symbol)
900 void FOTBuilder::setInputWhitespaceTreatment(Symbol)
904 void FOTBuilder::setFillingDirection(Symbol)
908 void FOTBuilder::setWritingMode(Symbol)
912 void FOTBuilder::setLastLineQuadding(Symbol)
916 void FOTBuilder::setMathDisplayMode(Symbol)
920 void FOTBuilder::setScriptPreAlign(Symbol)
924 void FOTBuilder::setScriptPostAlign(Symbol)
928 void FOTBuilder::setScriptMidSupAlign(Symbol)
932 void FOTBuilder::setScriptMidSubAlign(Symbol)
936 void FOTBuilder::setNumeratorAlign(Symbol)
940 void FOTBuilder::setDenominatorAlign(Symbol)
944 void FOTBuilder::setGridPositionCellType(Symbol)
948 void FOTBuilder::setGridColumnAlignment(Symbol)
952 void FOTBuilder::setGridRowAlignment(Symbol)
956 void FOTBuilder::setBoxType(Symbol)
960 void FOTBuilder::setGlyphAlignmentMode(Symbol)
964 void FOTBuilder::setBoxBorderAlignment(Symbol)
968 void FOTBuilder::setCellRowAlignment(Symbol)
972 void FOTBuilder::setBorderAlignment(Symbol)
976 void FOTBuilder::setSidelineSide(Symbol)
980 void FOTBuilder::setHyphenationKeep(Symbol)
984 void FOTBuilder::setFontStructure(Symbol)
988 void FOTBuilder::setFontProportionateWidth(Symbol)
992 void FOTBuilder::setCellCrossed(Symbol)
996 void FOTBuilder::setMarginaliaSide(Symbol)
1000 void FOTBuilder::setLayer(long)
1004 void FOTBuilder::setBackgroundLayer(long)
1008 void FOTBuilder::setBorderPriority(long)
1012 void FOTBuilder::setLineRepeat(long)
1016 void FOTBuilder::setSpan(long)
1020 void FOTBuilder::setMinLeaderRepeat(long)
1024 void FOTBuilder::setHyphenationRemainCharCount(long)
1028 void FOTBuilder::setHyphenationPushCharCount(long)
1032 void FOTBuilder::setWidowCount(long)
1036 void FOTBuilder::setOrphanCount(long)
1040 void FOTBuilder::setExpandTabs(long)
1044 void FOTBuilder::setHyphenationLadderCount(long)
1048 void FOTBuilder::setBackgroundTile(PublicId)
1052 void FOTBuilder::setLineBreakingMethod(PublicId)
1056 void FOTBuilder::setLineCompositionMethod(PublicId)
1060 void FOTBuilder::setImplicitBidiMethod(PublicId)
1064 void FOTBuilder::setGlyphSubstMethod(PublicId)
1068 void FOTBuilder::setGlyphReorderMethod(PublicId)
1072 void FOTBuilder::setHyphenationMethod(PublicId)
1076 void FOTBuilder::setTableAutoWidthMethod(PublicId)
1080 void FOTBuilder::setFontName(PublicId)
1084 void FOTBuilder::setLanguage(Letter2)
1088 void FOTBuilder::setCountry(Letter2)
1092 void FOTBuilder::setEscapementSpaceBefore(const InlineSpace &)
1096 void FOTBuilder::setEscapementSpaceAfter(const InlineSpace &)
1100 void FOTBuilder::setInlineSpaceSpace(const OptInlineSpace &)
1104 void FOTBuilder::setGlyphSubstTable(const Vector<ConstPtr<GlyphSubstTable> > &)
1108 void FOTBuilder::startNode(const NodePtr &, const StringC &)
1112 void FOTBuilder::endNode()
1116 void FOTBuilder::currentNodePageNumber(const NodePtr &)
1120 void FOTBuilder::extensionSet(void (FOTBuilder::*func)(bool), bool arg)
1125 void FOTBuilder::extensionSet(void (FOTBuilder::*func)(const StringC &), const StringC &arg)
1130 void FOTBuilder::extensionSet(void (FOTBuilder::*func)(long), long arg)
1136 FOTBuilder::DisplayNIC::DisplayNIC()
1137 : positionPreference(symbolFalse),
1139 breakBefore(symbolFalse),
1140 breakAfter(symbolFalse),
1141 keepWithPrevious(0),
1143 mayViolateKeepBefore(0),
1144 mayViolateKeepAfter(0)
1148 FOTBuilder::DisplayGroupNIC::DisplayGroupNIC()
1153 FOTBuilder::InlineNIC::InlineNIC()
1154 : breakBeforePriority(0),
1155 breakAfterPriority(0)
1159 FOTBuilder::ExternalGraphicNIC::ExternalGraphicNIC()
1160 : scaleType(symbolMaxUniform),
1164 escapementDirection(symbolFalse)
1168 FOTBuilder::BoxNIC::BoxNIC()
1173 FOTBuilder::RuleNIC::RuleNIC()
1174 : orientation(symbolHorizontal),
1179 FOTBuilder::LeaderNIC::LeaderNIC()
1184 FOTBuilder::CharacterNIC::CharacterNIC()
1185 : valid(0), specifiedC(0), stretchFactor(1.0)
1189 FOTBuilder::TableNIC::TableNIC()
1190 : widthType(widthFull)
1194 FOTBuilder::TableColumnNIC::TableColumnNIC()
1195 : columnIndex(0), nColumnsSpanned(1), hasWidth(0)
1199 FOTBuilder::TableCellNIC::TableCellNIC()
1200 : columnIndex(0), nColumnsSpanned(1), nRowsSpanned(1), missing(0)
1204 FOTBuilder::GridNIC::GridNIC()
1205 : nColumns(0), nRows(0)
1209 FOTBuilder::GridCellNIC::GridCellNIC()
1210 : columnNumber(0), rowNumber(0)
1214 FOTBuilder::MultiMode::MultiMode()
1219 FOTBuilder::GlyphId FOTBuilder::GlyphSubstTable::subst(const FOTBuilder::GlyphId &gid) const
1221 for (size_t i = 0; i < pairs.size(); i += 2)
1222 if (gid == pairs[i])
1223 return pairs[i + 1];
1227 SaveFOTBuilder::SaveFOTBuilder()
1228 : calls_(0), tail_(&calls_)
1232 SaveFOTBuilder::SaveFOTBuilder(const NodePtr ¤tNode,
1233 const StringC &processingMode)
1234 : currentNode_(currentNode),
1235 processingMode_(processingMode),
1236 calls_(0), tail_(&calls_)
1240 SaveFOTBuilder::~SaveFOTBuilder()
1245 calls_ = calls_->next;
1250 SaveFOTBuilder *SaveFOTBuilder::asSaveFOTBuilder()
1255 void SaveFOTBuilder::emit(FOTBuilder &fotb)
1258 fotb.startNode(currentNode_, processingMode_);
1259 SaveFOTBuilder *save = fotb.asSaveFOTBuilder();
1262 *save->tail_ = calls_;
1263 save->tail_ = tail_;
1272 calls_ = calls_->next;
1282 #define NO_ARG_CALL(F) \
1283 void SaveFOTBuilder::F() { \
1284 *tail_ = new NoArgCall(&FOTBuilder::F); \
1285 tail_ = &(*tail_)->next; }
1287 NO_ARG_CALL(startSequence)
1288 NO_ARG_CALL(endSequence)
1289 NO_ARG_CALL(endLineField)
1290 NO_ARG_CALL(endParagraph)
1291 NO_ARG_CALL(endDisplayGroup)
1292 NO_ARG_CALL(alignmentPoint)
1293 NO_ARG_CALL(startScroll)
1294 NO_ARG_CALL(endScroll)
1295 NO_ARG_CALL(endLeader)
1296 NO_ARG_CALL(endLink)
1297 NO_ARG_CALL(startMarginalia)
1298 NO_ARG_CALL(endMarginalia)
1299 NO_ARG_CALL(endMultiMode)
1300 NO_ARG_CALL(endScore)
1302 NO_ARG_CALL(startSideline)
1303 NO_ARG_CALL(endSideline)
1304 NO_ARG_CALL(endNode)
1305 NO_ARG_CALL(endSimplePageSequenceHeaderFooter)
1306 NO_ARG_CALL(endSimplePageSequence)
1307 NO_ARG_CALL(pageNumber)
1308 NO_ARG_CALL(endTable)
1309 NO_ARG_CALL(tableBeforeRowBorder)
1310 NO_ARG_CALL(tableAfterRowBorder)
1311 NO_ARG_CALL(tableBeforeColumnBorder)
1312 NO_ARG_CALL(tableAfterColumnBorder)
1313 NO_ARG_CALL(endTablePart)
1314 NO_ARG_CALL(startTableRow)
1315 NO_ARG_CALL(endTableRow)
1316 NO_ARG_CALL(endTableCell)
1317 NO_ARG_CALL(tableCellBeforeRowBorder)
1318 NO_ARG_CALL(tableCellAfterRowBorder)
1319 NO_ARG_CALL(tableCellBeforeColumnBorder)
1320 NO_ARG_CALL(tableCellAfterColumnBorder)
1321 NO_ARG_CALL(startMathSequence)
1322 NO_ARG_CALL(endMathSequence)
1323 NO_ARG_CALL(endFraction)
1324 NO_ARG_CALL(fractionBar)
1325 NO_ARG_CALL(startUnmath)
1326 NO_ARG_CALL(endUnmath)
1327 NO_ARG_CALL(startSuperscript)
1328 NO_ARG_CALL(endSuperscript)
1329 NO_ARG_CALL(startSubscript)
1330 NO_ARG_CALL(endSubscript)
1331 NO_ARG_CALL(endScript)
1332 NO_ARG_CALL(endMark)
1333 NO_ARG_CALL(endFence)
1334 NO_ARG_CALL(endRadical)
1335 NO_ARG_CALL(radicalRadicalDefaulted)
1336 NO_ARG_CALL(endMathOperator)
1337 NO_ARG_CALL(endGrid)
1338 NO_ARG_CALL(endGridCell)
1340 #define LENGTH_SPEC_ARG_CALL(F) \
1341 void SaveFOTBuilder::F(const LengthSpec &lengthSpec) { \
1342 *tail_ = new LengthSpecArgCall(&FOTBuilder::F, lengthSpec); \
1343 tail_ = &(*tail_)->next; }
1345 LENGTH_SPEC_ARG_CALL(setStartIndent)
1346 LENGTH_SPEC_ARG_CALL(setEndIndent)
1347 LENGTH_SPEC_ARG_CALL(setFirstLineStartIndent)
1348 LENGTH_SPEC_ARG_CALL(setLastLineEndIndent)
1349 LENGTH_SPEC_ARG_CALL(setLineSpacing)
1350 LENGTH_SPEC_ARG_CALL(setFieldWidth)
1351 LENGTH_SPEC_ARG_CALL(setPositionPointShift)
1352 LENGTH_SPEC_ARG_CALL(setStartMargin)
1353 LENGTH_SPEC_ARG_CALL(setEndMargin)
1354 LENGTH_SPEC_ARG_CALL(setSidelineSep)
1355 LENGTH_SPEC_ARG_CALL(setAsisWrapIndent)
1356 LENGTH_SPEC_ARG_CALL(setLineNumberSep)
1357 LENGTH_SPEC_ARG_CALL(setLastLineJustifyLimit)
1358 LENGTH_SPEC_ARG_CALL(setJustifyGlyphSpaceMaxAdd)
1359 LENGTH_SPEC_ARG_CALL(setJustifyGlyphSpaceMaxRemove)
1360 LENGTH_SPEC_ARG_CALL(setTableCornerRadius)
1361 LENGTH_SPEC_ARG_CALL(setBoxCornerRadius)
1362 LENGTH_SPEC_ARG_CALL(setMarginaliaSep)
1364 #define OPT_LENGTH_SPEC_ARG_CALL(F) \
1365 void SaveFOTBuilder::F(const OptLengthSpec &optLengthSpec) { \
1366 *tail_ = new OptLengthSpecArgCall(&FOTBuilder::F, optLengthSpec); \
1367 tail_ = &(*tail_)->next; }
1369 OPT_LENGTH_SPEC_ARG_CALL(setMinPreLineSpacing)
1370 OPT_LENGTH_SPEC_ARG_CALL(setMinPostLineSpacing)
1371 OPT_LENGTH_SPEC_ARG_CALL(setMinLeading)
1373 #define LONG_ARG_CALL(F) \
1374 void SaveFOTBuilder::F(long n) { \
1375 *tail_ = new LongArgCall(&FOTBuilder::F, n); \
1376 tail_ = &(*tail_)->next; }
1379 LONG_ARG_CALL(setFontSize)
1380 LONG_ARG_CALL(setPageWidth)
1381 LONG_ARG_CALL(setPageHeight)
1382 LONG_ARG_CALL(setLeftMargin)
1383 LONG_ARG_CALL(setRightMargin)
1384 LONG_ARG_CALL(setTopMargin)
1385 LONG_ARG_CALL(setBottomMargin)
1386 LONG_ARG_CALL(setHeaderMargin)
1387 LONG_ARG_CALL(setFooterMargin)
1388 LONG_ARG_CALL(setLineThickness)
1389 LONG_ARG_CALL(setCellBeforeRowMargin)
1390 LONG_ARG_CALL(setCellAfterRowMargin)
1391 LONG_ARG_CALL(setCellBeforeColumnMargin)
1392 LONG_ARG_CALL(setCellAfterColumnMargin)
1393 LONG_ARG_CALL(setLineSep)
1394 LONG_ARG_CALL(setBoxSizeBefore)
1395 LONG_ARG_CALL(setBoxSizeAfter)
1396 LONG_ARG_CALL(setLayer)
1397 LONG_ARG_CALL(setBackgroundLayer)
1398 LONG_ARG_CALL(setBorderPriority)
1399 LONG_ARG_CALL(setLineRepeat)
1400 LONG_ARG_CALL(setSpan)
1401 LONG_ARG_CALL(setMinLeaderRepeat)
1402 LONG_ARG_CALL(setHyphenationRemainCharCount)
1403 LONG_ARG_CALL(setHyphenationPushCharCount)
1404 LONG_ARG_CALL(setWidowCount)
1405 LONG_ARG_CALL(setOrphanCount)
1406 LONG_ARG_CALL(setExpandTabs)
1407 LONG_ARG_CALL(setHyphenationLadderCount)
1409 #define BOOL_ARG_CALL(F) \
1410 void SaveFOTBuilder::F(bool b) { \
1411 *tail_ = new BoolArgCall(&FOTBuilder::F, b); \
1412 tail_ = &(*tail_)->next; }
1414 BOOL_ARG_CALL(setBorderPresent)
1415 BOOL_ARG_CALL(setInhibitLineBreaks)
1416 BOOL_ARG_CALL(setHyphenate)
1417 BOOL_ARG_CALL(setKern)
1418 BOOL_ARG_CALL(setLigature)
1419 BOOL_ARG_CALL(setScoreSpaces)
1420 BOOL_ARG_CALL(setFloatOutMarginalia)
1421 BOOL_ARG_CALL(setFloatOutSidelines)
1422 BOOL_ARG_CALL(setFloatOutLineNumbers)
1423 BOOL_ARG_CALL(setCellBackground)
1424 BOOL_ARG_CALL(setSpanWeak)
1425 BOOL_ARG_CALL(setIgnoreRecordEnd)
1426 BOOL_ARG_CALL(setNumberedLines)
1427 BOOL_ARG_CALL(setHangingPunct)
1428 BOOL_ARG_CALL(setBoxOpenEnd)
1429 BOOL_ARG_CALL(setTruncateLeader)
1430 BOOL_ARG_CALL(setAlignLeader)
1431 BOOL_ARG_CALL(setTablePartOmitMiddleHeader)
1432 BOOL_ARG_CALL(setTablePartOmitMiddleFooter)
1433 BOOL_ARG_CALL(setBorderOmitAtBreak)
1434 BOOL_ARG_CALL(setPrincipalModeSimultaneous)
1435 BOOL_ARG_CALL(setMarginaliaKeepWithPrevious)
1436 BOOL_ARG_CALL(setGridEquidistantRows)
1437 BOOL_ARG_CALL(setGridEquidistantColumns)
1439 #define SYMBOL_ARG_CALL(F) \
1440 void SaveFOTBuilder::F(Symbol sym) { \
1441 *tail_ = new SymbolArgCall(&FOTBuilder::F, sym); \
1442 tail_ = &(*tail_)->next; }
1444 SYMBOL_ARG_CALL(setFontWeight)
1445 SYMBOL_ARG_CALL(setFontPosture)
1446 SYMBOL_ARG_CALL(setLines)
1447 SYMBOL_ARG_CALL(setQuadding)
1448 SYMBOL_ARG_CALL(setDisplayAlignment)
1449 SYMBOL_ARG_CALL(setFieldAlign)
1450 SYMBOL_ARG_CALL(setLineJoin)
1451 SYMBOL_ARG_CALL(setLineCap)
1452 SYMBOL_ARG_CALL(setLineNumberSide)
1453 SYMBOL_ARG_CALL(setKernMode)
1454 SYMBOL_ARG_CALL(setInputWhitespaceTreatment)
1455 SYMBOL_ARG_CALL(setFillingDirection)
1456 SYMBOL_ARG_CALL(setWritingMode)
1457 SYMBOL_ARG_CALL(setLastLineQuadding)
1458 SYMBOL_ARG_CALL(setMathDisplayMode)
1459 SYMBOL_ARG_CALL(setScriptPreAlign)
1460 SYMBOL_ARG_CALL(setScriptPostAlign)
1461 SYMBOL_ARG_CALL(setScriptMidSupAlign)
1462 SYMBOL_ARG_CALL(setScriptMidSubAlign)
1463 SYMBOL_ARG_CALL(setNumeratorAlign)
1464 SYMBOL_ARG_CALL(setDenominatorAlign)
1465 SYMBOL_ARG_CALL(setGridPositionCellType)
1466 SYMBOL_ARG_CALL(setGridColumnAlignment)
1467 SYMBOL_ARG_CALL(setGridRowAlignment)
1468 SYMBOL_ARG_CALL(setBoxType)
1469 SYMBOL_ARG_CALL(setGlyphAlignmentMode)
1470 SYMBOL_ARG_CALL(setBoxBorderAlignment)
1471 SYMBOL_ARG_CALL(setCellRowAlignment)
1472 SYMBOL_ARG_CALL(setBorderAlignment)
1473 SYMBOL_ARG_CALL(setSidelineSide)
1474 SYMBOL_ARG_CALL(setHyphenationKeep)
1475 SYMBOL_ARG_CALL(setFontStructure)
1476 SYMBOL_ARG_CALL(setFontProportionateWidth)
1477 SYMBOL_ARG_CALL(setCellCrossed)
1478 SYMBOL_ARG_CALL(setMarginaliaSide)
1480 #define PUBLIC_ID_ARG_CALL(F) \
1481 void SaveFOTBuilder::F(PublicId pubid) { \
1482 *tail_ = new PublicIdArgCall(&FOTBuilder::F, pubid); \
1483 tail_ = &(*tail_)->next; }
1485 PUBLIC_ID_ARG_CALL(setBackgroundTile)
1486 PUBLIC_ID_ARG_CALL(setLineBreakingMethod)
1487 PUBLIC_ID_ARG_CALL(setLineCompositionMethod)
1488 PUBLIC_ID_ARG_CALL(setImplicitBidiMethod)
1489 PUBLIC_ID_ARG_CALL(setGlyphSubstMethod)
1490 PUBLIC_ID_ARG_CALL(setGlyphReorderMethod)
1491 PUBLIC_ID_ARG_CALL(setHyphenationMethod)
1492 PUBLIC_ID_ARG_CALL(setTableAutoWidthMethod)
1493 PUBLIC_ID_ARG_CALL(setFontName)
1495 #define UNSIGNED_ARG_CALL(F) \
1496 void SaveFOTBuilder::F(unsigned n) { \
1497 *tail_ = new UnsignedArgCall(&FOTBuilder::F, n); \
1498 tail_ = &(*tail_)->next; }
1500 UNSIGNED_ARG_CALL(setLanguage)
1501 UNSIGNED_ARG_CALL(setCountry)
1503 #define STRING_ARG_CALL(F) \
1504 void SaveFOTBuilder::F(const StringC &str) { \
1505 *tail_ = new StringArgCall(&FOTBuilder::F, str); \
1506 tail_ = &(*tail_)->next; }
1509 STRING_ARG_CALL(setFontFamilyName)
1510 STRING_ARG_CALL(formattingInstruction)
1512 #define INLINE_SPACE_ARG_CALL(F) \
1513 void SaveFOTBuilder::F(const InlineSpace &is) { \
1514 *tail_ = new InlineSpaceArgCall(&FOTBuilder::F, is); \
1515 tail_ = &(*tail_)->next; }
1517 INLINE_SPACE_ARG_CALL(setEscapementSpaceBefore)
1518 INLINE_SPACE_ARG_CALL(setEscapementSpaceAfter)
1520 SaveFOTBuilder::Call::~Call()
1524 void SaveFOTBuilder::NoArgCall::emit(FOTBuilder &fotb)
1529 void SaveFOTBuilder::LongArgCall::emit(FOTBuilder &fotb)
1534 void SaveFOTBuilder::ExtensionLongArgCall::emit(FOTBuilder &fotb)
1536 fotb.extensionSet(func, arg);
1539 void SaveFOTBuilder::BoolArgCall::emit(FOTBuilder &fotb)
1544 void SaveFOTBuilder::ExtensionBoolArgCall::emit(FOTBuilder &fotb)
1546 fotb.extensionSet(func, arg);
1549 void SaveFOTBuilder::SymbolArgCall::emit(FOTBuilder &fotb)
1554 void SaveFOTBuilder::PublicIdArgCall::emit(FOTBuilder &fotb)
1559 void SaveFOTBuilder::UnsignedArgCall::emit(FOTBuilder &fotb)
1564 void SaveFOTBuilder::InlineSpaceArgCall::emit(FOTBuilder &fotb)
1569 void SaveFOTBuilder::StringArgCall::emit(FOTBuilder &fotb)
1574 void SaveFOTBuilder::ExtensionStringArgCall::emit(FOTBuilder &fotb)
1576 fotb.extensionSet(func, arg);
1579 void SaveFOTBuilder::CharArgCall::emit(FOTBuilder &fotb)
1584 void SaveFOTBuilder::LengthSpecArgCall::emit(FOTBuilder &fotb)
1589 void SaveFOTBuilder::OptLengthSpecArgCall::emit(FOTBuilder &fotb)
1594 void SaveFOTBuilder::NodePtrArgCall::emit(FOTBuilder &fotb)
1599 void SaveFOTBuilder::DeviceRGBColorArgCall::emit(FOTBuilder &fotb)
1604 void SaveFOTBuilder::charactersFromNode(const NodePtr &node, const Char *s, size_t n)
1606 *tail_ = new CharactersFromNodeCall(node, s, n);
1607 tail_ = &(*tail_)->next;
1610 SaveFOTBuilder::CharactersFromNodeCall::CharactersFromNodeCall(const NodePtr &nd,
1611 const Char *s, size_t n)
1612 : data(s), size(n), node(nd)
1616 void SaveFOTBuilder::CharactersFromNodeCall::emit(FOTBuilder &fotb)
1618 fotb.charactersFromNode(node, data, size);
1621 void SaveFOTBuilder::characters(const Char *s, size_t n)
1623 *tail_ = new CharactersCall(s, n);
1624 tail_ = &(*tail_)->next;
1627 void SaveFOTBuilder::CharacterCall::emit(FOTBuilder &fotb)
1629 fotb.character(arg);
1632 void SaveFOTBuilder::character(const CharacterNIC &nic)
1634 *tail_ = new CharacterCall(nic);
1635 tail_ = &(*tail_)->next;
1638 SaveFOTBuilder::StartNodeCall::StartNodeCall(const NodePtr &nd,
1644 void SaveFOTBuilder::StartNodeCall::emit(FOTBuilder &fotb)
1646 fotb.startNode(node, mode);
1649 void SaveFOTBuilder::startNode(const NodePtr &node, const StringC &mode)
1651 *tail_ = new StartNodeCall(node, mode);
1652 tail_ = &(*tail_)->next;
1655 void SaveFOTBuilder::currentNodePageNumber(const NodePtr &node)
1657 *tail_ = new NodePtrArgCall(&FOTBuilder::currentNodePageNumber, node);
1658 tail_ = &(*tail_)->next;
1661 void SaveFOTBuilder::setColor(const DeviceRGBColor &color)
1663 *tail_ = new DeviceRGBColorArgCall(&FOTBuilder::setColor, color);
1664 tail_ = &(*tail_)->next;
1667 void SaveFOTBuilder::setBackgroundColor(const DeviceRGBColor &color)
1669 DeviceRGBColorArgCall::FuncPtr f = &FOTBuilder::setBackgroundColor;
1670 *tail_ = new DeviceRGBColorArgCall(f, color);
1671 tail_ = &(*tail_)->next;
1674 void SaveFOTBuilder::setBackgroundColor()
1676 NoArgCall::FuncPtr f = &FOTBuilder::setBackgroundColor;
1677 *tail_ = new NoArgCall(f);
1678 tail_ = &(*tail_)->next;
1681 void SaveFOTBuilder::startParagraph(const ParagraphNIC &nic)
1684 *tail_ = new StartParagraphCall(nic);
1685 tail_ = &(*tail_)->next;
1688 void SaveFOTBuilder::paragraphBreak(const ParagraphNIC &nic)
1691 *tail_ = new ParagraphBreakCall(nic);
1692 tail_ = &(*tail_)->next;
1695 void SaveFOTBuilder::startDisplayGroup(const DisplayGroupNIC &nic)
1697 *tail_ = new StartDisplayGroupCall(nic);
1698 tail_ = &(*tail_)->next;
1701 void SaveFOTBuilder::externalGraphic(const ExternalGraphicNIC &nic)
1703 *tail_ = new ExternalGraphicCall(nic);
1704 tail_ = &(*tail_)->next;
1707 void SaveFOTBuilder::rule(const RuleNIC &nic)
1709 *tail_ = new RuleCall(nic);
1710 tail_ = &(*tail_)->next;
1713 void SaveFOTBuilder::startLeader(const LeaderNIC &nic)
1715 *tail_ = new StartLeaderCall(nic);
1716 tail_ = &(*tail_)->next;
1719 void SaveFOTBuilder::startLink(const Address &addr)
1721 *tail_ = new StartLinkCall(addr);
1722 tail_ = &(*tail_)->next;
1725 void SaveFOTBuilder::startScore(Symbol type)
1727 SymbolArgCall::FuncPtr func = &FOTBuilder::startScore;
1728 *tail_ = new SymbolArgCall(func, type);
1729 tail_ = &(*tail_)->next;
1732 void SaveFOTBuilder::startScore(Char c)
1734 CharArgCall::FuncPtr func = &FOTBuilder::startScore;
1735 *tail_ = new CharArgCall(func, c);
1736 tail_ = &(*tail_)->next;
1739 void SaveFOTBuilder::startScore(const LengthSpec &len)
1741 LengthSpecArgCall::FuncPtr func = &FOTBuilder::startScore;
1742 *tail_ = new LengthSpecArgCall(func, len);
1743 tail_ = &(*tail_)->next;
1746 void SaveFOTBuilder::startLineField(const LineFieldNIC &nic)
1748 *tail_ = new StartLineFieldCall(nic);
1749 tail_ = &(*tail_)->next;
1752 void SaveFOTBuilder::startBox(const BoxNIC &nic)
1754 *tail_ = new StartBoxCall(nic);
1755 tail_ = &(*tail_)->next;
1758 void SaveFOTBuilder::startSimplePageSequence(FOTBuilder* headerFooter[nHF])
1760 *tail_ = new StartSimplePageSequenceCall(headerFooter);
1761 tail_ = &(*tail_)->next;
1764 void SaveFOTBuilder::startTable(const TableNIC &nic)
1766 *tail_ = new StartTableCall(nic);
1767 tail_ = &(*tail_)->next;
1770 void SaveFOTBuilder::startTablePart(const TablePartNIC &nic, FOTBuilder *&header, FOTBuilder *&footer)
1772 *tail_ = new StartTablePartCall(nic, header, footer);
1773 tail_ = &(*tail_)->next;
1776 void SaveFOTBuilder::tableColumn(const TableColumnNIC &nic)
1778 *tail_ = new TableColumnCall(nic);
1779 tail_ = &(*tail_)->next;
1782 void SaveFOTBuilder::startTableCell(const TableCellNIC &nic)
1784 *tail_ = new StartTableCellCall(nic);
1785 tail_ = &(*tail_)->next;
1788 void SaveFOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator)
1790 *tail_ = new StartFractionCall(numerator, denominator);
1791 tail_ = &(*tail_)->next;
1794 void SaveFOTBuilder::startScript(FOTBuilder *&preSup,
1795 FOTBuilder *&preSub,
1796 FOTBuilder *&postSup,
1797 FOTBuilder *&postSub,
1798 FOTBuilder *&midSup,
1799 FOTBuilder *&midSub)
1801 *tail_ = new StartScriptCall(preSup, preSub,
1804 tail_ = &(*tail_)->next;
1807 void SaveFOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark)
1809 *tail_ = new StartMarkCall(overMark, underMark);
1810 tail_ = &(*tail_)->next;
1813 void SaveFOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close)
1815 *tail_ = new StartFenceCall(open, close);
1816 tail_ = &(*tail_)->next;
1819 void SaveFOTBuilder::startRadical(FOTBuilder *°ree)
1821 *tail_ = new StartRadicalCall(degree);
1822 tail_ = &(*tail_)->next;
1825 void SaveFOTBuilder::radicalRadical(const CharacterNIC &nic)
1827 *tail_ = new RadicalRadicalCall(nic);
1828 tail_ = &(*tail_)->next;
1831 void SaveFOTBuilder::startMathOperator(FOTBuilder *&oper,
1832 FOTBuilder *&lowerLimit,
1833 FOTBuilder *&upperLimit)
1835 *tail_ = new StartMathOperatorCall(oper, lowerLimit, upperLimit);
1836 tail_ = &(*tail_)->next;
1839 void SaveFOTBuilder::startGrid(const GridNIC &nic)
1841 *tail_ = new StartGridCall(nic);
1842 tail_ = &(*tail_)->next;
1845 void SaveFOTBuilder::startGridCell(const GridCellNIC &nic)
1847 *tail_ = new StartGridCellCall(nic);
1848 tail_ = &(*tail_)->next;
1851 void SaveFOTBuilder::startMultiMode(const MultiMode *principalMode,
1852 const Vector<MultiMode> &namedModes,
1853 Vector<FOTBuilder *> &namedPorts)
1855 *tail_ = new StartMultiModeCall(principalMode, namedModes, namedPorts);
1856 tail_ = &(*tail_)->next;
1859 void SaveFOTBuilder::setGlyphSubstTable(const Vector<ConstPtr<GlyphSubstTable> > &tables)
1861 *tail_ = new SetGlyphSubstTableCall(tables);
1862 tail_ = &(*tail_)->next;
1865 void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(bool), bool arg)
1867 *tail_ = new ExtensionBoolArgCall(func, arg);
1868 tail_ = &(*tail_)->next;
1871 void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(const StringC &), const StringC &arg)
1873 *tail_ = new ExtensionStringArgCall(func, arg);
1874 tail_ = &(*tail_)->next;
1877 void SaveFOTBuilder::extensionSet(void (FOTBuilder::*func)(long), long arg)
1879 *tail_ = new ExtensionLongArgCall(func, arg);
1880 tail_ = &(*tail_)->next;
1883 void SaveFOTBuilder::startExtension(const CompoundExtensionFlowObj &fo,
1884 const NodePtr &node,
1885 Vector<FOTBuilder *> &ports)
1887 *tail_ = new StartExtensionCall(fo, node, ports);
1888 tail_ = &(*tail_)->next;
1891 void SaveFOTBuilder::endExtension(const CompoundExtensionFlowObj &fo)
1893 *tail_ = new EndExtensionCall(fo);
1894 tail_ = &(*tail_)->next;
1897 void SaveFOTBuilder::extension(const ExtensionFlowObj &fo, const NodePtr &node)
1899 *tail_ = new ExtensionCall(fo, node);
1900 tail_ = &(*tail_)->next;
1903 SaveFOTBuilder::CharactersCall::CharactersCall(const Char *s, size_t n)
1908 void SaveFOTBuilder::CharactersCall::emit(FOTBuilder &fotb)
1910 fotb.characters(str.data(), str.size());
1913 StartSimplePageSequenceCall::StartSimplePageSequenceCall(FOTBuilder* hf[FOTBuilder::nHF])
1915 for ( unsigned i = 0; i < FOTBuilder::nHF; ++i )
1916 hf[i] = &headerFooter[i];
1919 void StartSimplePageSequenceCall::emit(FOTBuilder& fotb)
1921 FOTBuilder* hf[FOTBuilder::nHF];
1922 fotb.startSimplePageSequence(hf);
1923 for ( unsigned i = 0; i < FOTBuilder::nHF; ++i )
1924 headerFooter[i].emit(*hf[i]);
1927 StartFractionCall::StartFractionCall(FOTBuilder *&n, FOTBuilder *&d)
1933 void StartFractionCall::emit(FOTBuilder &fotb)
1936 fotb.startFraction(n, d);
1938 denominator.emit(*d);
1941 StartScriptCall::StartScriptCall(FOTBuilder *&p0,
1956 void StartScriptCall::emit(FOTBuilder &fotb)
1959 fotb.startScript(v[0], v[1], v[2], v[3], v[4], v[5]);
1962 postSup.emit(*v[2]);
1963 postSub.emit(*v[3]);
1968 StartMarkCall::StartMarkCall(FOTBuilder *&o, FOTBuilder *&u)
1974 void StartMarkCall::emit(FOTBuilder &fotb)
1977 fotb.startMark(o, u);
1982 StartFenceCall::StartFenceCall(FOTBuilder *&o, FOTBuilder *&c)
1988 void StartFenceCall::emit(FOTBuilder &fotb)
1991 fotb.startFence(o, c);
1996 StartRadicalCall::StartRadicalCall(FOTBuilder *&d)
2001 void StartRadicalCall::emit(FOTBuilder &fotb)
2004 fotb.startRadical(d);
2008 StartMathOperatorCall::StartMathOperatorCall(FOTBuilder *&o,
2017 void StartMathOperatorCall::emit(FOTBuilder &fotb)
2019 FOTBuilder *o, *l, *u;
2020 fotb.startMathOperator(o, l, u);
2022 lowerLimit.emit(*l);
2023 upperLimit.emit(*u);
2026 StartMultiModeCall::StartMultiModeCall(const FOTBuilder::MultiMode *pm,
2027 const Vector<FOTBuilder::MultiMode> &nm,
2028 Vector<FOTBuilder *> &v)
2032 hasPrincipalMode = 1;
2033 principalMode = *pm;
2036 hasPrincipalMode = 0;
2037 for (size_t i = v.size(); i > 0; i--) {
2038 ports.insert(new SaveFOTBuilder);
2039 v[i - 1] = ports.head();
2043 void StartMultiModeCall::emit(FOTBuilder &fotb)
2045 Vector<FOTBuilder *> v(namedModes.size());
2046 fotb.startMultiMode(hasPrincipalMode ? &principalMode : 0, namedModes, v);
2047 for (size_t i = 0; i < v.size(); i++) {
2048 Owner<SaveFOTBuilder> tem(ports.get());
2053 void SaveFOTBuilder::StartTableCall::emit(FOTBuilder &fotb)
2055 fotb.startTable(arg);
2058 void SaveFOTBuilder::TableColumnCall::emit(FOTBuilder &fotb)
2060 fotb.tableColumn(arg);
2063 void SaveFOTBuilder::StartTableCellCall::emit(FOTBuilder &fotb)
2065 fotb.startTableCell(arg);
2068 StartTablePartCall::StartTablePartCall(const SaveFOTBuilder::TablePartNIC &nic,
2069 FOTBuilder *&h, FOTBuilder *&f)
2076 void StartTablePartCall::emit(FOTBuilder &fotb)
2079 fotb.startTablePart(arg, h, f);
2084 SaveFOTBuilder::StartParagraphCall::StartParagraphCall(const ParagraphNIC &nic)
2089 void SaveFOTBuilder::StartParagraphCall::emit(FOTBuilder &fotb)
2091 fotb.startParagraph(arg);
2094 SaveFOTBuilder::ParagraphBreakCall::ParagraphBreakCall(const ParagraphNIC &nic)
2099 void SaveFOTBuilder::ParagraphBreakCall::emit(FOTBuilder &fotb)
2101 fotb.paragraphBreak(arg);
2105 ::StartDisplayGroupCall::StartDisplayGroupCall(const DisplayGroupNIC &nic)
2110 void SaveFOTBuilder::StartDisplayGroupCall::emit(FOTBuilder &fotb)
2112 fotb.startDisplayGroup(arg);
2115 void SaveFOTBuilder::ExternalGraphicCall::emit(FOTBuilder &fotb)
2117 fotb.externalGraphic(arg);
2120 void SaveFOTBuilder::RuleCall::emit(FOTBuilder &fotb)
2125 void SaveFOTBuilder::StartLeaderCall::emit(FOTBuilder &fotb)
2127 fotb.startLeader(arg);
2130 void SaveFOTBuilder::StartBoxCall::emit(FOTBuilder &fotb)
2135 void SaveFOTBuilder::StartLineFieldCall::emit(FOTBuilder &fotb)
2137 fotb.startLineField(arg);
2140 void SaveFOTBuilder::StartLinkCall::emit(FOTBuilder &fotb)
2142 fotb.startLink(arg);
2145 void SaveFOTBuilder::SetGlyphSubstTableCall::emit(FOTBuilder &fotb)
2147 fotb.setGlyphSubstTable(arg);
2150 void SaveFOTBuilder::StartGridCall::emit(FOTBuilder &fotb)
2152 fotb.startGrid(arg);
2155 void SaveFOTBuilder::StartGridCellCall::emit(FOTBuilder &fotb)
2157 fotb.startGridCell(arg);
2160 void SaveFOTBuilder::RadicalRadicalCall::emit(FOTBuilder &fotb)
2162 fotb.radicalRadical(arg);
2165 void SaveFOTBuilder::ExtensionCall::emit(FOTBuilder &fotb)
2167 fotb.extension(*arg, node);
2170 void SaveFOTBuilder::EndExtensionCall::emit(FOTBuilder &fotb)
2172 fotb.endExtension(*arg);
2175 StartExtensionCall::StartExtensionCall(const FOTBuilder::CompoundExtensionFlowObj &fo,
2177 Vector<FOTBuilder *> &v)
2178 : flowObj(fo.copy()->asCompoundExtensionFlowObj()), node(nd)
2180 for (size_t i = v.size(); i > 0; i--) {
2181 ports.insert(new SaveFOTBuilder);
2182 v[i - 1] = ports.head();
2186 void StartExtensionCall::emit(FOTBuilder &fotb)
2188 Vector<StringC> portNames;
2189 flowObj->portNames(portNames);
2190 Vector<FOTBuilder *> v(portNames.size());
2191 fotb.startExtension(*flowObj, node, v);
2192 for (size_t i = 0; i < v.size(); i++) {
2193 Owner<SaveFOTBuilder> tem(ports.get());
2198 SerialFOTBuilder::SerialFOTBuilder()
2202 void SerialFOTBuilder::startSimplePageSequence(FOTBuilder* headerFooter[FOTBuilder::nHF])
2204 for ( unsigned i = 0; i < nHF; ++i ) {
2205 save_.insert(new SaveFOTBuilder);
2206 headerFooter[nHF-1-i] = save_.head();
2208 startSimplePageSequenceSerial();
2211 void SerialFOTBuilder::endSimplePageSequenceHeaderFooter()
2213 Owner<SaveFOTBuilder> hf[nHF];
2214 for ( unsigned k = 0; k < nHF; ++k )
2215 hf[k] = save_.get();
2216 // output all 24 parts, but in same order as 1.2.1, for regression testing
2217 // replace with single loop later.
2218 // sorry about all those constants :(
2219 for (int i = 0; i < (1 << 2); i++) {
2220 for (int j = 0; j < 6; j++) {
2221 unsigned k = i | (j << 2);
2222 startSimplePageSequenceHeaderFooter(k);
2224 endSimplePageSequenceHeaderFooter(k);
2227 endAllSimplePageSequenceHeaderFooter();
2230 void SerialFOTBuilder::endSimplePageSequence()
2232 endSimplePageSequenceSerial();
2236 void SerialFOTBuilder::startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator)
2238 save_.insert(new SaveFOTBuilder);
2239 denominator = save_.head();
2240 save_.insert(new SaveFOTBuilder);
2241 numerator = save_.head();
2242 startFractionSerial();
2245 void SerialFOTBuilder::endFraction()
2248 Owner<SaveFOTBuilder> numerator(save_.get());
2249 startFractionNumerator();
2250 numerator->emit(*this);
2251 endFractionNumerator();
2254 Owner<SaveFOTBuilder> denominator(save_.get());
2255 startFractionDenominator();
2256 denominator->emit(*this);
2257 endFractionDenominator();
2259 endFractionSerial();
2262 void SerialFOTBuilder::startScript(FOTBuilder *&preSup,
2263 FOTBuilder *&preSub,
2264 FOTBuilder *&postSup,
2265 FOTBuilder *&postSub,
2266 FOTBuilder *&midSup,
2267 FOTBuilder *&midSub)
2269 save_.insert(new SaveFOTBuilder);
2270 midSub = save_.head();
2271 save_.insert(new SaveFOTBuilder);
2272 midSup = save_.head();
2273 save_.insert(new SaveFOTBuilder);
2274 postSub = save_.head();
2275 save_.insert(new SaveFOTBuilder);
2276 postSup = save_.head();
2277 save_.insert(new SaveFOTBuilder);
2278 preSub = save_.head();
2279 save_.insert(new SaveFOTBuilder);
2280 preSup = save_.head();
2281 startScriptSerial();
2284 void SerialFOTBuilder::endScript()
2287 Owner<SaveFOTBuilder> tem(save_.get());
2288 startScriptPreSup();
2293 Owner<SaveFOTBuilder> tem(save_.get());
2294 startScriptPreSub();
2299 Owner<SaveFOTBuilder> tem(save_.get());
2300 startScriptPostSup();
2305 Owner<SaveFOTBuilder> tem(save_.get());
2306 startScriptPostSub();
2311 Owner<SaveFOTBuilder> tem(save_.get());
2312 startScriptMidSup();
2317 Owner<SaveFOTBuilder> tem(save_.get());
2318 startScriptMidSub();
2325 void SerialFOTBuilder::startMark(FOTBuilder *&overMark, FOTBuilder *&underMark)
2327 save_.insert(new SaveFOTBuilder);
2328 underMark = save_.head();
2329 save_.insert(new SaveFOTBuilder);
2330 overMark = save_.head();
2334 void SerialFOTBuilder::endMark()
2337 Owner<SaveFOTBuilder> tem(save_.get());
2343 Owner<SaveFOTBuilder> tem(save_.get());
2351 void SerialFOTBuilder::startFence(FOTBuilder *&open, FOTBuilder *&close)
2353 save_.insert(new SaveFOTBuilder);
2354 close = save_.head();
2355 save_.insert(new SaveFOTBuilder);
2356 open = save_.head();
2360 void SerialFOTBuilder::endFence()
2363 Owner<SaveFOTBuilder> tem(save_.get());
2369 Owner<SaveFOTBuilder> tem(save_.get());
2377 void SerialFOTBuilder::startRadical(FOTBuilder *°ree)
2379 save_.insert(new SaveFOTBuilder);
2380 degree = save_.head();
2381 startRadicalSerial();
2384 void SerialFOTBuilder::endRadical()
2386 Owner<SaveFOTBuilder> tem(save_.get());
2387 startRadicalDegree();
2393 void SerialFOTBuilder::startMathOperator(FOTBuilder *&oper,
2394 FOTBuilder *&lowerLimit,
2395 FOTBuilder *&upperLimit)
2397 save_.insert(new SaveFOTBuilder);
2398 upperLimit = save_.head();
2399 save_.insert(new SaveFOTBuilder);
2400 lowerLimit = save_.head();
2401 save_.insert(new SaveFOTBuilder);
2402 oper = save_.head();
2403 startMathOperatorSerial();
2406 void SerialFOTBuilder::endMathOperator()
2409 Owner<SaveFOTBuilder> tem(save_.get());
2410 startMathOperatorOperator();
2412 endMathOperatorOperator();
2415 Owner<SaveFOTBuilder> tem(save_.get());
2416 startMathOperatorLowerLimit();
2418 endMathOperatorLowerLimit();
2421 Owner<SaveFOTBuilder> tem(save_.get());
2422 startMathOperatorUpperLimit();
2424 endMathOperatorUpperLimit();
2426 endMathOperatorSerial();
2429 void SerialFOTBuilder::startSimplePageSequenceSerial()
2434 void SerialFOTBuilder::endSimplePageSequenceSerial()
2439 void SerialFOTBuilder::startSimplePageSequenceHeaderFooter(unsigned)
2444 void SerialFOTBuilder::endSimplePageSequenceHeaderFooter(unsigned)
2449 void SerialFOTBuilder::endAllSimplePageSequenceHeaderFooter()
2453 void SerialFOTBuilder::startFractionSerial()
2458 void SerialFOTBuilder::endFractionSerial()
2463 void SerialFOTBuilder::startFractionNumerator()
2467 void SerialFOTBuilder::endFractionNumerator()
2471 void SerialFOTBuilder::startFractionDenominator()
2475 void SerialFOTBuilder::endFractionDenominator()
2479 void SerialFOTBuilder::startScriptSerial()
2484 void SerialFOTBuilder::endScriptSerial()
2489 void SerialFOTBuilder::startScriptPreSup()
2493 void SerialFOTBuilder::endScriptPreSup()
2497 void SerialFOTBuilder::startScriptPreSub()
2501 void SerialFOTBuilder::endScriptPreSub()
2505 void SerialFOTBuilder::startScriptPostSup()
2509 void SerialFOTBuilder::endScriptPostSup()
2513 void SerialFOTBuilder::startScriptPostSub()
2517 void SerialFOTBuilder::endScriptPostSub()
2521 void SerialFOTBuilder::startScriptMidSup()
2525 void SerialFOTBuilder::endScriptMidSup()
2529 void SerialFOTBuilder::startScriptMidSub()
2533 void SerialFOTBuilder::endScriptMidSub()
2537 void SerialFOTBuilder::startMarkSerial()
2542 void SerialFOTBuilder::endMarkSerial()
2547 void SerialFOTBuilder::startMarkOver()
2551 void SerialFOTBuilder::endMarkOver()
2555 void SerialFOTBuilder::startMarkUnder()
2559 void SerialFOTBuilder::endMarkUnder()
2563 void SerialFOTBuilder::startFenceSerial()
2568 void SerialFOTBuilder::endFenceSerial()
2573 void SerialFOTBuilder::startFenceOpen()
2577 void SerialFOTBuilder::endFenceOpen()
2581 void SerialFOTBuilder::startFenceClose()
2585 void SerialFOTBuilder::endFenceClose()
2589 void SerialFOTBuilder::startRadicalSerial()
2594 void SerialFOTBuilder::endRadicalSerial()
2599 void SerialFOTBuilder::startRadicalDegree()
2603 void SerialFOTBuilder::endRadicalDegree()
2607 void SerialFOTBuilder::startMathOperatorSerial()
2612 void SerialFOTBuilder::endMathOperatorSerial()
2617 void SerialFOTBuilder::startMathOperatorOperator()
2621 void SerialFOTBuilder::endMathOperatorOperator()
2625 void SerialFOTBuilder::startMathOperatorLowerLimit()
2629 void SerialFOTBuilder::endMathOperatorLowerLimit()
2633 void SerialFOTBuilder::startMathOperatorUpperLimit()
2637 void SerialFOTBuilder::endMathOperatorUpperLimit()
2641 void SerialFOTBuilder::startTablePart(const FOTBuilder::TablePartNIC &nic,
2642 FOTBuilder *&header, FOTBuilder *&footer)
2644 save_.insert(new SaveFOTBuilder);
2645 footer = save_.head();
2646 save_.insert(new SaveFOTBuilder);
2647 header = save_.head();
2648 startTablePartSerial(nic);
2651 void SerialFOTBuilder::endTablePart()
2653 Owner<SaveFOTBuilder> header(save_.get());
2654 startTablePartHeader();
2655 header->emit(*this);
2656 endTablePartHeader();
2657 Owner<SaveFOTBuilder> footer(save_.get());
2658 startTablePartFooter();
2659 footer->emit(*this);
2660 endTablePartFooter();
2661 endTablePartSerial();
2664 void SerialFOTBuilder::startTablePartSerial(const TablePartNIC &)
2669 void SerialFOTBuilder::endTablePartSerial()
2674 void SerialFOTBuilder::startTablePartHeader()
2678 void SerialFOTBuilder::endTablePartHeader()
2682 void SerialFOTBuilder::startTablePartFooter()
2686 void SerialFOTBuilder::endTablePartFooter()
2690 void SerialFOTBuilder::startMultiMode(const MultiMode *principalMode,
2691 const Vector<MultiMode> &namedModes,
2692 Vector<FOTBuilder *> &namedPorts)
2694 for (size_t i = namedModes.size(); i > 0; i--) {
2695 save_.insert(new SaveFOTBuilder);
2696 namedPorts[i - 1] = save_.head();
2698 multiModeStack_.push_back(namedModes);
2699 startMultiModeSerial(principalMode);
2702 void SerialFOTBuilder::endMultiMode()
2704 const Vector<MultiMode> &namedModes = multiModeStack_.back();
2705 for (size_t i = 0; i < namedModes.size(); i++) {
2706 Owner<SaveFOTBuilder> mode(save_.get());
2707 startMultiModeMode(namedModes[i]);
2711 endMultiModeSerial();
2712 multiModeStack_.resize(multiModeStack_.size() - 1);
2715 void SerialFOTBuilder::startMultiModeSerial(const MultiMode *)
2720 void SerialFOTBuilder::endMultiModeSerial()
2725 void SerialFOTBuilder::startMultiModeMode(const MultiMode &)
2729 void SerialFOTBuilder::endMultiModeMode()
2733 void SerialFOTBuilder::startExtension(const CompoundExtensionFlowObj &flowObj,
2735 Vector<FOTBuilder *> &ports)
2737 for (size_t i = ports.size(); i > 0; i--) {
2738 save_.insert(new SaveFOTBuilder);
2739 ports[i - 1] = save_.head();
2741 startExtensionSerial(flowObj, nd);
2744 void SerialFOTBuilder::endExtension(const CompoundExtensionFlowObj &flowObj)
2746 Vector<StringC> portNames;
2747 flowObj.portNames(portNames);
2748 for (size_t i = 0; i < portNames.size(); i++) {
2749 Owner<SaveFOTBuilder> stream(save_.get());
2750 startExtensionStream(portNames[i]);
2751 stream->emit(*this);
2752 endExtensionStream(portNames[i]);
2754 endExtensionSerial(flowObj);
2757 void SerialFOTBuilder::startExtensionSerial(const CompoundExtensionFlowObj &, const NodePtr &)
2762 void SerialFOTBuilder::endExtensionSerial(const CompoundExtensionFlowObj &)
2767 void SerialFOTBuilder::startExtensionStream(const StringC &)
2771 void SerialFOTBuilder::endExtensionStream(const StringC &)
2775 FOTBuilder::ExtensionFlowObj::~ExtensionFlowObj()
2779 FOTBuilder::CompoundExtensionFlowObj *
2780 FOTBuilder::ExtensionFlowObj::asCompoundExtensionFlowObj()
2785 const FOTBuilder::CompoundExtensionFlowObj *
2786 FOTBuilder::ExtensionFlowObj::asCompoundExtensionFlowObj() const
2791 bool FOTBuilder::ExtensionFlowObj::hasNIC(const StringC &) const
2796 void FOTBuilder::ExtensionFlowObj::setNIC(const StringC &, const Value &)
2801 FOTBuilder::CompoundExtensionFlowObj *
2802 FOTBuilder::CompoundExtensionFlowObj::asCompoundExtensionFlowObj()
2807 const FOTBuilder::CompoundExtensionFlowObj *
2808 FOTBuilder::CompoundExtensionFlowObj::asCompoundExtensionFlowObj() const
2813 bool FOTBuilder::CompoundExtensionFlowObj::hasPrincipalPort() const
2818 void FOTBuilder::CompoundExtensionFlowObj::portNames(Vector<StringC> &) const
2822 #ifdef DSSSL_NAMESPACE