Code extractor and syntax highlighter
LLM answers bury code inside prose, and copying it out by hand — getting the fences right, picking the file name — is tedious. This tool takes a full markdown response, finds every fenced code block, reads or infers its language, and lays each one out with its own copy and download buttons so you can pull the code straight into your editor.
How it works
The parser walks the markdown looking for fence delimiters — triple backticks or
triple tildes — and captures everything between an opening and matching closing
fence as one block. If the opening fence carries a language tag such as ts or
python, that tag is used directly. When there is no tag, a lightweight
heuristic inspects the code for language-specific keywords and structure (Python’s def/import,
JavaScript’s const/=>, SQL’s SELECT, shell prompts, JSON braces) and assigns
the most likely language. Each block then renders in a monospace panel with a
copy button (wrapped so it never throws on a denied clipboard) and a download
button that maps the language to the right file extension.
Language detection heuristics
When a code block has no language tag, the extractor scans for marker patterns in this order:
| Signal | Detected language |
|---|---|
Starts with SELECT, INSERT, UPDATE, CREATE TABLE | SQL |
Contains def , import , print(, if __name__ | Python |
Contains function, const, let, =>, require( | JavaScript |
Contains interface, type , : string, : number | TypeScript |
Contains package main, func , := | Go |
Contains fn , let mut, impl , pub struct | Rust |
Starts with #!, $ , contains echo, fi, ;; | Shell/Bash |
Starts and ends with { / } with quoted keys | JSON |
Contains <html, <div, <span | HTML |
Contains class, public static void, System.out | Java |
The first matching pattern wins. If no pattern matches, the block is labelled text and saved with a .txt extension.
Common extraction scenarios
Multiple code blocks from one answer — LLMs often return several related files in one response: a configuration file, a main script, and a test. Each block is extracted independently with its own language label and download button, so you can save all three without re-copying.
Markdown-wrapped JSON — Model responses often include JSON inside a code fence even when the surrounding text is prose. The extractor captures the JSON block cleanly, and the download button saves it as .json with the correct MIME type.
SQL from a data analysis response — A model explaining a query often embeds the SQL in a block without a tag. The SELECT/FROM pattern catches most cases and saves as .sql.
Mixed shell and config — A deployment tutorial might include a bash script block and a YAML config block. Each is saved with its own extension (deploy.sh, config.yaml).
What the tool does not do
The extractor does not execute code — it extracts and presents. If you want to run a Python snippet, download it and run it in your local environment. The tool also does not detect language from inline code spans (like this) — only fenced blocks with three or more backticks or tildes are extracted.
Tips and notes
- Untagged blocks still work. Even if the model forgot the language tag, the detected language drives a sensible download extension.
- Multiple blocks, multiple files. Each block is independent — extract a Dockerfile, a script, and a config from one answer without re-copying.
- Clipboard is best-effort. On non-HTTPS pages the browser may block clipboard access; the copy button fails gracefully and you can still download.
- Everything is local. No code leaves your browser.
- Tilde fences work too. Some markdown flavors use
~~~instead of backticks; the parser handles both interchangeably.