0
Fork 0
mirror of https://github.com/penpot/penpot-exporter-figma-plugin.git synced 2025-01-03 13:20:37 -05:00
penpot-exporter-figma-plugin/plugin-src/translators/text/translateStyleTextSegments.ts
Jordi Sala Morales 5d7263bdbf
Allow rotation for Ellipses and Rectangles (#122)
* Allow rotation for Ellipses, Rectangles and Texts

* undo rotations for texts

* Translate rotations for ellipses and rectangles
2024-05-29 10:30:56 +02:00

53 lines
1.7 KiB
TypeScript

import { translateFills } from '@plugin/translators/fills';
import { translateFontId } from '@plugin/translators/text/font';
import { StyleTextSegment, translateParagraphProperties } from '@plugin/translators/text/paragraph';
import {
translateFontStyle,
translateHorizontalAlign,
translateLetterSpacing,
translateLineHeight,
translateTextDecoration,
translateTextTransform
} from '@plugin/translators/text/properties';
import { TextNode as PenpotTextNode, TextStyle } from '@ui/lib/types/shapes/textShape';
export const translateStyleTextSegments = async (
node: TextNode,
segments: StyleTextSegment[]
): Promise<PenpotTextNode[]> => {
const partials = await Promise.all(
segments.map(async segment => ({
textNode: await translateStyleTextSegment(node, segment),
segment
}))
);
return translateParagraphProperties(node, partials);
};
export const transformTextStyle = (node: TextNode, segment: StyleTextSegment): TextStyle => {
return {
...translateFontId(segment.fontName, segment.fontWeight),
fontFamily: segment.fontName.family,
fontSize: segment.fontSize.toString(),
fontStyle: translateFontStyle(segment.fontName.style),
fontWeight: segment.fontWeight.toString(),
textAlign: translateHorizontalAlign(node.textAlignHorizontal),
textDecoration: translateTextDecoration(segment),
textTransform: translateTextTransform(segment),
letterSpacing: translateLetterSpacing(segment),
lineHeight: translateLineHeight(segment)
};
};
const translateStyleTextSegment = async (
node: TextNode,
segment: StyleTextSegment
): Promise<PenpotTextNode> => {
return {
fills: await translateFills(segment.fills),
text: segment.characters,
...transformTextStyle(node, segment)
};
};