Feat/embedded fonts (#2174)
* #239 Embedded fonts * Add boilerplate for font table * Fix linting * Fix linting * Fix odttf naming * Correct writing of fonts to relationships and font table new uuid function * Add font to run * Add demo Fix tests * Add character set support * Add tests * Write tests
This commit is contained in:
44
src/file/fonts/font-table.ts
Normal file
44
src/file/fonts/font-table.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import { BuilderElement, XmlComponent } from "@file/xml-components";
|
||||
|
||||
import { createRegularFont } from "./create-regular-font";
|
||||
import { FontOptionsWithKey } from "./font-wrapper";
|
||||
import { CharacterSet } from "./font";
|
||||
|
||||
// <xsd:complexType name="CT_FontsList">
|
||||
// <xsd:sequence>
|
||||
// <xsd:element name="font" type="CT_Font" minOccurs="0" maxOccurs="unbounded"/>
|
||||
// </xsd:sequence>
|
||||
// </xsd:complexType>
|
||||
|
||||
export type FontOptions = {
|
||||
readonly name: string;
|
||||
readonly data: Buffer;
|
||||
readonly characterSet?: (typeof CharacterSet)[keyof typeof CharacterSet];
|
||||
};
|
||||
|
||||
export const createFontTable = (fonts: readonly FontOptionsWithKey[]): XmlComponent =>
|
||||
// https://c-rex.net/projects/samples/ooxml/e1/Part4/OOXML_P4_DOCX_Font_topic_ID0ERNCU.html
|
||||
// http://www.datypic.com/sc/ooxml/e-w_fonts.html
|
||||
new BuilderElement({
|
||||
name: "w:fonts",
|
||||
attributes: {
|
||||
mc: { key: "xmlns:mc", value: "http://schemas.openxmlformats.org/markup-compatibility/2006" },
|
||||
r: { key: "xmlns:r", value: "http://schemas.openxmlformats.org/officeDocument/2006/relationships" },
|
||||
w: { key: "xmlns:w", value: "http://schemas.openxmlformats.org/wordprocessingml/2006/main" },
|
||||
w14: { key: "xmlns:w14", value: "http://schemas.microsoft.com/office/word/2010/wordml" },
|
||||
w15: { key: "xmlns:w15", value: "http://schemas.microsoft.com/office/word/2012/wordml" },
|
||||
w16cex: { key: "xmlns:w16cex", value: "http://schemas.microsoft.com/office/word/2018/wordml/cex" },
|
||||
w16cid: { key: "xmlns:w16cid", value: "http://schemas.microsoft.com/office/word/2016/wordml/cid" },
|
||||
w16: { key: "xmlns:w16", value: "http://schemas.microsoft.com/office/word/2018/wordml" },
|
||||
w16sdtdh: { key: "xmlns:w16sdtdh", value: "http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" },
|
||||
w16se: { key: "xmlns:w16se", value: "http://schemas.microsoft.com/office/word/2015/wordml/symex" },
|
||||
Ignorable: { key: "mc:Ignorable", value: "w14 w15 w16se w16cid w16 w16cex w16sdtdh" },
|
||||
},
|
||||
children: fonts.map((font, i) =>
|
||||
createRegularFont({
|
||||
name: font.name,
|
||||
index: i + 1,
|
||||
fontKey: font.fontKey,
|
||||
}),
|
||||
),
|
||||
});
|
Reference in New Issue
Block a user