#!/bin/bash # Processes the MDN HTML element docs for rustdoc inclusion. set -euxo pipefail # delete existing processed files find * -maxdepth 0 ! -name 'README.md' ! -name 'LICENSE' ! -name 'process.sh' -type f -exec rm -f {} + # incredibly ugly regex but gets the job done (mostly, hopefully) reg=$(cat <<'EOF' s/^---.*?---//ms; s/^(##|.+?)\]\(\/(?.*?)\)/[$+{n}](https:\/\/developer.mozilla.org\/$+{s})/gs; s/\{\{\s*(HTMLRef|Specifications|Compat|non-standard_header|SeeCompatTable|EmbedInteractiveExample.*?|EmbedLiveSample.*?)\s*\}\}//gis; s/\{\{\s*(Glossary|anch|CSSxref)\s*\(\s*(.*?,)?\s*['"](?.+?)['"]\s*\)\s*\}\}/$+{s}/gis; s/\{\{\s*(htmlattrxref|HTMLAttrDef|HTTPHeader|HTTPMethod|domxref|ARIARole|Event)\s*\(\s*['"](?.+?)['"]\s*\)\s*\}\}/`$+{s}`/gis; s/\{\{\s*(HTMLElement)\s*\(\s*['"](?.+?)['"]\s*\)\s*\}\}/[`$+{s}`]($+{s}!)/gis; # code blocks get interpreted as rust code by cargo test, so tag them with ignore s/```\n(.*?)\n```/```ignore\n$1\n```/gs; s/\{\{\s*(HTMLSidebar)\s*\}\}//gis; s/\{\{\s*(Deprecated_Header)\s*\}\}/# Deprecated/gis; s/\{\{\s*(Deprecated_inline)\s*\}\}/*(deprecated)*/gis; s/^\n+//s; s/\n+$/\n/s; s/\n\n\n+/\n\n/gms; EOF ) # rewrite files for path in content/files/en-us/web/html/element/*/index.md; do perl -0777pe "$reg" "$path" > "$(basename $(dirname "$path")).md" done # copy heading elements h_all="heading_elements.md" cp "$h_all" "h1.md" cp "$h_all" "h2.md" cp "$h_all" "h3.md" cp "$h_all" "h4.md" cp "$h_all" "h5.md" cp "$h_all" "h6.md" echo "Done processing!"