mirror of
https://github.com/larvit/adf-codec.git
synced 2026-11-12 11:48:29 +01:00
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import type { AttributeVocabulary } from './attribute-vocabulary.ts'
|
|
|
|
// Marks only a block's marks key holds, so no inline spelling names them.
|
|
export const blockMarkAttributes = {
|
|
alignment: { align: 'string' },
|
|
breakout: { mode: 'string', width: 'number' },
|
|
dataConsumer: { sources: 'json' },
|
|
fragment: { localId: 'string', name: 'string' },
|
|
indentation: { level: 'number' },
|
|
} satisfies Readonly<Record<string, AttributeVocabulary>>
|
|
|
|
export const markAttributes = {
|
|
border: { color: 'string', size: 'number' },
|
|
code: {},
|
|
em: {},
|
|
link: { collection: 'string', href: 'string', id: 'string', occurrenceKey: 'string', title: 'string' },
|
|
strike: {},
|
|
strong: {},
|
|
subsup: { type: 'string' },
|
|
textColor: { color: 'string' },
|
|
underline: {},
|
|
} satisfies Readonly<Record<string, AttributeVocabulary>>
|
|
|
|
const blockMarkVocabularies: ReadonlyMap<string, AttributeVocabulary> = new Map(Object.entries(blockMarkAttributes))
|
|
|
|
export type MarkType = keyof typeof markAttributes
|
|
|
|
export function isMarkType(type: string): type is MarkType {
|
|
return Object.hasOwn(markAttributes, type)
|
|
}
|
|
|
|
export function markVocabulary(type: string): AttributeVocabulary | undefined {
|
|
return isMarkType(type) ? markAttributes[type] : blockMarkVocabularies.get(type)
|
|
}
|