quote-api / utils /quote-generate /text-renderer.js
Quote API Deploy
feat: deploy quote-api to Hugging Face Spaces
2413e0a unverified
Raw
History Blame Contribute Delete
1.65 kB
// utils/quote-generate/text-renderer.js
// Thin wrapper composing prepare → shrink-wrap → render phases.
// Same API as before — zero changes needed in callers.
const { prepareText } = require('./text-prepare')
const { shrinkWrap, getLineDirection } = require('./text-layout')
const { renderText } = require('./text-render')
/**
* Draw multiline text with entity styling, emoji, and automatic layout.
* Uses prepare/layout/render split for shrink-wrapped, balanced output.
*
* @param {string} text - Text to render
* @param {Array|string} entities - Telegram entities or style string
* @param {number} fontSize - Font size in pixels
* @param {string} fontColor - CSS color
* @param {number} textX - X offset (kept for API compat, unused in new architecture)
* @param {number} textY - Y offset (kept for API compat, unused in new architecture)
* @param {number} maxWidth - Maximum width
* @param {number} maxHeight - Maximum height
* @param {string} emojiBrand - Emoji brand
* @param {object} telegram - Telegraf instance
* @returns {Canvas}
*/
async function drawMultilineText (text, entities, fontSize, fontColor, textX, textY, maxWidth, maxHeight, emojiBrand, telegram) {
const prepared = await prepareText(text, entities, fontSize, emojiBrand, telegram)
if (prepared.segments.length === 0) {
const { createCanvas } = require('canvas')
return createCanvas(1, 1)
}
// Use shrink-wrap for multi-line text, plain layout for single-line
const layout = shrinkWrap(prepared, maxWidth, maxHeight)
return renderText(layout, prepared, fontColor)
}
module.exports = { drawMultilineText, getLineDirection }