nehan
Version:
Html layout engine for paged-media written in Typescript
34 lines • 1.34 kB
JavaScript
import { Config, LogicalTextNode, LogicalInlineNode, } from './public-api';
export class LogicalTextJustifier {
constructor() { }
getJustifyTargetChars(children) {
return children.reduce((chars, child) => {
if (child instanceof LogicalTextNode) {
return chars.concat(child.children);
}
if (child instanceof LogicalInlineNode) {
return chars.concat(this.getJustifyTargetChars(child.children));
}
return chars;
}, []).slice(0, -1);
}
justify(line) {
const minJustifySpaceSize = line.env.font.size / 4;
const maxJustifySpaceSize = line.env.font.size;
const spaceSize = line.size.measure - line.autoSize.measure;
if (spaceSize < minJustifySpaceSize || spaceSize > maxJustifySpaceSize) {
return;
}
const targetChars = this.getJustifyTargetChars(line.children);
if (targetChars.length <= 1) {
return;
}
const charSpacingSize = spaceSize / targetChars.length;
if (charSpacingSize >= Config.maxJustifyGap) {
return;
}
targetChars.forEach(char => char.spacing = charSpacingSize);
}
}
LogicalTextJustifier.instance = new LogicalTextJustifier();
//# sourceMappingURL=logical-text-justifier.js.map