@windoc/core 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -454,6 +454,8 @@ interface IRow {
454
454
  listIndex?: number;
455
455
  offsetX?: number;
456
456
  offsetY?: number;
457
+ spaceAbove?: number;
458
+ spaceBelow?: number;
457
459
  elementList: IRowElement[];
458
460
  isWidthNotEnough?: boolean;
459
461
  rowIndex: number;
@@ -2519,6 +2521,7 @@ declare class Draw {
2519
2521
  getElementSize(el: IElement): number;
2520
2522
  getElementRowMargin(el: IElement): number;
2521
2523
  computeRowList(payload: IComputeRowListPayload): IRow[];
2524
+ private _applyRowSpacing;
2522
2525
  private _computePageList;
2523
2526
  private _drawHighlight;
2524
2527
  drawRow(ctx: CanvasRenderingContext2D, payload: IDrawRowPayload): void;
package/dist/index.d.ts CHANGED
@@ -454,6 +454,8 @@ interface IRow {
454
454
  listIndex?: number;
455
455
  offsetX?: number;
456
456
  offsetY?: number;
457
+ spaceAbove?: number;
458
+ spaceBelow?: number;
457
459
  elementList: IRowElement[];
458
460
  isWidthNotEnough?: boolean;
459
461
  rowIndex: number;
@@ -2519,6 +2521,7 @@ declare class Draw {
2519
2521
  getElementSize(el: IElement): number;
2520
2522
  getElementRowMargin(el: IElement): number;
2521
2523
  computeRowList(payload: IComputeRowListPayload): IRow[];
2524
+ private _applyRowSpacing;
2522
2525
  private _computePageList;
2523
2526
  private _drawHighlight;
2524
2527
  drawRow(ctx: CanvasRenderingContext2D, payload: IDrawRowPayload): void;
package/dist/index.js CHANGED
@@ -145,6 +145,17 @@ var LETTER_CLASS = {
145
145
  };
146
146
  var METRICS_BASIS_TEXT = "M";
147
147
 
148
+ // src/dataset/enum/Title.ts
149
+ var TitleLevel = /* @__PURE__ */ ((TitleLevel2) => {
150
+ TitleLevel2["FIRST"] = "first";
151
+ TitleLevel2["SECOND"] = "second";
152
+ TitleLevel2["THIRD"] = "third";
153
+ TitleLevel2["FOURTH"] = "fourth";
154
+ TitleLevel2["FIFTH"] = "fifth";
155
+ TitleLevel2["SIXTH"] = "sixth";
156
+ return TitleLevel2;
157
+ })(TitleLevel || {});
158
+
148
159
  // src/dataset/enum/Row.ts
149
160
  var RowFlex = /* @__PURE__ */ ((RowFlex2) => {
150
161
  RowFlex2["LEFT"] = "left";
@@ -3964,25 +3975,14 @@ var ulPresetCycles = {
3964
3975
  var INDENT_PER_LEVEL = 20;
3965
3976
  var MAX_LIST_LEVEL = 8;
3966
3977
 
3967
- // src/dataset/enum/Title.ts
3968
- var TitleLevel = /* @__PURE__ */ ((TitleLevel2) => {
3969
- TitleLevel2["FIRST"] = "first";
3970
- TitleLevel2["SECOND"] = "second";
3971
- TitleLevel2["THIRD"] = "third";
3972
- TitleLevel2["FOURTH"] = "fourth";
3973
- TitleLevel2["FIFTH"] = "fifth";
3974
- TitleLevel2["SIXTH"] = "sixth";
3975
- return TitleLevel2;
3976
- })(TitleLevel || {});
3977
-
3978
3978
  // src/dataset/constant/Title.ts
3979
3979
  var defaultTitleOption = {
3980
- defaultFirstSize: 26,
3981
- defaultSecondSize: 24,
3982
- defaultThirdSize: 22,
3983
- defaultFourthSize: 20,
3984
- defaultFifthSize: 18,
3985
- defaultSixthSize: 16
3980
+ defaultFirstSize: 20,
3981
+ defaultSecondSize: 16,
3982
+ defaultThirdSize: 14,
3983
+ defaultFourthSize: 12,
3984
+ defaultFifthSize: 11,
3985
+ defaultSixthSize: 11
3986
3986
  };
3987
3987
  var titleSizeMapping = {
3988
3988
  ["first" /* FIRST */]: "defaultFirstSize",
@@ -5403,7 +5403,7 @@ function convertElementToDom(element, options) {
5403
5403
  if (element.italic) {
5404
5404
  dom.style.fontStyle = "italic";
5405
5405
  }
5406
- dom.style.fontSize = `${element.size || options.defaultSize}px`;
5406
+ dom.style.fontSize = `${element.size || options.defaultSize}pt`;
5407
5407
  if (element.highlight) {
5408
5408
  dom.style.backgroundColor = element.highlight;
5409
5409
  }
@@ -5729,7 +5729,7 @@ function convertTextNodeToElement(textNode) {
5729
5729
  color: style.color,
5730
5730
  bold: Number(style.fontWeight) > 500,
5731
5731
  italic: style.fontStyle.includes("italic"),
5732
- size: Math.floor(parseFloat(style.fontSize))
5732
+ size: Math.round(parseFloat(style.fontSize) * 0.75)
5733
5733
  };
5734
5734
  if (anchorNode.nodeName === "SUB" || style.verticalAlign === "sub") {
5735
5735
  element.type = "subscript" /* SUBSCRIPT */;
@@ -6515,11 +6515,13 @@ var Cursor = class {
6515
6515
  const curIndex = cursorPosition.index;
6516
6516
  const curElement = elementList[curIndex];
6517
6517
  const nextElement = elementList[curIndex + 1];
6518
- if (curElement && curElement.type === "image" /* IMAGE */ || nextElement && nextElement.type === "image" /* IMAGE */) {
6518
+ const isNearImage = curElement && curElement.type === "image" /* IMAGE */ || nextElement && nextElement.type === "image" /* IMAGE */;
6519
+ const isNearSeparator = curElement && curElement.type === "separator" /* SEPARATOR */ || nextElement && nextElement.type === "separator" /* SEPARATOR */;
6520
+ if (isNearImage || isNearSeparator) {
6519
6521
  const { defaultSize, defaultFont } = this.options;
6520
6522
  const ctx = this.draw.getCtx();
6521
6523
  ctx.save();
6522
- ctx.font = `${defaultSize * scale}px ${defaultFont}`;
6524
+ ctx.font = `${defaultSize * (96 / 72) * scale}px ${defaultFont}`;
6523
6525
  const textMetrics = ctx.measureText("M");
6524
6526
  ctx.restore();
6525
6527
  const textHeight = textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent;
@@ -6530,10 +6532,9 @@ var Cursor = class {
6530
6532
  boundingBoxDescent: textMetrics.actualBoundingBoxDescent
6531
6533
  };
6532
6534
  }
6533
- const descent = effectiveMetrics.boundingBoxDescent < 0 ? 0 : effectiveMetrics.boundingBoxDescent;
6534
6535
  const cursorPadding = 2 * scale;
6535
- const cursorHeight = effectiveMetrics.height + descent + cursorPadding;
6536
- const cursorTop = leftTop[1] + ascent - effectiveMetrics.height + cursorPadding / 2 + preY;
6536
+ const cursorHeight = effectiveMetrics.boundingBoxAscent + effectiveMetrics.boundingBoxDescent + cursorPadding;
6537
+ const cursorTop = isNearImage ? leftTop[1] + cursorPosition.lineHeight - effectiveMetrics.boundingBoxDescent - cursorPadding / 2 + preY : leftTop[1] + ascent - effectiveMetrics.boundingBoxAscent - cursorPadding / 2 + preY;
6537
6538
  const cursorLeft = hitLineStartIndex ? leftTop[0] : rightTop[0];
6538
6539
  agentCursorDom.style.left = `${cursorLeft}px`;
6539
6540
  agentCursorDom.style.top = `${cursorTop}px`;
@@ -9310,7 +9311,7 @@ var Position = class {
9310
9311
  }
9311
9312
  }
9312
9313
  x += curRow.offsetX || 0;
9313
- y += curRow.offsetY || 0;
9314
+ y += (curRow.offsetY || 0) + (curRow.spaceAbove || 0);
9314
9315
  const tablePreX = x;
9315
9316
  const tablePreY = y;
9316
9317
  for (let j = 0; j < curRow.elementList.length; j++) {
@@ -9423,7 +9424,7 @@ var Position = class {
9423
9424
  }
9424
9425
  }
9425
9426
  x = startX;
9426
- y += curRow.height;
9427
+ y += curRow.height + (curRow.spaceBelow || 0);
9427
9428
  }
9428
9429
  return { x, y, index };
9429
9430
  }
@@ -21170,7 +21171,8 @@ var Draw = class {
21170
21171
  const { defaultSize, defaultFont } = this.options;
21171
21172
  const font = el.font || defaultFont;
21172
21173
  const size = el.actualSize || el.size || defaultSize;
21173
- return `${el.italic ? "italic " : ""}${el.bold ? "bold " : ""}${size * scale}px ${font}`;
21174
+ const sizePx = size * (96 / 72) * scale;
21175
+ return `${el.italic ? "italic " : ""}${el.bold ? "bold " : ""}${sizePx}px ${font}`;
21174
21176
  }
21175
21177
  getElementSize(el) {
21176
21178
  return el.actualSize || el.size || this.options.defaultSize;
@@ -21811,6 +21813,28 @@ var Draw = class {
21811
21813
  }
21812
21814
  return rowList;
21813
21815
  }
21816
+ _applyRowSpacing() {
21817
+ const { scale } = this.options;
21818
+ const PT_TO_PX = 96 / 72;
21819
+ const HEADING_SPACE = {
21820
+ ["first" /* FIRST */]: { above: 20, below: 6 },
21821
+ ["second" /* SECOND */]: { above: 18, below: 6 },
21822
+ ["third" /* THIRD */]: { above: 16, below: 4 },
21823
+ ["fourth" /* FOURTH */]: { above: 14, below: 4 },
21824
+ ["fifth" /* FIFTH */]: { above: 12, below: 4 },
21825
+ ["sixth" /* SIXTH */]: { above: 12, below: 4 }
21826
+ };
21827
+ for (const row of this.rowList) {
21828
+ const headingEl = row.elementList.find((el) => el.level != null);
21829
+ if (headingEl?.level != null) {
21830
+ const space = HEADING_SPACE[headingEl.level];
21831
+ if (space) {
21832
+ row.spaceAbove = space.above * PT_TO_PX * scale;
21833
+ row.spaceBelow = space.below * PT_TO_PX * scale;
21834
+ }
21835
+ }
21836
+ }
21837
+ }
21814
21838
  _computePageList() {
21815
21839
  const pageRowList = [[]];
21816
21840
  const {
@@ -21827,7 +21851,7 @@ var Draw = class {
21827
21851
  this.rowList[i].columnNo = 0;
21828
21852
  }
21829
21853
  pageHeight += this.rowList.reduce(
21830
- (pre, cur) => pre + cur.height + (cur.offsetY || 0),
21854
+ (pre, cur) => pre + cur.height + (cur.offsetY || 0) + (cur.spaceAbove || 0) + (cur.spaceBelow || 0),
21831
21855
  0
21832
21856
  );
21833
21857
  const dpr = this.getPagePixelRatio();
@@ -21850,10 +21874,11 @@ var Draw = class {
21850
21874
  const rowOffsetY = row.offsetY || 0;
21851
21875
  const isPageBreak = this.rowList[i - 1]?.isPageBreak;
21852
21876
  const isColumnBreak = this.rowList[i - 1]?.isColumnBreak;
21853
- if (row.height + rowOffsetY + pageHeight > height || isPageBreak || isColumnBreak) {
21877
+ const rowTotalHeight = row.height + rowOffsetY + (row.spaceAbove || 0) + (row.spaceBelow || 0);
21878
+ if (rowTotalHeight + pageHeight > height || isPageBreak || isColumnBreak) {
21854
21879
  if ((!isPageBreak || isColumnBreak) && columnCount > 1 && columnNo < columnCount - 1) {
21855
21880
  columnNo++;
21856
- pageHeight = marginHeight + row.height + rowOffsetY;
21881
+ pageHeight = marginHeight + rowTotalHeight;
21857
21882
  row.columnNo = columnNo;
21858
21883
  pageRowList[pageNo].push(row);
21859
21884
  } else {
@@ -21862,14 +21887,14 @@ var Draw = class {
21862
21887
  break;
21863
21888
  }
21864
21889
  columnNo = 0;
21865
- pageHeight = marginHeight + row.height + rowOffsetY;
21890
+ pageHeight = marginHeight + rowTotalHeight;
21866
21891
  row.columnNo = columnNo;
21867
21892
  pageRowList.push([row]);
21868
21893
  pageNo++;
21869
21894
  }
21870
21895
  } else {
21871
21896
  row.columnNo = columnNo;
21872
- pageHeight += row.height + rowOffsetY;
21897
+ pageHeight += rowTotalHeight;
21873
21898
  pageRowList[pageNo].push(row);
21874
21899
  }
21875
21900
  }
@@ -22392,6 +22417,7 @@ var Draw = class {
22392
22417
  surroundElementList,
22393
22418
  elementList: this.elementList
22394
22419
  });
22420
+ this._applyRowSpacing();
22395
22421
  this.pageRowList = this._computePageList();
22396
22422
  this.position.computePositionList();
22397
22423
  this.area.compute();
@@ -23719,6 +23745,13 @@ var CommandAdapt = class {
23719
23745
  ]);
23720
23746
  curIndex = startIndex;
23721
23747
  }
23748
+ const afterSepIndex = curIndex + 2;
23749
+ if (elementList[afterSepIndex]?.value !== ZERO) {
23750
+ this.draw.spliceElementList(elementList, afterSepIndex, 0, [
23751
+ { value: ZERO }
23752
+ ]);
23753
+ }
23754
+ curIndex = afterSepIndex - 1;
23722
23755
  }
23723
23756
  this.range.setRange(curIndex, curIndex);
23724
23757
  this.draw.render({ curIndex });