X-Git-Url: https://git.kianting.info/?a=blobdiff_plain;f=src%2Flibclo%2Findex.ts;h=b9c3b094ca39a23ffa0fe7e9a48487cbaf7f89a2;hb=9c51921978468526aed0da6060900fe54967848e;hp=917cf68afbb1f8061105241b729ee808e85ea543;hpb=c3dc58d74afa6b298d84bad90d63c027a32a954a;p=clo
diff --git a/src/libclo/index.ts b/src/libclo/index.ts
index 917cf68..b9c3b09 100644
--- a/src/libclo/index.ts
+++ b/src/libclo/index.ts
@@ -1,7 +1,14 @@
-import { isKeyObject, isStringObject } from "util/types";
+import { isBoxedPrimitive, isKeyObject, isStringObject } from "util/types";
import {tkTree} from "../parser";
-import {FontStyle, TextStyle, TextWeight} from "../canva";
+import {FontStyle, TextStyle, TextWeight, fontStyleTofont} from "../canva";
import { JSDOM } from "jsdom";
+import * as fontkit from "fontkit";
+import * as util from "node:util";
+import * as breakLines from "./breakLines";
+import "pdfkit";
+import PDFKitPage from "pdfkit/js/page";
+import { ColorTypes, PDFDocument, rgb } from "pdf-lib";
+import * as fs from "fs";
/**
* TYPES
@@ -20,6 +27,21 @@ export enum Direction{
BTT,
}
+/**
+ * Horizonal glue.
+ * - stretchFactor : the stretch factor in float
+ */
+export interface HGlue{
+ stretchFactor: number
+}
+
+export interface BreakPoint{
+ original : BoxesItem,
+ newLined : BoxesItem
+}
+
+export type BoxesItem = HGlue | Box | BreakPoint | BoxesItem[] ;
+
/**
* frame box is a subclass of box
* - directionInsideLine : text direction inside a line
@@ -30,13 +52,21 @@ export interface FrameBox extends Box{
baseLineskip : number | null,
}
+export interface CharBox extends Box{
+ minX: number,
+ maxX: number,
+ minY: number,
+ maxY: number,
+
+}
+
/**
* a basic Box
* - x :
* - y :
* - textStyle :
* - direction :
- * - width :
+ * - width : x_advance
* - content :
*/
export interface Box{
@@ -188,7 +218,8 @@ export function spacesToBreakpoint(arr : tkTree, clo : Clo) : tkTree{
for (let i = 0; i < arr.length; i++){
var item = arr[i];
if (!Array.isArray(item) && item.match(spacePattern)){
- result.push([ 'bp', item, "" ]); // push a newline command to the result `tkTree`
+ // push a breakpoint command to the result `tkTree`
+ result.push([ 'bp', [["hglue", "0.1"], item] , "" ]);
}
else{
result.push(item);
@@ -257,45 +288,92 @@ export function hyphenTkTree(arr : tkTree, lang: string) : tkTree{
* @param preprocessed
* @param defaultFontStyle
*/
-export function calculateTextWidthHeight(preprocessed : tkTree, style : TextStyle): void {
- var dom = new JSDOM(`
- `);
+export async function calculateTextWidthHeight(element : tkTree, style : TextStyle): Promise {
+ var res = [];
- try {
- let canvas = dom.window.document.getElementById("canvas");
- console.log(canvas);
-
- /*if (!(canvas instanceof HTMLElement)){
- throw new Error('the