| 1 | ---
 | 
| 2 | in_progress: yes
 | 
| 3 | ---
 | 
| 4 | 
 | 
| 5 | Examples of HTML Plugins
 | 
| 6 | ========================
 | 
| 7 | 
 | 
| 8 | This file is essentially a unit test for [doctools/oils_doc.py]($oils-src), which
 | 
| 9 | contains all the HTML plugins.
 | 
| 10 | 
 | 
| 11 | Related: [How We Build Oils Documentation](doc-toolchain.html).
 | 
| 12 | 
 | 
| 13 | <div id="toc">
 | 
| 14 | </div>
 | 
| 15 | 
 | 
| 16 | ## Link Shortcuts with `$`
 | 
| 17 | 
 | 
| 18 | - `$xref`: [bash]($xref)
 | 
| 19 | - `$blog-tag`: [oil-release]($blog-tag)
 | 
| 20 | - `$oils-src`: [INSTALL.txt]($oils-src), [INSTALL.txt]($oils-src:INSTALL.txt)
 | 
| 21 | - `$blog-code-src`: [interactive-shell/README.md]($blog-code-src)
 | 
| 22 | - `$issue`: [issue 11]($issue:11)
 | 
| 23 | - `$oils-commit`: [this commit]($oils-commit:a1dad10d53b1fb94a164888d9ec277249ae98b58)
 | 
| 24 | 
 | 
| 25 | ## Syntax Highlighting Specified In Front matter
 | 
| 26 | 
 | 
| 27 | If every `pre` block in a document needs the same highlighter, you can specify
 | 
| 28 | it in the front matter like this:
 | 
| 29 | 
 | 
| 30 |     ---
 | 
| 31 |     default_highlighter: oils-sh
 | 
| 32 |     ---
 | 
| 33 | 
 | 
| 34 |     My Title
 | 
| 35 |     ========
 | 
| 36 | 
 | 
| 37 | ## Syntax Highlighting With Fenced Code Blocks
 | 
| 38 | 
 | 
| 39 | ### sh-prompt 
 | 
| 40 | 
 | 
| 41 | Highlights the `$` line.  For example, this input
 | 
| 42 | 
 | 
| 43 |     ```sh-prompt
 | 
| 44 |     $ echo hi   # comment
 | 
| 45 |     hi
 | 
| 46 |     ```
 | 
| 47 | 
 | 
| 48 | produces
 | 
| 49 | 
 | 
| 50 | ```sh-prompt
 | 
| 51 | $ echo hi   # comment
 | 
| 52 | hi
 | 
| 53 | ```
 | 
| 54 | 
 | 
| 55 | ### oils-sh
 | 
| 56 | 
 | 
| 57 | A generic formatter that works for both shell and YSH code.  It's used in
 | 
| 58 | [idioms.html](idioms.html), [known differences](known-differences.html), and is
 | 
| 59 | now the default for the Oils blog.
 | 
| 60 | 
 | 
| 61 | (Detail: it's the same as `sh-prompt` for now.  We might want to do something
 | 
| 62 | smarter.)
 | 
| 63 | 
 | 
| 64 | ### none (Explicit Override)
 | 
| 65 | 
 | 
| 66 | To override the default highlighter with none:
 | 
| 67 | 
 | 
| 68 |     ```none
 | 
| 69 |     $ echo 'no syntax highlighting'
 | 
| 70 |     ```
 | 
| 71 | 
 | 
| 72 | Result:
 | 
| 73 | 
 | 
| 74 | ```none
 | 
| 75 | $ echo 'no syntax highlighting'
 | 
| 76 | ```
 | 
| 77 | 
 | 
| 78 | ### Pygments Lexers
 | 
| 79 | 
 | 
| 80 | Use any pygments lexer:
 | 
| 81 | 
 | 
| 82 |     ```python
 | 
| 83 |     x = 42
 | 
| 84 |     print(x, file=sys.stderr)
 | 
| 85 |     ```
 | 
| 86 | 
 | 
| 87 | produces
 | 
| 88 | 
 | 
| 89 | ```python
 | 
| 90 | x = 42
 | 
| 91 | print(x, file=sys.stderr)
 | 
| 92 | ```
 | 
| 93 | 
 | 
| 94 | ### Plugins We Should Have
 | 
| 95 | 
 | 
| 96 | - ysh and osh.  *A Tour of YSH* could use it to show which code blocks can be
 | 
| 97 |   extracted and run.
 | 
| 98 | - Side-by-side sh and YSH
 | 
| 99 | - Side-by-side PCRE and Eggex
 | 
| 100 | - sh-session - How to replace the data?
 | 
| 101 | 
 | 
| 102 | A shell session could look like this:
 | 
| 103 | 
 | 
| 104 |     ```session-bash
 | 
| 105 |     $ echo one
 | 
| 106 |     one
 | 
| 107 | 
 | 
| 108 |     $ for x in foo bar; do
 | 
| 109 |     >   echo $x
 | 
| 110 |     > done
 | 
| 111 |     foo
 | 
| 112 |     bar
 | 
| 113 |     ```
 | 
| 114 | 
 | 
| 115 | or
 | 
| 116 | 
 | 
| 117 |     ```session-ysh
 | 
| 118 |     $ echo one
 | 
| 119 |     one
 | 
| 120 | 
 | 
| 121 |     $ for x in foo bar {
 | 
| 122 |     >   echo $x
 | 
| 123 |     > }
 | 
| 124 |     foo
 | 
| 125 |     bar
 | 
| 126 |     ```
 | 
| 127 | 
 | 
| 128 | <!--
 | 
| 129 | Workflow:
 | 
| 130 | - You should write this directly in Markdown.  Even the output.  So you know
 | 
| 131 |   what you expect.
 | 
| 132 | - Syntax highlighter:
 | 
| 133 |   - $ and > lines prefixes in bold, with the code in blue
 | 
| 134 |   - the rest of the output in black
 | 
| 135 | - Verifier
 | 
| 136 |   - Will extract:
 | 
| 137 |     1. sequences of lines that begin with $ and continue with >
 | 
| 138 |     2. expected output (not beginning with $ or >)
 | 
| 139 |   - It will run those in a CLEAN working directory, one after the other
 | 
| 140 |     - maybe it inserts 'echo __MAGIC_DELIMITER__ between them?
 | 
| 141 |     - Or you could use the headless shell!  To preserve state!
 | 
| 142 | - And then it will diff the actual output vs. the expected output
 | 
| 143 | 
 | 
| 144 | Another idea: PS2 should lead with the same number of spaces as PS1:
 | 
| 145 | 
 | 
| 146 | ysh$ for x in foo bar {
 | 
| 147 |    .   echo $x
 | 
| 148 |    . }
 | 
| 149 | foo
 | 
| 150 | bar
 | 
| 151 | 
 | 
| 152 | This looks cleaner.
 | 
| 153 | -->
 | 
| 154 | 
 | 
| 155 | Embeddings:
 | 
| 156 | 
 | 
| 157 | - Embed Image Preview of Web Page?
 | 
| 158 | - Embed Github Commit?
 | 
| 159 |   - hashdiv has this for stories
 | 
| 160 | - Graphviz
 | 
| 161 |   - LaTeX (although I don't really use it)
 | 
| 162 | 
 |