From de084e030c80bce7dc3aa8ac790427e9b3fd9fcf Mon Sep 17 00:00:00 2001 From: Misode Date: Tue, 29 Oct 2024 04:21:19 +0100 Subject: [PATCH] Escape quotes when editing strings --- src/app/components/generator/McdocRenderer.tsx | 8 ++++---- src/app/services/Spyglass.ts | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app/components/generator/McdocRenderer.tsx b/src/app/components/generator/McdocRenderer.tsx index 241ed984..075b19e4 100644 --- a/src/app/components/generator/McdocRenderer.tsx +++ b/src/app/components/generator/McdocRenderer.tsx @@ -111,12 +111,12 @@ function StringHead({ type, optional, node, makeEdit, ctx }: Props) if ((newValue.length === 0 && optional) || (isSelect && newValue === SPECIAL_UNSET)) { return undefined } + const valueMap = [{ inner: core.Range.create(0), outer: core.Range.create(range.start) }] + const source = new core.Source(JSON.stringify(newValue), valueMap) + const string = core.string(json.parser.JsonStringOptions)(source, ctx) return { + ...string, type: 'json:string', - range, - options: json.parser.JsonStringOptions, - value: newValue, - valueMap: [{ inner: core.Range.create(0), outer: core.Range.create(range.start) }], } }) }, [optional, node, makeEdit, isSelect]) diff --git a/src/app/services/Spyglass.ts b/src/app/services/Spyglass.ts index a9f5b628..7160bf19 100644 --- a/src/app/services/Spyglass.ts +++ b/src/app/services/Spyglass.ts @@ -5,7 +5,7 @@ import type { McmetaSummary } from '@spyglassmc/java-edition/lib/dependency/inde import { Fluids, ReleaseVersion, symbolRegistrar } from '@spyglassmc/java-edition/lib/dependency/index.js' import * as jeJson from '@spyglassmc/java-edition/lib/json/index.js' import * as jeMcf from '@spyglassmc/java-edition/lib/mcfunction/index.js' -import type { JsonFileNode } from '@spyglassmc/json' +import type { JsonFileNode, JsonStringNode } from '@spyglassmc/json' import * as json from '@spyglassmc/json' import { localize } from '@spyglassmc/locales' import * as mcdoc from '@spyglassmc/mcdoc' @@ -322,9 +322,13 @@ const initialize: core.ProjectInitializer = async (ctx) => { jeMcf.initialize(ctx, summary.commands, release) nbt.initialize(ctx) + // Until spyglass registers these correctly meta.registerFormatter('json:file', (node, ctx) => { return ctx.meta.getFormatter(node.children[0].type)(node.children[0], ctx) }) + meta.registerFormatter('json:string', (node) => { + return JSON.stringify(node.value) + }) return { loadedVersion: release } }