* Algorithms and functions for LineBreaking
*/
import { join } from "path";
-import {BreakPoint, BoxesItem, HGlue} from "./index.js";
+import {BreakPoint, BoxesItem, HGlue, CharBox} from "./index.js";
import { listenerCount } from "process";
import { unwatchFile } from "fs";
/**
return item.width;
}
}
-
+
+ /**segement node of one paragraph into lines.
+ * @args items: nodes of a line
+ * @args linewidth: the line width
+ * @returns segmented nodes into lines
+ */
segmentedNodes(items : BoxesItem[], lineWidth : number) : BoxesItem[][]{
- let lineWidthFixed = lineWidth * 0.75;
+
+ let lineWidthFixed = lineWidth;
this.totalCost(items ,lineWidthFixed);
let nodeList = this.generateBreakLineNodeList();
- console.log("~~~", nodeList);
let res = [];
let low = -1;
let up = nodeList[0];
up = nodeList[i+1];
}
- console.log("===", res.length);
+
+
return res;
}
* check all the total cost of paragraphes of the segnemt
*/
totalCost(items : BoxesItem[], lineWidth: number) : number{
-
+ let lineWidthFixed = lineWidth * 0.75;
let itemsLength = items.length;
this.lineCostStorage = Array(itemsLength);
this.prevNodes = Array(itemsLength).fill(null);
}
this.totalCostAuxStorage = Array(itemsLength).fill(null);
- let a = this.totalCostAux(items, itemsLength-1, lineWidth);
+
+ let a = Infinity;
+ for(var k=itemsLength-2; this.lineCost(items, k+1,itemsLength-1, lineWidthFixed) < Infinity; k--){
+
+ let tmp = this.totalCostAux(items, k, lineWidthFixed);
+
+ if (a > tmp){
+ this.prevNodes[itemsLength-1] = k
+ a = tmp;
+ }
+
+ }
return a;
}
let rawLineCost = this.lineCost(items, 0, j, lineWidth);
if (rawLineCost != Infinity){
- this.totalCostAuxStorage[j] = rawLineCost;
- return rawLineCost;
+ this.totalCostAuxStorage[j] = rawLineCost**3.0;
+ return rawLineCost**3.0;
}else{
var returnCost = Infinity;
for(var k=0; k<j; k++){
- let tmp = this.totalCostAux(items, k, lineWidth) + this.lineCost(items, k+1,j, lineWidth);
+ let tmp = this.totalCostAux(items, k, lineWidth) + this.lineCost(items, k+1,j, lineWidth)**3.0;
if (returnCost > tmp){
this.prevNodes[j] = k;
returnCost = tmp;
}
- return returnCost;
}
* @param lineWidth line width
*/
lineCost(items : BoxesItem[], i : number, j : number, lineWidth: number) : number{
- if (this.lineCostStorage[i] !== null && this.lineCostStorage[i][j] !== null){
+ if (this.lineCostStorage[i][j] !== null){
+ console.log("AA")
return this.lineCostStorage[i][j];
}
this.lineCostStorage[i][j] = Infinity;
return Infinity;
}else{
- let returnValue = (lineWidth - tmpItemWidth)**3.0;
+ let returnValue = (lineWidth - tmpItemWidth);
this.lineCostStorage[i][j] = returnValue;
return returnValue;
}