Files
il/resources/public/js/cljs-runtime/module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$utils$bitmapTextSplit.js
2026-07-01 22:38:29 -06:00

40 lines
2.8 KiB
JavaScript

shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$utils$bitmapTextSplit = function(global, require, module, exports) {
var Container = require("module$node_modules$pixi_DOT_js$lib$scene$container$Container"), CanvasTextMetrics = require("module$node_modules$pixi_DOT_js$lib$scene$text$canvas$CanvasTextMetrics"), BitmapFontManager = require("module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$BitmapFontManager"), BitmapText = require("module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$BitmapText"), getBitmapTextLayout = require("module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$utils$getBitmapTextLayout");
"use strict";
exports.bitmapTextSplit = function(options) {
const {text, style, chars:existingChars} = options;
options = BitmapFontManager.BitmapFontManager.getFont(text, style);
var segments = CanvasTextMetrics.CanvasTextMetrics.graphemeSegmenter(text), layout = getBitmapTextLayout.getBitmapTextLayout(segments, style, options, !0);
segments = layout.scale;
const chars = [], words = [], lines = [], lineHeight = style.lineHeight ? style.lineHeight : options.lineHeight * segments;
let yOffset = 0;
for (const line of layout.lines) {
if (0 === line.chars.length) {
continue;
}
layout = new Container.Container({label:"line"});
layout.y = yOffset;
lines.push(layout);
let currentWordContainer = new Container.Container({label:"word"}), currentWordStartIndex = 0;
for (let i = 0; i < line.chars.length; i++) {
const char = line.chars[i];
if (!char) {
continue;
}
if (!options.chars[char]) {
continue;
}
const isSpace = " " === char, isLastChar = i === line.chars.length - 1;
let charInstance;
0 < existingChars.length ? (charInstance = existingChars.shift(), charInstance.text = char, charInstance.style = style, charInstance.label = `char-${char}`, charInstance.x = line.charPositions[i] * segments - line.charPositions[currentWordStartIndex] * segments) : charInstance = new BitmapText.BitmapText({text:char, style, label:`char-${char}`, x:line.charPositions[i] * segments - line.charPositions[currentWordStartIndex] * segments});
isSpace || (chars.push(charInstance), currentWordContainer.addChild(charInstance));
(isSpace || isLastChar) && 0 < currentWordContainer.children.length && (currentWordContainer.x = line.charPositions[currentWordStartIndex] * segments, words.push(currentWordContainer), layout.addChild(currentWordContainer), currentWordContainer = new Container.Container({label:"word"}), currentWordStartIndex = i + 1);
}
yOffset += lineHeight;
}
return {chars, lines, words};
};
};
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$text_bitmap$utils$bitmapTextSplit.js.map