/usr/include/sp/FOTBuilder.h is in libsp1-dev 1.3.4-1.2.1-47.3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 | // Copyright (c) 1996, 1997 James Clark
// See the file copying.txt for copying permission.
#ifndef FOTBuilder_INCLUDED
#define FOTBuilder_INCLUDED 1
#include "types.h"
#include "StringC.h"
#include "Boolean.h"
#include "Node.h"
#include "Link.h"
#include "IList.h"
#include "Vector.h"
#include "Resource.h"
#include "Ptr.h"
#include "Owner.h"
#include <stddef.h>
#include <string.h>
#include "dsssl_ns.h"
// This is a work around for a bug in Sun C++ 4.1.
// The class local typedef of PublicId will cause it to reject a
// subsequent declaration of the class PublicId, but it's happy
// if it sees the class first.
#ifdef __SUNPRO_CC
#include "ExternalId.h"
#endif
#ifdef SP_USE_DLL
#ifdef BUILD_LIBSTYLE
#define STYLE_API SP_DLLEXPORT
#else
#define STYLE_API SP_DLLIMPORT
#endif
#else /* not SP_USE_DLL */
#define STYLE_API /* as nothing */
#endif /* not SP_USE_DLL */
#ifdef DSSSL_NAMESPACE
namespace DSSSL_NAMESPACE {
#endif
class SaveFOTBuilder;
class STYLE_API FOTBuilder {
public:
enum Symbol {
symbolFalse,
symbolTrue,
symbolNotApplicable,
// These are guaranteed to be in increasing order of weight,
// and expansion.
symbolUltraCondensed,
symbolExtraCondensed,
symbolCondensed,
symbolSemiCondensed,
symbolUltraLight,
symbolExtraLight,
symbolLight,
symbolSemiLight,
symbolMedium,
symbolSemiExpanded,
symbolExpanded,
symbolExtraExpanded,
symbolUltraExpanded,
symbolSemiBold,
symbolBold,
symbolExtraBold,
symbolUltraBold,
symbolUpright,
symbolOblique,
symbolBackSlantedOblique,
symbolItalic,
symbolBackSlantedItalic,
symbolStart,
symbolEnd,
symbolCenter,
symbolJustify,
symbolSpreadInside,
symbolSpreadOutside,
symbolPageInside,
symbolPageOutside,
symbolWrap,
symbolAsis,
symbolAsisWrap,
symbolAsisTruncate,
symbolNone,
symbolBefore,
symbolThrough,
symbolAfter,
symbolTopToBottom,
symbolLeftToRight,
symbolBottomToTop,
symbolRightToLeft,
symbolInside,
symbolOutside,
symbolHorizontal,
symbolVertical,
symbolEscapement,
symbolLineProgression,
symbolMath,
symbolOrdinary,
symbolOperator,
symbolBinary,
symbolRelation,
symbolOpening,
symbolClosing,
symbolPunctuation,
symbolInner,
symbolSpace,
symbolPage,
symbolPageRegion,
symbolColumnSet,
symbolColumn,
symbolMax,
symbolMaxUniform,
symbolMiter,
symbolRound,
symbolBevel,
symbolButt,
symbolSquare,
symbolLoose,
symbolNormal,
symbolKern,
symbolTight,
symbolTouch,
symbolPreserve,
symbolCollapse,
symbolIgnore,
symbolRelative,
symbolDisplay,
symbolInline,
symbolBorder,
symbolBackground,
symbolBoth,
symbolBase,
symbolFont,
symbolTop,
symbolBottom,
symbolSpread,
symbolSolid,
symbolOutline,
symbolWith,
symbolAgainst,
symbolForce,
symbolIndependent,
symbolPile,
symbolSupOut,
symbolSubOut,
symbolLeadEdge,
symbolTrailEdge,
symbolExplicit,
symbolRowMajor,
symbolColumnMajor
};
enum { nSymbols = symbolColumnMajor + 1 };
typedef const char *PublicId;
struct GlyphId {
GlyphId() : publicId(0), suffix(0) { }
GlyphId(const char *s, unsigned long n = 0) : publicId(s), suffix(n) { }
PublicId publicId;
// If suffix is non-zero, then add a double-colon plus
// the suffix in decimal onto publicId to get the complete
// public identifier of the glyph id.
unsigned long suffix;
};
struct GlyphSubstTable : public Resource {
unsigned uniqueId;
Vector<GlyphId> pairs;
GlyphId subst(const GlyphId &) const;
};
// SP_LETTER2('U', 'K')
#define SP_LETTER2(c1, c2) (((c1) << 8) | (c2))
typedef unsigned Letter2;
typedef long Length;
struct LengthSpec {
LengthSpec(long len = 0) : length(len), displaySizeFactor(0.0) { }
long length;
double displaySizeFactor;
operator bool() const { return length != 0 || displaySizeFactor != 0.0; }
};
struct TableLengthSpec : LengthSpec {
TableLengthSpec() : tableUnitFactor(0.0) { }
double tableUnitFactor;
};
struct OptLengthSpec {
OptLengthSpec() : hasLength(0) { }
bool hasLength;
LengthSpec length;
};
struct DisplaySpace {
DisplaySpace() : priority(0), conditional(1), force(0) { }
LengthSpec nominal;
LengthSpec min;
LengthSpec max;
long priority;
bool conditional;
bool force;
};
struct InlineSpace {
LengthSpec nominal;
LengthSpec min;
LengthSpec max;
};
// non-inherited characteristics for all displayed flow objects
struct DisplayNIC {
DisplayNIC();
DisplaySpace spaceBefore;
DisplaySpace spaceAfter;
Symbol positionPreference;
Symbol keep;
Symbol breakBefore;
Symbol breakAfter;
bool keepWithPrevious;
bool keepWithNext;
bool mayViolateKeepBefore;
bool mayViolateKeepAfter;
};
struct InlineNIC {
InlineNIC();
long breakBeforePriority;
long breakAfterPriority;
};
struct DisplayGroupNIC : DisplayNIC {
DisplayGroupNIC();
bool hasCoalesceId;
StringC coalesceId;
};
struct ExternalGraphicNIC : DisplayNIC, InlineNIC {
ExternalGraphicNIC();
bool isDisplay;
Symbol scaleType; // symbolFalse if not a symbol
double scale[2]; // if scaleType == symbolFalse
StringC entitySystemId;
StringC notationSystemId;
bool hasMaxWidth;
LengthSpec maxWidth;
bool hasMaxHeight;
LengthSpec maxHeight;
// These apply only if !isDisplay
// symbolFalse if no escapementDirection
Symbol escapementDirection;
LengthSpec positionPointX;
LengthSpec positionPointY;
};
struct BoxNIC : DisplayNIC, InlineNIC {
BoxNIC();
bool isDisplay;
};
struct RuleNIC : DisplayNIC, InlineNIC {
RuleNIC();
Symbol orientation;
bool hasLength;
LengthSpec length;
};
struct LeaderNIC : InlineNIC {
LeaderNIC();
bool hasLength;
LengthSpec length;
};
// A paragraph has the same non-inherited characteristics
// as a display-group.
typedef DisplayNIC ParagraphNIC;
struct CharacterNIC {
CharacterNIC();
enum {
cIsDropAfterLineBreak,
cIsDropUnlessBeforeLineBreak,
cIsPunct,
cIsInputWhitespace,
cIsInputTab,
cIsRecordEnd,
cIsSpace,
cChar,
cGlyphId,
cScript,
cMathClass,
cMathFontPosture,
cBreakBeforePriority,
cBreakAfterPriority
};
unsigned specifiedC;
Char ch;
GlyphId glyphId;
long breakBeforePriority;
long breakAfterPriority;
Symbol mathClass;
Symbol mathFontPosture;
PublicId script;
bool isDropAfterLineBreak;
bool isDropUnlessBeforeLineBreak;
bool isPunct;
bool isInputWhitespace;
bool isInputTab;
bool isRecordEnd;
bool isSpace;
// This doesn't have a flag in specifiedC,
// because it has a fixed default.
double stretchFactor;
};
typedef InlineNIC LineFieldNIC;
struct TableNIC : public DisplayNIC {
TableNIC();
enum WidthType {
widthFull,
widthMinimum,
widthExplicit
};
WidthType widthType;
LengthSpec width;
};
typedef DisplayNIC TablePartNIC;
struct TableColumnNIC {
TableColumnNIC();
unsigned columnIndex; // zero-based
unsigned nColumnsSpanned;
bool hasWidth;
TableLengthSpec width;
};
struct TableCellNIC {
TableCellNIC();
// If true, this isn't a real table cell.
// Rather it's one that can be used to fill in cells missing in this row.
bool missing;
unsigned columnIndex; // zero-based
unsigned nColumnsSpanned;
unsigned nRowsSpanned;
};
struct DeviceRGBColor {
unsigned char red;
unsigned char green;
unsigned char blue;
};
struct MultiMode {
MultiMode();
bool hasDesc;
StringC name;
StringC desc;
};
struct Address {
enum Type {
// An address of #f
none,
// An address that was resolved by the front-end to a node
// Only the node member is valid.
resolvedNode,
// node contains current node, params[0] is string.
idref,
entity,
sgmlDocument,
hytimeLinkend,
tei,
html
};
Type type;
// Gives current node or resolved node.
NodePtr node;
StringC params[3];
};
virtual SaveFOTBuilder *asSaveFOTBuilder();
virtual ~FOTBuilder();
// Default for compound flow objects
virtual void start();
virtual void end();
// Default for atomic flow objects: defaults to start(); end();
virtual void atomic();
// Atomic flow objects
virtual void characters(const Char *, size_t);
// Like characters(), but data comes from charChunk() on a NodePtr.
// If you are building a tree, then the NodePtr can be saved instead
// of the data. The default implementation calls characters().
virtual void charactersFromNode(const NodePtr &, const Char *, size_t);
virtual void character(const CharacterNIC &);
virtual void paragraphBreak(const ParagraphNIC &);
virtual void externalGraphic(const ExternalGraphicNIC &);
virtual void rule(const RuleNIC &);
virtual void alignmentPoint();
// For flow object class public id
// "UNREGISTERED::James Clark//Flow Object Class::formatting-instruction"
virtual void formattingInstruction(const StringC &);
// Non-atomic flow objects
virtual void startSequence();
virtual void endSequence();
virtual void startLineField(const LineFieldNIC &);
virtual void endLineField();
virtual void startParagraph(const ParagraphNIC &);
virtual void endParagraph();
virtual void startDisplayGroup(const DisplayGroupNIC &);
virtual void endDisplayGroup();
virtual void startScroll();
virtual void endScroll();
virtual void startLink(const Address &);
virtual void endLink();
virtual void startMarginalia();
virtual void endMarginalia();
virtual void startMultiMode(const MultiMode *principalPort, // null if no principal port
const Vector<MultiMode> &namedPorts,
Vector<FOTBuilder *> &);
virtual void endMultiMode();
virtual void startScore(Char);
virtual void startScore(const LengthSpec &);
virtual void startScore(Symbol);
virtual void endScore();
virtual void startLeader(const LeaderNIC &);
virtual void endLeader();
virtual void startSideline();
virtual void endSideline();
virtual void startBox(const BoxNIC &);
virtual void endBox();
// Tables
virtual void startTable(const TableNIC &);
virtual void endTable();
// A call for each border is made immediately
// after startTable(), each preceded by any appropriate set*() calls.
virtual void tableBeforeRowBorder();
virtual void tableAfterRowBorder();
virtual void tableBeforeColumnBorder();
virtual void tableAfterColumnBorder();
virtual void startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer);
virtual void endTablePart();
virtual void tableColumn(const TableColumnNIC &);
virtual void startTableRow();
virtual void endTableRow();
virtual void startTableCell(const TableCellNIC &);
virtual void endTableCell();
virtual void tableCellBeforeRowBorder();
virtual void tableCellAfterRowBorder();
virtual void tableCellBeforeColumnBorder();
virtual void tableCellAfterColumnBorder();
// Implementation must set numerator and denominator
// must be set to non-null values.
virtual void startMathSequence();
virtual void endMathSequence();
virtual void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator);
// startFraction is followed by call to fractionBar with set...() calls
// intervening
virtual void fractionBar();
virtual void endFraction();
virtual void startUnmath();
virtual void endUnmath();
virtual void startSuperscript();
virtual void endSuperscript();
virtual void startSubscript();
virtual void endSubscript();
virtual void startScript(FOTBuilder *&preSup,
FOTBuilder *&preSub,
FOTBuilder *&postSup,
FOTBuilder *&postSub,
FOTBuilder *&midSup,
FOTBuilder *&midSub);
virtual void endScript();
virtual void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark);
virtual void endMark();
virtual void startFence(FOTBuilder *&open, FOTBuilder *&close);
virtual void endFence();
virtual void startRadical(FOTBuilder *°ree);
// startRadical is followed by one of the following
virtual void radicalRadical(const CharacterNIC &);
virtual void radicalRadicalDefaulted();
virtual void endRadical();
virtual void startMathOperator(FOTBuilder *&oper,
FOTBuilder *&lowerLimit,
FOTBuilder *&upperLimit);
virtual void endMathOperator();
struct GridNIC {
GridNIC();
unsigned nColumns;
unsigned nRows;
};
virtual void startGrid(const GridNIC &);
virtual void endGrid();
struct GridCellNIC {
GridCellNIC();
unsigned columnNumber;
unsigned rowNumber;
};
virtual void startGridCell(const GridCellNIC &);
virtual void endGridCell();
// Simple page
virtual void startSimplePageSequence();
virtual void endSimplePageSequence();
// Headers and footers are treated like a separate port.
// There are 24 different parts to the headers and footers
// numbered 0 to 027; the numbers are computed by or'ing the
// following flags.
enum HF {
// first page or other page
firstHF = 01,
otherHF = 0,
// front page or back page
frontHF = 02,
backHF = 0,
// header or footer
headerHF = 04,
footerHF = 0,
// left, center or right part of header
leftHF = 0,
centerHF = 010,
rightHF = 020,
// number of different HF calls
nHF = 030
};
virtual void startSimplePageSequenceHeaderFooter(unsigned);
virtual void endSimplePageSequenceHeaderFooter(unsigned);
virtual void endAllSimplePageSequenceHeaderFooter();
// page-number sosofo
virtual void pageNumber();
// Inherited characteristics
// Set the value of the characteristic for the next flow object.
// Inherited characteristics that are not explicitly set have
// the same value as the parent flow object.
virtual void setFontSize(Length);
virtual void setFontFamilyName(const StringC &);
virtual void setFontWeight(Symbol);
virtual void setFontPosture(Symbol);
virtual void setStartIndent(const LengthSpec &);
virtual void setEndIndent(const LengthSpec &);
virtual void setFirstLineStartIndent(const LengthSpec &);
virtual void setLastLineEndIndent(const LengthSpec &);
virtual void setLineSpacing(const LengthSpec &);
virtual void setFieldWidth(const LengthSpec &);
virtual void setMarginaliaSep(const LengthSpec &);
virtual void setLines(Symbol);
virtual void setQuadding(Symbol);
virtual void setDisplayAlignment(Symbol);
virtual void setFieldAlign(Symbol);
virtual void setColor(const DeviceRGBColor &);
virtual void setBackgroundColor(); // background of #f
virtual void setBackgroundColor(const DeviceRGBColor &);
virtual void setBorderPresent(bool);
virtual void setLineThickness(Length);
virtual void setCellBeforeRowMargin(Length);
virtual void setCellAfterRowMargin(Length);
virtual void setCellBeforeColumnMargin(Length);
virtual void setCellAfterColumnMargin(Length);
virtual void setLineSep(Length);
virtual void setBoxSizeBefore(Length);
virtual void setBoxSizeAfter(Length);
virtual void setPositionPointShift(const LengthSpec &);
virtual void setStartMargin(const LengthSpec &);
virtual void setEndMargin(const LengthSpec &);
virtual void setSidelineSep(const LengthSpec &);
virtual void setAsisWrapIndent(const LengthSpec &);
virtual void setLineNumberSep(const LengthSpec &);
virtual void setLastLineJustifyLimit(const LengthSpec &);
virtual void setJustifyGlyphSpaceMaxAdd(const LengthSpec &);
virtual void setJustifyGlyphSpaceMaxRemove(const LengthSpec &);
virtual void setTableCornerRadius(const LengthSpec &);
virtual void setBoxCornerRadius(const LengthSpec &);
virtual void setMinPreLineSpacing(const OptLengthSpec &);
virtual void setMinPostLineSpacing(const OptLengthSpec &);
virtual void setMinLeading(const OptLengthSpec &);
virtual void setInhibitLineBreaks(bool);
virtual void setHyphenate(bool);
virtual void setKern(bool);
virtual void setLigature(bool);
virtual void setScoreSpaces(bool);
virtual void setFloatOutMarginalia(bool);
virtual void setFloatOutSidelines(bool);
virtual void setFloatOutLineNumbers(bool);
virtual void setCellBackground(bool);
virtual void setSpanWeak(bool);
virtual void setIgnoreRecordEnd(bool);
virtual void setNumberedLines(bool);
virtual void setHangingPunct(bool);
virtual void setBoxOpenEnd(bool);
virtual void setTruncateLeader(bool);
virtual void setAlignLeader(bool);
virtual void setTablePartOmitMiddleHeader(bool);
virtual void setTablePartOmitMiddleFooter(bool);
virtual void setBorderOmitAtBreak(bool);
virtual void setPrincipalModeSimultaneous(bool);
virtual void setMarginaliaKeepWithPrevious(bool);
virtual void setGridEquidistantRows(bool);
virtual void setGridEquidistantColumns(bool);
virtual void setLineJoin(Symbol);
virtual void setLineCap(Symbol);
virtual void setLineNumberSide(Symbol);
virtual void setKernMode(Symbol);
virtual void setInputWhitespaceTreatment(Symbol);
virtual void setFillingDirection(Symbol);
virtual void setWritingMode(Symbol);
virtual void setLastLineQuadding(Symbol);
virtual void setMathDisplayMode(Symbol);
virtual void setScriptPreAlign(Symbol);
virtual void setScriptPostAlign(Symbol);
virtual void setScriptMidSupAlign(Symbol);
virtual void setScriptMidSubAlign(Symbol);
virtual void setNumeratorAlign(Symbol);
virtual void setDenominatorAlign(Symbol);
virtual void setGridPositionCellType(Symbol);
virtual void setGridColumnAlignment(Symbol);
virtual void setGridRowAlignment(Symbol);
virtual void setBoxType(Symbol);
virtual void setGlyphAlignmentMode(Symbol);
virtual void setBoxBorderAlignment(Symbol);
virtual void setCellRowAlignment(Symbol);
virtual void setBorderAlignment(Symbol);
virtual void setSidelineSide(Symbol);
virtual void setHyphenationKeep(Symbol);
virtual void setFontStructure(Symbol);
virtual void setFontProportionateWidth(Symbol);
virtual void setCellCrossed(Symbol);
virtual void setMarginaliaSide(Symbol);
virtual void setLayer(long);
virtual void setBackgroundLayer(long);
virtual void setBorderPriority(long);
virtual void setLineRepeat(long);
virtual void setSpan(long);
virtual void setMinLeaderRepeat(long);
virtual void setHyphenationRemainCharCount(long);
virtual void setHyphenationPushCharCount(long);
virtual void setWidowCount(long);
virtual void setOrphanCount(long);
// 0 means #f
virtual void setExpandTabs(long);
virtual void setHyphenationLadderCount(long);
// public id or #f
virtual void setBackgroundTile(PublicId);
virtual void setLineBreakingMethod(PublicId);
virtual void setLineCompositionMethod(PublicId);
virtual void setImplicitBidiMethod(PublicId);
virtual void setGlyphSubstMethod(PublicId);
virtual void setGlyphReorderMethod(PublicId);
virtual void setHyphenationMethod(PublicId);
virtual void setTableAutoWidthMethod(PublicId);
virtual void setFontName(PublicId);
// Two-letter code
virtual void setLanguage(Letter2);
virtual void setCountry(Letter2);
virtual void setEscapementSpaceBefore(const InlineSpace &);
virtual void setEscapementSpaceAfter(const InlineSpace &);
// For simple page sequence
virtual void setPageWidth(Length);
virtual void setPageHeight(Length);
virtual void setLeftMargin(Length);
virtual void setRightMargin(Length);
virtual void setTopMargin(Length);
virtual void setBottomMargin(Length);
virtual void setHeaderMargin(Length);
virtual void setFooterMargin(Length);
// Others
virtual void setGlyphSubstTable(const Vector<ConstPtr<GlyphSubstTable> > &);
// Backlinks
// processingMode is empty for initial processing mode.
virtual void startNode(const NodePtr &, const StringC &processingMode);
virtual void endNode();
virtual void currentNodePageNumber(const NodePtr &);
class CompoundExtensionFlowObj;
class STYLE_API ExtensionFlowObj {
public:
virtual ~ExtensionFlowObj();
class Value {
public:
virtual bool convertString(StringC &) const = 0;
virtual bool convertStringPairList(Vector<StringC> &) const = 0;
virtual bool convertStringList(Vector<StringC> &) const = 0;
virtual bool convertBoolean(bool &) const = 0;
};
virtual CompoundExtensionFlowObj *asCompoundExtensionFlowObj();
virtual const CompoundExtensionFlowObj *asCompoundExtensionFlowObj() const;
virtual bool hasNIC(const StringC &) const;
virtual void setNIC(const StringC &, const Value &);
virtual ExtensionFlowObj *copy() const = 0;
};
class STYLE_API CompoundExtensionFlowObj : public ExtensionFlowObj {
public:
CompoundExtensionFlowObj *asCompoundExtensionFlowObj();
const CompoundExtensionFlowObj *asCompoundExtensionFlowObj() const;
virtual bool hasPrincipalPort() const;
virtual void portNames(Vector<StringC> &) const;
};
// extension inherited characteristics
virtual void extensionSet(void (FOTBuilder::*)(bool), bool);
virtual void extensionSet(void (FOTBuilder::*)(const StringC &), const StringC &);
virtual void extensionSet(void (FOTBuilder::*)(long), long);
// extension flow objects
virtual void extension(const ExtensionFlowObj &, const NodePtr &);
virtual void startExtension(const CompoundExtensionFlowObj &,
const NodePtr &,
Vector<FOTBuilder *> &ports);
virtual void endExtension(const CompoundExtensionFlowObj &);
struct Extension {
const char *pubid;
void (FOTBuilder::*boolSetter)(bool);
void (FOTBuilder::*stringSetter)(const StringC &);
void (FOTBuilder::*integerSetter)(long);
void (FOTBuilder::*lengthSetter)(Length);
const ExtensionFlowObj *flowObj;
};
static const char *symbolName(Symbol);
};
class STYLE_API SaveFOTBuilder : public Link, public FOTBuilder {
public:
SaveFOTBuilder();
SaveFOTBuilder(const NodePtr &, const StringC &processingMode);
~SaveFOTBuilder();
SaveFOTBuilder *asSaveFOTBuilder();
void emit(FOTBuilder &);
void characters(const Char *, size_t);
void charactersFromNode(const NodePtr &, const Char *, size_t);
void character(const CharacterNIC &);
void paragraphBreak(const ParagraphNIC &);
void externalGraphic(const ExternalGraphicNIC &);
void rule(const RuleNIC &);
void alignmentPoint();
void formattingInstruction(const StringC &);
void startSequence();
void endSequence();
void startLineField(const LineFieldNIC &);
void endLineField();
void startParagraph(const ParagraphNIC &);
void endParagraph();
void startDisplayGroup(const DisplayGroupNIC &);
void endDisplayGroup();
void startScroll();
void endScroll();
void startLink(const Address &);
void endLink();
void startMultiMode(const MultiMode *principalPort,
const Vector<MultiMode> &namedPorts,
Vector<FOTBuilder *> &);
void endMultiMode();
void startMarginalia();
void endMarginalia();
void startScore(Char);
void startScore(const LengthSpec &);
void startScore(Symbol);
void endScore();
void startLeader(const LeaderNIC &);
void endLeader();
void startSideline();
void endSideline();
void startBox(const BoxNIC &);
void endBox();
void startSimplePageSequence();
void endSimplePageSequence();
// Headers and footers are treated like a separate port.
void startSimplePageSequenceHeaderFooter(unsigned);
void endSimplePageSequenceHeaderFooter(unsigned);
void endAllSimplePageSequenceHeaderFooter();
// page-number sosofo
void pageNumber();
// math
void startMathSequence();
void endMathSequence();
void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator);
void fractionBar();
void endFraction();
void startUnmath();
void endUnmath();
void startSuperscript();
void endSuperscript();
void startSubscript();
void endSubscript();
void startScript(FOTBuilder *&preSup,
FOTBuilder *&preSub,
FOTBuilder *&postSup,
FOTBuilder *&postSub,
FOTBuilder *&midSup,
FOTBuilder *&midSub);
void endScript();
void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark);
void endMark();
void startFence(FOTBuilder *&open, FOTBuilder *&close);
void endFence();
void startRadical(FOTBuilder *°ree);
void endRadical();
void radicalRadical(const CharacterNIC &);
void radicalRadicalDefaulted();
void startMathOperator(FOTBuilder *&oper,
FOTBuilder *&lowerLimit,
FOTBuilder *&upperLimit);
void endMathOperator();
void startGrid(const GridNIC &);
void endGrid();
void startGridCell(const GridCellNIC &);
void endGridCell();
// Tables
void startTable(const TableNIC &);
void endTable();
void tableBeforeRowBorder();
void tableAfterRowBorder();
void tableBeforeColumnBorder();
void tableAfterColumnBorder();
void startTablePart(const TablePartNIC &, FOTBuilder *&header, FOTBuilder *&footer);
void endTablePart();
void tableColumn(const TableColumnNIC &);
void startTableRow();
void endTableRow();
void startTableCell(const TableCellNIC &);
void endTableCell();
void tableCellBeforeRowBorder();
void tableCellAfterRowBorder();
void tableCellBeforeColumnBorder();
void tableCellAfterColumnBorder();
// Inherited characteristics
void setFontSize(Length);
void setFontFamilyName(const StringC &);
void setFontWeight(Symbol);
void setFontPosture(Symbol);
void setStartIndent(const LengthSpec &);
void setEndIndent(const LengthSpec &);
void setFirstLineStartIndent(const LengthSpec &);
void setLastLineEndIndent(const LengthSpec &);
void setLineSpacing(const LengthSpec &);
void setFieldWidth(const LengthSpec &);
void setLines(Symbol);
void setQuadding(Symbol);
void setDisplayAlignment(Symbol);
void setFieldAlign(Symbol);
void setColor(const DeviceRGBColor &);
void setBackgroundColor(const DeviceRGBColor &);
void setBackgroundColor();
void setPageWidth(Length);
void setPageHeight(Length);
void setLeftMargin(Length);
void setRightMargin(Length);
void setTopMargin(Length);
void setBottomMargin(Length);
void setHeaderMargin(Length);
void setFooterMargin(Length);
void setBorderPresent(bool);
void setLineThickness(Length);
void setCellBeforeRowMargin(Length);
void setCellAfterRowMargin(Length);
void setCellBeforeColumnMargin(Length);
void setCellAfterColumnMargin(Length);
void setLineSep(Length);
void setBoxSizeBefore(Length);
void setBoxSizeAfter(Length);
void setPositionPointShift(const LengthSpec &);
void setStartMargin(const LengthSpec &);
void setEndMargin(const LengthSpec &);
void setSidelineSep(const LengthSpec &);
void setAsisWrapIndent(const LengthSpec &);
void setLineNumberSep(const LengthSpec &);
void setLastLineJustifyLimit(const LengthSpec &);
void setJustifyGlyphSpaceMaxAdd(const LengthSpec &);
void setJustifyGlyphSpaceMaxRemove(const LengthSpec &);
void setTableCornerRadius(const LengthSpec &);
void setBoxCornerRadius(const LengthSpec &);
void setMarginaliaSep(const LengthSpec &);
void setMinPreLineSpacing(const OptLengthSpec &);
void setMinPostLineSpacing(const OptLengthSpec &);
void setMinLeading(const OptLengthSpec &);
void setInhibitLineBreaks(bool);
void setHyphenate(bool);
void setKern(bool);
void setLigature(bool);
void setScoreSpaces(bool);
void setFloatOutMarginalia(bool);
void setFloatOutSidelines(bool);
void setFloatOutLineNumbers(bool);
void setCellBackground(bool);
void setSpanWeak(bool);
void setIgnoreRecordEnd(bool);
void setNumberedLines(bool);
void setHangingPunct(bool);
void setBoxOpenEnd(bool);
void setTruncateLeader(bool);
void setAlignLeader(bool);
void setTablePartOmitMiddleHeader(bool);
void setTablePartOmitMiddleFooter(bool);
void setBorderOmitAtBreak(bool);
void setPrincipalModeSimultaneous(bool);
void setMarginaliaKeepWithPrevious(bool);
void setGridEquidistantRows(bool);
void setGridEquidistantColumns(bool);
void setLineJoin(Symbol);
void setLineCap(Symbol);
void setLineNumberSide(Symbol);
void setKernMode(Symbol);
void setInputWhitespaceTreatment(Symbol);
void setFillingDirection(Symbol);
void setWritingMode(Symbol);
void setLastLineQuadding(Symbol);
void setMathDisplayMode(Symbol);
void setScriptPreAlign(Symbol);
void setScriptPostAlign(Symbol);
void setScriptMidSupAlign(Symbol);
void setScriptMidSubAlign(Symbol);
void setNumeratorAlign(Symbol);
void setDenominatorAlign(Symbol);
void setGridPositionCellType(Symbol);
void setGridColumnAlignment(Symbol);
void setGridRowAlignment(Symbol);
void setBoxType(Symbol);
void setGlyphAlignmentMode(Symbol);
void setBoxBorderAlignment(Symbol);
void setCellRowAlignment(Symbol);
void setBorderAlignment(Symbol);
void setSidelineSide(Symbol);
void setHyphenationKeep(Symbol);
void setFontStructure(Symbol);
void setFontProportionateWidth(Symbol);
void setCellCrossed(Symbol);
void setMarginaliaSide(Symbol);
void setLayer(long);
void setBackgroundLayer(long);
void setBorderPriority(long);
void setLineRepeat(long);
void setSpan(long);
void setMinLeaderRepeat(long);
void setHyphenationRemainCharCount(long);
void setHyphenationPushCharCount(long);
void setWidowCount(long);
void setOrphanCount(long);
void setExpandTabs(long);
void setHyphenationLadderCount(long);
void setBackgroundTile(PublicId);
void setLineBreakingMethod(PublicId);
void setLineCompositionMethod(PublicId);
void setImplicitBidiMethod(PublicId);
void setGlyphSubstMethod(PublicId);
void setGlyphReorderMethod(PublicId);
void setHyphenationMethod(PublicId);
void setTableAutoWidthMethod(PublicId);
void setFontName(PublicId);
void setLanguage(Letter2);
void setCountry(Letter2);
void setEscapementSpaceBefore(const InlineSpace &);
void setEscapementSpaceAfter(const InlineSpace &);
void setGlyphSubstTable(const Vector<ConstPtr<GlyphSubstTable> > &);
void startNode(const NodePtr &, const StringC &processingMode);
void endNode();
void currentNodePageNumber(const NodePtr &);
void extensionSet(void (FOTBuilder::*)(bool), bool);
void extensionSet(void (FOTBuilder::*)(const StringC &), const StringC &);
void extensionSet(void (FOTBuilder::*)(long), long);
void extension(const ExtensionFlowObj &, const NodePtr &);
void startExtension(const CompoundExtensionFlowObj &,
const NodePtr &,
Vector<FOTBuilder *> &ports);
void endExtension(const CompoundExtensionFlowObj &);
struct Call {
virtual ~Call();
virtual void emit(FOTBuilder &) = 0;
Call *next;
};
private:
SaveFOTBuilder(const SaveFOTBuilder &); // undefined
void operator=(const SaveFOTBuilder &); // undefined
struct NoArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)();
NoArgCall(FuncPtr f) : func(f) { }
void emit(FOTBuilder &);
FuncPtr func;
};
struct LongArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(long);
LongArgCall(FuncPtr f, long n) : func(f), arg(n) { }
void emit(FOTBuilder &);
FuncPtr func;
long arg;
};
struct ExtensionLongArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(long);
ExtensionLongArgCall(FuncPtr f, long n) : func(f), arg(n) { }
void emit(FOTBuilder &);
FuncPtr func;
long arg;
};
struct LengthSpecArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const LengthSpec &);
LengthSpecArgCall(FuncPtr f, const LengthSpec &ls) : func(f), arg(ls) { }
void emit(FOTBuilder &);
FuncPtr func;
LengthSpec arg;
};
struct OptLengthSpecArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const OptLengthSpec &);
OptLengthSpecArgCall(FuncPtr f, const OptLengthSpec &ols) : func(f), arg(ols) { }
void emit(FOTBuilder &);
FuncPtr func;
OptLengthSpec arg;
};
struct NodePtrArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const NodePtr &);
NodePtrArgCall(FuncPtr f, const NodePtr &nd) : func(f), arg(nd) { }
void emit(FOTBuilder &);
FuncPtr func;
NodePtr arg;
};
struct StringArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const StringC &);
StringArgCall(FuncPtr f, const StringC &s) : func(f), arg(s) { }
void emit(FOTBuilder &);
FuncPtr func;
StringC arg;
};
struct ExtensionStringArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const StringC &);
ExtensionStringArgCall(FuncPtr f, const StringC &s) : func(f), arg(s) { }
void emit(FOTBuilder &);
FuncPtr func;
StringC arg;
};
struct CharArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(Char);
CharArgCall(FuncPtr f, Char c) : func(f), arg(c) { }
void emit(FOTBuilder &);
FuncPtr func;
Char arg;
};
struct BoolArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(bool);
BoolArgCall(FuncPtr f, bool b) : func(f), arg(b) { }
void emit(FOTBuilder &);
FuncPtr func;
bool arg;
};
struct ExtensionBoolArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(bool);
ExtensionBoolArgCall(FuncPtr f, bool b) : func(f), arg(b) { }
void emit(FOTBuilder &);
FuncPtr func;
bool arg;
};
struct SymbolArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(Symbol);
SymbolArgCall(FuncPtr f, Symbol sym) : func(f), arg(sym) { }
void emit(FOTBuilder &);
FuncPtr func;
Symbol arg;
};
struct PublicIdArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(PublicId);
PublicIdArgCall(FuncPtr f, PublicId pubid) : func(f), arg(pubid) { }
void emit(FOTBuilder &);
FuncPtr func;
PublicId arg;
};
struct UnsignedArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(unsigned);
UnsignedArgCall(FuncPtr f, unsigned n) : func(f), arg(n) { }
void emit(FOTBuilder &);
FuncPtr func;
unsigned arg;
};
struct DeviceRGBColorArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const DeviceRGBColor &);
DeviceRGBColorArgCall(FuncPtr f, const DeviceRGBColor &color) : func(f), arg(color) { }
void emit(FOTBuilder &);
FuncPtr func;
DeviceRGBColor arg;
};
struct InlineSpaceArgCall : Call {
typedef void (FOTBuilder::*FuncPtr)(const InlineSpace &);
InlineSpaceArgCall(FuncPtr f, InlineSpace is) : func(f), arg(is) { }
void emit(FOTBuilder &);
FuncPtr func;
InlineSpace arg;
};
struct CharactersFromNodeCall : Call {
CharactersFromNodeCall(const NodePtr &, const Char *, size_t);
void emit(FOTBuilder &);
const Char *data;
size_t size;
NodePtr node;
};
struct CharactersCall : Call {
CharactersCall(const Char *, size_t);
void emit(FOTBuilder &);
StringC str;
};
struct CharacterCall : Call {
CharacterCall(const CharacterNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
CharacterNIC arg;
};
struct StartNodeCall : Call {
StartNodeCall(const NodePtr &, const StringC &);
void emit(FOTBuilder &);
NodePtr node;
StringC mode;
};
struct StartParagraphCall : Call {
StartParagraphCall(const ParagraphNIC &nic);
void emit(FOTBuilder &);
ParagraphNIC arg;
};
struct ParagraphBreakCall : Call {
ParagraphBreakCall(const ParagraphNIC &nic);
void emit(FOTBuilder &);
ParagraphNIC arg;
};
struct StartDisplayGroupCall : Call {
StartDisplayGroupCall(const DisplayGroupNIC &nic);
void emit(FOTBuilder &);
DisplayGroupNIC arg;
};
struct StartBoxCall : Call {
StartBoxCall(const BoxNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
BoxNIC arg;
};
struct StartLineFieldCall : Call {
StartLineFieldCall(const LineFieldNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
LineFieldNIC arg;
};
struct ExternalGraphicCall : Call {
ExternalGraphicCall(const ExternalGraphicNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
ExternalGraphicNIC arg;
};
struct RuleCall : Call {
RuleCall(const RuleNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
RuleNIC arg;
};
struct StartLeaderCall : Call {
StartLeaderCall(const LeaderNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
LeaderNIC arg;
};
struct StartTableCall : Call {
StartTableCall(const TableNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
TableNIC arg;
};
struct TableColumnCall : Call {
TableColumnCall(const TableColumnNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
TableColumnNIC arg;
};
struct StartTableCellCall : Call {
StartTableCellCall(const TableCellNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
TableCellNIC arg;
};
struct StartLinkCall : Call {
StartLinkCall(const Address &addr) : arg(addr) { }
void emit(FOTBuilder &);
Address arg;
};
struct SetGlyphSubstTableCall : Call {
SetGlyphSubstTableCall(const Vector<ConstPtr<GlyphSubstTable> > &tables) : arg(tables) { }
void emit(FOTBuilder &);
Vector<ConstPtr<GlyphSubstTable> > arg;
};
struct StartGridCall : Call {
StartGridCall(const GridNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
GridNIC arg;
};
struct StartGridCellCall : Call {
StartGridCellCall(const GridCellNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
GridCellNIC arg;
};
struct RadicalRadicalCall : Call {
RadicalRadicalCall(const CharacterNIC &nic) : arg(nic) { }
void emit(FOTBuilder &);
CharacterNIC arg;
};
struct ExtensionCall : Call {
ExtensionCall(const ExtensionFlowObj &fo, const NodePtr &nd)
: arg(fo.copy()), node(nd) { }
void emit(FOTBuilder &);
Owner<ExtensionFlowObj> arg;
NodePtr node;
};
struct EndExtensionCall : Call {
EndExtensionCall(const CompoundExtensionFlowObj &fo)
: arg(fo.copy()->asCompoundExtensionFlowObj()) { }
void emit(FOTBuilder &);
Owner<CompoundExtensionFlowObj> arg;
};
Call *calls_;
Call **tail_;
NodePtr currentNode_;
StringC processingMode_;
};
// Would like to make this a member of SaveFOTBuilder, but can't because
// it has members that are instances of SaveFOTBuilder.
struct StartFractionCall : SaveFOTBuilder::Call {
StartFractionCall(FOTBuilder *&numerator, FOTBuilder *&denominator);
void emit(FOTBuilder &);
SaveFOTBuilder numerator;
SaveFOTBuilder denominator;
};
struct StartScriptCall : SaveFOTBuilder::Call {
StartScriptCall(FOTBuilder *&preSup,
FOTBuilder *&preSub,
FOTBuilder *&postSup,
FOTBuilder *&postSub,
FOTBuilder *&midSup,
FOTBuilder *&midSub);
void emit(FOTBuilder &);
SaveFOTBuilder preSup;
SaveFOTBuilder preSub;
SaveFOTBuilder postSup;
SaveFOTBuilder postSub;
SaveFOTBuilder midSup;
SaveFOTBuilder midSub;
};
struct StartMarkCall : public SaveFOTBuilder::Call {
StartMarkCall(FOTBuilder *&overMark, FOTBuilder *&underMark);
void emit(FOTBuilder &);
SaveFOTBuilder overMark;
SaveFOTBuilder underMark;
};
struct StartFenceCall : public SaveFOTBuilder::Call {
StartFenceCall(FOTBuilder *&open, FOTBuilder *&close);
void emit(FOTBuilder &);
SaveFOTBuilder open;
SaveFOTBuilder close;
};
struct StartRadicalCall : public SaveFOTBuilder::Call {
StartRadicalCall(FOTBuilder *°ree);
void emit(FOTBuilder &);
SaveFOTBuilder degree;
};
struct StartMathOperatorCall : public SaveFOTBuilder::Call {
StartMathOperatorCall(FOTBuilder *&oper,
FOTBuilder *&lowerLimit,
FOTBuilder *&upperLimit);
void emit(FOTBuilder &);
SaveFOTBuilder oper;
SaveFOTBuilder lowerLimit;
SaveFOTBuilder upperLimit;
};
struct StartTablePartCall : SaveFOTBuilder::Call {
StartTablePartCall(const FOTBuilder::TablePartNIC &nic, FOTBuilder *&header, FOTBuilder *&footer);
void emit(FOTBuilder &);
FOTBuilder::TablePartNIC arg;
SaveFOTBuilder header;
SaveFOTBuilder footer;
};
struct StartMultiModeCall : SaveFOTBuilder::Call {
StartMultiModeCall(const FOTBuilder::MultiMode *principalMode,
const Vector<FOTBuilder::MultiMode> &namedModes,
Vector<FOTBuilder *> &ports);
void emit(FOTBuilder &);
FOTBuilder::MultiMode principalMode;
bool hasPrincipalMode;
Vector<FOTBuilder::MultiMode> namedModes;
IList<SaveFOTBuilder> ports;
};
struct StartExtensionCall : SaveFOTBuilder::Call {
StartExtensionCall(const FOTBuilder::CompoundExtensionFlowObj &,
const NodePtr &,
Vector<FOTBuilder *> &);
void emit(FOTBuilder &);
IList<SaveFOTBuilder> ports;
NodePtr node;
Owner<FOTBuilder::CompoundExtensionFlowObj> flowObj;
};
// This uses SaveFOTBuilder to provide a serial view of multi-port objects.
class STYLE_API SerialFOTBuilder : public FOTBuilder {
public:
SerialFOTBuilder();
// Instead of overriding these
void startTablePart(const TablePartNIC &,
FOTBuilder *&header, FOTBuilder *&footer);
void endTablePart();
void startFraction(FOTBuilder *&numerator, FOTBuilder *&denominator);
void endFraction();
void startScript(FOTBuilder *&preSup,
FOTBuilder *&preSub,
FOTBuilder *&postSup,
FOTBuilder *&postSub,
FOTBuilder *&midSup,
FOTBuilder *&midSub);
void endScript();
void startMark(FOTBuilder *&overMark, FOTBuilder *&underMark);
void endMark();
void startFence(FOTBuilder *&open, FOTBuilder *&close);
void endFence();
void startRadical(FOTBuilder *°ree);
void endRadical();
void startMathOperator(FOTBuilder *&oper,
FOTBuilder *&lowerLimit,
FOTBuilder *&upperLimit);
void endMathOperator();
void startMultiMode(const MultiMode *,
const Vector<MultiMode> &,
Vector<FOTBuilder *> &);
void endMultiMode();
void startExtension(const CompoundExtensionFlowObj &,
const NodePtr &,
Vector<FOTBuilder *> &ports);
void endExtension(const CompoundExtensionFlowObj &);
// Override these
virtual void startFractionSerial();
virtual void endFractionSerial();
virtual void startFractionNumerator();
virtual void endFractionNumerator();
virtual void startFractionDenominator();
virtual void endFractionDenominator();
virtual void startScriptSerial();
virtual void endScriptSerial();
virtual void startScriptPreSup();
virtual void endScriptPreSup();
virtual void startScriptPreSub();
virtual void endScriptPreSub();
virtual void startScriptPostSup();
virtual void endScriptPostSup();
virtual void startScriptPostSub();
virtual void endScriptPostSub();
virtual void startScriptMidSup();
virtual void endScriptMidSup();
virtual void startScriptMidSub();
virtual void endScriptMidSub();
virtual void startMarkSerial();
virtual void endMarkSerial();
virtual void startMarkOver();
virtual void endMarkOver();
virtual void startMarkUnder();
virtual void endMarkUnder();
virtual void startFenceSerial();
virtual void endFenceSerial();
virtual void startFenceOpen();
virtual void endFenceOpen();
virtual void startFenceClose();
virtual void endFenceClose();
virtual void startRadicalSerial();
virtual void endRadicalSerial();
virtual void startRadicalDegree();
virtual void endRadicalDegree();
virtual void startMathOperatorSerial();
virtual void endMathOperatorSerial();
virtual void startMathOperatorOperator();
virtual void endMathOperatorOperator();
virtual void startMathOperatorLowerLimit();
virtual void endMathOperatorLowerLimit();
virtual void startMathOperatorUpperLimit();
virtual void endMathOperatorUpperLimit();
virtual void startTablePartSerial(const TablePartNIC &);
virtual void endTablePartSerial();
virtual void startTablePartHeader();
virtual void endTablePartHeader();
virtual void startTablePartFooter();
virtual void endTablePartFooter();
virtual void startMultiModeSerial(const MultiMode *);
virtual void endMultiModeSerial();
virtual void startMultiModeMode(const MultiMode &);
virtual void endMultiModeMode();
virtual void startExtensionSerial(const CompoundExtensionFlowObj &, const NodePtr &);
virtual void endExtensionSerial(const CompoundExtensionFlowObj &);
virtual void startExtensionStream(const StringC &);
virtual void endExtensionStream(const StringC &);
private:
IList<SaveFOTBuilder> save_;
Vector<Vector<MultiMode> > multiModeStack_;
};
inline
bool operator==(const FOTBuilder::GlyphId &g1, const FOTBuilder::GlyphId &g2)
{
return g1.publicId == g2.publicId && g1.suffix == g2.suffix;
}
bool STYLE_API operator==(const StringC &, const char *);
#ifdef DSSSL_NAMESPACE
}
#endif
#endif /* not FOTBuilder_INCLUDED */
|