| import { getTextContent } from '../helpers.js' |
|
|
| export function getStyle(element, ancestors, previousStyle = {}) { |
| const elAttributes = element.attribs || {} |
| const color = |
| elAttributes.mathcolor || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.color |
| )?.attribs.color || |
| '' |
| |
| |
| const size = |
| elAttributes.mathsize || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.mathsize |
| )?.attribs.mathsize || |
| '' |
| const scriptlevel = |
| elAttributes.scriptlevel || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.scriptlevel |
| )?.attribs.scriptlevel || |
| '' |
| const background = |
| elAttributes.mathbackground || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.mathbackground |
| )?.attribs.mathbackground || |
| '' |
| let variant = |
| elAttributes.mathvariant || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.mathvariant |
| )?.attribs.mathvariant || |
| '' |
| if (variant === 'b-i') { |
| variant = 'bold-italic' |
| } |
| const fontweight = |
| elAttributes.fontweight || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.fontweight |
| )?.attribs.fontweight || |
| '' |
| if (fontweight === 'bold' && !['bold', 'bold-italic'].includes(variant)) { |
| if (variant.includes('italic')) { |
| variant = 'bold-italic' |
| } else { |
| variant = 'bold' |
| } |
| } else if (fontweight === 'normal' && ['bold', 'bold-italic'].includes(variant)) { |
| if (variant.includes('italic')) { |
| variant = 'italic' |
| } else { |
| variant = '' |
| } |
| } |
| const fontstyle = |
| elAttributes.fontstyle || |
| ancestors.find( |
| (element) => element.name === 'mstyle' && element.attribs && element.attribs.fontstyle |
| )?.attribs.fontstyle || |
| '' |
| if (fontstyle === 'italic' && !['italic', 'bold-italic'].includes(variant)) { |
| if (variant.includes('bold')) { |
| variant = 'bold-italic' |
| } else { |
| variant = 'italic' |
| } |
| } else if (fontstyle === 'normal' && ['italic', 'bold-italic'].includes(variant)) { |
| if (variant.includes('bold')) { |
| variant = 'bold' |
| } else { |
| variant = '' |
| } |
| } |
| |
| if (!elAttributes.mathvariant) { |
| const textContent = getTextContent(element) |
| if ( |
| previousStyle.variant === '' && |
| ((element.name === 'mi' && textContent.length > 1) || |
| (element.name === 'mn' && !/^\d+\.\d+$/.test(textContent))) |
| ) { |
| variant = '' |
| } else if ( |
| ['mi', 'mn', 'mo'].includes(element.name) && |
| ['italic', 'bold-italic'].includes(previousStyle.variant) |
| ) { |
| if (fontweight === 'bold') { |
| variant = 'bold-italic' |
| } else { |
| variant = 'italic' |
| } |
| } |
| } |
|
|
| return { |
| color, |
| variant, |
| size, |
| scriptlevel, |
| background, |
| fontstyle |
| } |
| } |
|
|