Better treatment of embedded conversion
This commit is contained in:
parent
4e5e64f0a6
commit
a8b300e57d
|
@ -282,7 +282,7 @@ export class Reader extends ReaderBase<never> {
|
||||||
|
|
||||||
export interface AsPreservesOptions<T extends Embeddable> {
|
export interface AsPreservesOptions<T extends Embeddable> {
|
||||||
onGroup?: (g: Positioned<Group>) => Value<T>;
|
onGroup?: (g: Positioned<Group>) => Value<T>;
|
||||||
onEmbedded?: (v: Value<T>) => Value<T>;
|
onEmbedded?: (e: Positioned<Expr>, walk: (p: Positioned<Expr>) => Value<T>) => Value<T>;
|
||||||
error?: (tag: string, position: Position) => Value<T>;
|
error?: (tag: string, position: Position) => Value<T>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,9 +302,8 @@ export function asPreserves<T extends Embeddable>(
|
||||||
if (p.item instanceof Punct) {
|
if (p.item instanceof Punct) {
|
||||||
return error('invalid-punctuation', p.position);
|
return error('invalid-punctuation', p.position);
|
||||||
} else if (p.item instanceof Embedded) {
|
} else if (p.item instanceof Embedded) {
|
||||||
const e = walk({ position: p.position, item: p.item.expr });
|
|
||||||
if (options.onEmbedded) {
|
if (options.onEmbedded) {
|
||||||
return options.onEmbedded(e);
|
return options.onEmbedded({ position: p.position, item: p.item.expr }, walk);
|
||||||
} else {
|
} else {
|
||||||
return error('unexpected-embedded', p.position);
|
return error('unexpected-embedded', p.position);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue