40 lines
2.8 KiB
JavaScript
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
|