File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -68,10 +68,28 @@ jobs:
6868 if git show-ref --verify --quiet "refs/tags/${version}"; then
6969 mkdir -p "fern/versions/${version}-content"
7070 git archive "refs/tags/${version}" -- docs/ | tar -x --strip-components=1 -C "fern/versions/${version}-content"
71- find "fern/versions/${version}-content" -name '*.md' -print0 | xargs -0 sed -i \
72- -e 's/{/\\{/g' \
73- -e 's/}/\\}/g' \
74- -e 's/</\</g'
71+ # Escape {, }, < for MDX — but only outside fenced code blocks and inline code spans
72+ find "fern/versions/${version}-content" -name '*.md' -print0 | while IFS= read -r -d '' f; do
73+ awk '
74+ /^````*/ || /^~~~~*/ { fence = !fence; print; next }
75+ fence { print; next }
76+ {
77+ n = split($0, p, "`")
78+ out = ""
79+ for (i = 1; i <= n; i++) {
80+ if (i % 2 == 1) {
81+ gsub(/{/, "\\{", p[i])
82+ gsub(/}/, "\\}", p[i])
83+ gsub(/</, "\\<", p[i])
84+ }
85+ out = out p[i]
86+ if (i < n) out = out "`"
87+ }
88+ print out
89+ }
90+ ' "$f" > "${f}.tmp" && mv "${f}.tmp" "$f"
91+ done
92+ tools/check-docs-mdx-parse "fern/versions/${version}-content"
7593 echo "Extracted docs from $version"
7694 else
7795 echo "::warning::Tag $version not found — skipping content checkout"
Original file line number Diff line number Diff line change @@ -184,14 +184,28 @@ jobs:
184184 if git show-ref --verify --quiet "refs/tags/${version}"; then
185185 mkdir -p "fern/versions/${version}-content"
186186 git archive "refs/tags/${version}" -- docs/ | tar -x --strip-components=1 -C "fern/versions/${version}-content"
187- # Sanitize frozen markdown for Fern's MDX parser.
188- # Versioned content gets strict MDX parsing; escape all bare
189- # { } and < so nothing is interpreted as JSX. Markdown renders
190- # < as < and \{ as { so the output is visually identical.
191- find "fern/versions/${version}-content" -name '*.md' -print0 | xargs -0 sed -i \
192- -e 's/{/\\{/g' \
193- -e 's/}/\\}/g' \
194- -e 's/</\</g'
187+ # Escape {, }, < for MDX — but only outside fenced code blocks and inline code spans
188+ find "fern/versions/${version}-content" -name '*.md' -print0 | while IFS= read -r -d '' f; do
189+ awk '
190+ /^````*/ || /^~~~~*/ { fence = !fence; print; next }
191+ fence { print; next }
192+ {
193+ n = split($0, p, "`")
194+ out = ""
195+ for (i = 1; i <= n; i++) {
196+ if (i % 2 == 1) {
197+ gsub(/{/, "\\{", p[i])
198+ gsub(/}/, "\\}", p[i])
199+ gsub(/</, "\\<", p[i])
200+ }
201+ out = out p[i]
202+ if (i < n) out = out "`"
203+ }
204+ print out
205+ }
206+ ' "$f" > "${f}.tmp" && mv "${f}.tmp" "$f"
207+ done
208+ tools/check-docs-mdx-parse "fern/versions/${version}-content"
195209 echo "Extracted docs from $version"
196210 else
197211 echo "::error::Tag $version not found — cannot pin frozen docs content"
You can’t perform that action at this time.
0 commit comments