mirror of
https://github.com/penpot/penpot-exporter-figma-plugin.git
synced 2024-12-22 13:43:03 -05:00
70 lines
2 KiB
TypeScript
70 lines
2 KiB
TypeScript
import {
|
|
transformBlend,
|
|
transformDimensionAndPosition,
|
|
transformSceneNode
|
|
} from '@plugin/transformers/partials';
|
|
import {
|
|
translateFills,
|
|
translateTextDecoration,
|
|
translateTextTransform
|
|
} from '@plugin/translators';
|
|
|
|
import { TextNode as PenpotTextNode } from '@ui/lib/types/text/textContent';
|
|
import { TextShape } from '@ui/lib/types/text/textShape';
|
|
|
|
export const transformTextNode = (node: TextNode, baseX: number, baseY: number): TextShape => {
|
|
const styledTextSegments = node.getStyledTextSegments([
|
|
'fontName',
|
|
'fontSize',
|
|
'fontWeight',
|
|
'lineHeight',
|
|
'letterSpacing',
|
|
'textCase',
|
|
'textDecoration',
|
|
'fills'
|
|
]);
|
|
|
|
const children: PenpotTextNode[] = styledTextSegments.map(segment => {
|
|
figma.ui.postMessage({ type: 'FONT_NAME', data: segment.fontName.family });
|
|
|
|
return {
|
|
text: segment.characters,
|
|
fills: translateFills(segment.fills, node.width, node.height),
|
|
fontFamily: segment.fontName.family,
|
|
fontSize: segment.fontSize.toString(),
|
|
fontStyle: segment.fontName.style,
|
|
fontWeight: segment.fontWeight.toString(),
|
|
textDecoration: translateTextDecoration(segment),
|
|
textTransform: translateTextTransform(segment)
|
|
};
|
|
});
|
|
|
|
return {
|
|
type: 'text',
|
|
name: node.name,
|
|
content: {
|
|
type: 'root',
|
|
children: [
|
|
{
|
|
type: 'paragraph-set',
|
|
children: [
|
|
{
|
|
type: 'paragraph',
|
|
fills: translateFills(node.fills, node.width, node.height),
|
|
fontFamily: children[0].fontFamily,
|
|
fontSize: children[0].fontSize,
|
|
fontStyle: children[0].fontStyle,
|
|
fontWeight: children[0].fontWeight,
|
|
textDecoration: children[0].textDecoration,
|
|
textTransform: children[0].textTransform,
|
|
children: children
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
...transformDimensionAndPosition(node, baseX, baseY),
|
|
...transformSceneNode(node),
|
|
...transformBlend(node)
|
|
};
|
|
};
|