27 lines
1.0 KiB
TypeScript
27 lines
1.0 KiB
TypeScript
import { parsePresentationProfileJson, type PresentationProfileData } from './profileJson'
|
|
|
|
export function readPresentationProfileData(jsonTag: string | undefined, content: string): PresentationProfileData | null {
|
|
if (jsonTag) {
|
|
return parsePresentationProfileJson(jsonTag)
|
|
}
|
|
|
|
// Backward compatibility: invisible format (with zero-width characters)
|
|
const invisibleJsonMatch = content.match(/[\u200B\u200C]\[Metadata JSON\][\u200B\u200C]\n[\u200B\u200C](.+)[\u200B\u200C]$/s)
|
|
if (invisibleJsonMatch?.[1]) {
|
|
try {
|
|
const cleanedJson = invisibleJsonMatch[1].replace(/[\u200B\u200C\u200D\u200E\u200F]/g, '').trim()
|
|
return parsePresentationProfileJson(cleanedJson)
|
|
} catch (invisibleJsonError) {
|
|
console.error('Error parsing profile JSON from invisible content:', invisibleJsonError)
|
|
}
|
|
}
|
|
|
|
// Backward compatibility: visible format
|
|
const jsonMatch = content.match(/\[Metadata JSON\]\n(.+)$/s)
|
|
if (jsonMatch?.[1]) {
|
|
return parsePresentationProfileJson(jsonMatch[1].trim())
|
|
}
|
|
|
|
return null
|
|
}
|