| OLD | NEW |
| (Empty) |
| 1 # Markdown is broken | |
| 2 | |
| 3 I have a lot of scraps of markdown engine oddities that I've collected over the | |
| 4 years. What you see below is slightly messy, but it's what I've managed to | |
| 5 cobble together to illustrate the differences between markdown engines, and | |
| 6 why, if there ever is a markdown specification, it has to be absolutely | |
| 7 thorough. There are a lot more of these little differences I have documented | |
| 8 elsewhere. I know I will find them lingering on my disk one day, but until | |
| 9 then, I'll continue to add whatever strange nonsensical things I find. | |
| 10 | |
| 11 Some of these examples may only mention a particular engine compared to marked. | |
| 12 However, the examples with markdown.pl could easily be swapped out for | |
| 13 discount, upskirt, or markdown.js, and you would very easily see even more | |
| 14 inconsistencies. | |
| 15 | |
| 16 A lot of this was written when I was very unsatisfied with the inconsistencies | |
| 17 between markdown engines. Please excuse the frustration noticeable in my | |
| 18 writing. | |
| 19 | |
| 20 ## Examples of markdown's "stupid" list parsing | |
| 21 | |
| 22 ``` | |
| 23 $ markdown.pl | |
| 24 | |
| 25 * item1 | |
| 26 | |
| 27 * item2 | |
| 28 | |
| 29 text | |
| 30 ^D | |
| 31 <ul> | |
| 32 <li><p>item1</p> | |
| 33 | |
| 34 <ul> | |
| 35 <li>item2</li> | |
| 36 </ul> | |
| 37 | |
| 38 <p><p>text</p></li> | |
| 39 </ul></p> | |
| 40 ``` | |
| 41 | |
| 42 | |
| 43 ``` | |
| 44 $ marked | |
| 45 * item1 | |
| 46 | |
| 47 * item2 | |
| 48 | |
| 49 text | |
| 50 ^D | |
| 51 <ul> | |
| 52 <li><p>item1</p> | |
| 53 <ul> | |
| 54 <li>item2</li> | |
| 55 </ul> | |
| 56 <p>text</p> | |
| 57 </li> | |
| 58 </ul> | |
| 59 ``` | |
| 60 | |
| 61 Which looks correct to you? | |
| 62 | |
| 63 - - - | |
| 64 | |
| 65 ``` | |
| 66 $ markdown.pl | |
| 67 * hello | |
| 68 > world | |
| 69 ^D | |
| 70 <p><ul> | |
| 71 <li>hello</p> | |
| 72 | |
| 73 <blockquote> | |
| 74 <p>world</li> | |
| 75 </ul></p> | |
| 76 </blockquote> | |
| 77 ``` | |
| 78 | |
| 79 ``` | |
| 80 $ marked | |
| 81 * hello | |
| 82 > world | |
| 83 ^D | |
| 84 <ul> | |
| 85 <li>hello<blockquote> | |
| 86 <p>world</p> | |
| 87 </blockquote> | |
| 88 </li> | |
| 89 </ul> | |
| 90 ``` | |
| 91 | |
| 92 Again, which looks correct to you? | |
| 93 | |
| 94 - - - | |
| 95 | |
| 96 EXAMPLE: | |
| 97 | |
| 98 ``` | |
| 99 $ markdown.pl | |
| 100 * hello | |
| 101 * world | |
| 102 * hi | |
| 103 code | |
| 104 ^D | |
| 105 <ul> | |
| 106 <li>hello | |
| 107 <ul> | |
| 108 <li>world</li> | |
| 109 <li>hi | |
| 110 code</li> | |
| 111 </ul></li> | |
| 112 </ul> | |
| 113 ``` | |
| 114 | |
| 115 The code isn't a code block even though it's after the bullet margin. I know, | |
| 116 lets give it two more spaces, effectively making it 8 spaces past the bullet. | |
| 117 | |
| 118 ``` | |
| 119 $ markdown.pl | |
| 120 * hello | |
| 121 * world | |
| 122 * hi | |
| 123 code | |
| 124 ^D | |
| 125 <ul> | |
| 126 <li>hello | |
| 127 <ul> | |
| 128 <li>world</li> | |
| 129 <li>hi | |
| 130 code</li> | |
| 131 </ul></li> | |
| 132 </ul> | |
| 133 ``` | |
| 134 | |
| 135 And, it's still not a code block. Did you also notice that the 3rd item isn't | |
| 136 even its own list? Markdown screws that up too because of its indentation | |
| 137 unaware parsing. | |
| 138 | |
| 139 - - - | |
| 140 | |
| 141 Let's look at some more examples of markdown's list parsing: | |
| 142 | |
| 143 ``` | |
| 144 $ markdown.pl | |
| 145 | |
| 146 * item1 | |
| 147 | |
| 148 * item2 | |
| 149 | |
| 150 text | |
| 151 ^D | |
| 152 <ul> | |
| 153 <li><p>item1</p> | |
| 154 | |
| 155 <ul> | |
| 156 <li>item2</li> | |
| 157 </ul> | |
| 158 | |
| 159 <p><p>text</p></li> | |
| 160 </ul></p> | |
| 161 ``` | |
| 162 | |
| 163 Misnested tags. | |
| 164 | |
| 165 | |
| 166 ``` | |
| 167 $ marked | |
| 168 * item1 | |
| 169 | |
| 170 * item2 | |
| 171 | |
| 172 text | |
| 173 ^D | |
| 174 <ul> | |
| 175 <li><p>item1</p> | |
| 176 <ul> | |
| 177 <li>item2</li> | |
| 178 </ul> | |
| 179 <p>text</p> | |
| 180 </li> | |
| 181 </ul> | |
| 182 ``` | |
| 183 | |
| 184 Which looks correct to you? | |
| 185 | |
| 186 - - - | |
| 187 | |
| 188 ``` | |
| 189 $ markdown.pl | |
| 190 * hello | |
| 191 > world | |
| 192 ^D | |
| 193 <p><ul> | |
| 194 <li>hello</p> | |
| 195 | |
| 196 <blockquote> | |
| 197 <p>world</li> | |
| 198 </ul></p> | |
| 199 </blockquote> | |
| 200 ``` | |
| 201 | |
| 202 More misnested tags. | |
| 203 | |
| 204 | |
| 205 ``` | |
| 206 $ marked | |
| 207 * hello | |
| 208 > world | |
| 209 ^D | |
| 210 <ul> | |
| 211 <li>hello<blockquote> | |
| 212 <p>world</p> | |
| 213 </blockquote> | |
| 214 </li> | |
| 215 </ul> | |
| 216 ``` | |
| 217 | |
| 218 Again, which looks correct to you? | |
| 219 | |
| 220 - - - | |
| 221 | |
| 222 # Why quality matters - Part 2 | |
| 223 | |
| 224 ``` bash | |
| 225 $ markdown.pl | |
| 226 * hello | |
| 227 > world | |
| 228 ^D | |
| 229 <p><ul> | |
| 230 <li>hello</p> | |
| 231 | |
| 232 <blockquote> | |
| 233 <p>world</li> | |
| 234 </ul></p> | |
| 235 </blockquote> | |
| 236 ``` | |
| 237 | |
| 238 ``` bash | |
| 239 $ sundown # upskirt | |
| 240 * hello | |
| 241 > world | |
| 242 ^D | |
| 243 <ul> | |
| 244 <li>hello | |
| 245 > world</li> | |
| 246 </ul> | |
| 247 ``` | |
| 248 | |
| 249 ``` bash | |
| 250 $ marked | |
| 251 * hello | |
| 252 > world | |
| 253 ^D | |
| 254 <ul><li>hello <blockquote><p>world</p></blockquote></li></ul> | |
| 255 ``` | |
| 256 | |
| 257 Which looks correct to you? | |
| 258 | |
| 259 - - - | |
| 260 | |
| 261 See: https://github.com/evilstreak/markdown-js/issues/23 | |
| 262 | |
| 263 ``` bash | |
| 264 $ markdown.pl # upskirt/markdown.js/discount | |
| 265 * hello | |
| 266 var a = 1; | |
| 267 * world | |
| 268 ^D | |
| 269 <ul> | |
| 270 <li>hello | |
| 271 var a = 1;</li> | |
| 272 <li>world</li> | |
| 273 </ul> | |
| 274 ``` | |
| 275 | |
| 276 ``` bash | |
| 277 $ marked | |
| 278 * hello | |
| 279 var a = 1; | |
| 280 * world | |
| 281 ^D | |
| 282 <ul><li>hello | |
| 283 <pre>code>var a = 1;</code></pre></li> | |
| 284 <li>world</li></ul> | |
| 285 ``` | |
| 286 | |
| 287 Which looks more reasonable? Why shouldn't code blocks be able to appear in | |
| 288 list items in a sane way? | |
| 289 | |
| 290 - - - | |
| 291 | |
| 292 ``` bash | |
| 293 $ markdown.js | |
| 294 <div>hello</div> | |
| 295 | |
| 296 <span>hello</span> | |
| 297 ^D | |
| 298 <p><div>hello</div></p> | |
| 299 | |
| 300 <p><span>hello</span></p> | |
| 301 ``` | |
| 302 | |
| 303 ``` bash | |
| 304 $ marked | |
| 305 <div>hello</div> | |
| 306 | |
| 307 <span>hello</span> | |
| 308 ^D | |
| 309 <div>hello</div> | |
| 310 | |
| 311 | |
| 312 <p><span>hello</span> | |
| 313 </p> | |
| 314 ``` | |
| 315 | |
| 316 - - - | |
| 317 | |
| 318 See: https://github.com/evilstreak/markdown-js/issues/27 | |
| 319 | |
| 320 ``` bash | |
| 321 $ markdown.js | |
| 322 [](/link) | |
| 323 ^D | |
| 324 <p><a href="/image)](/link">](/link) | |
| 330 ^D | |
| 331 <p><a href="/link"><img src="/image" alt="an image"></a> | |
| 332 </p> | |
| 333 ``` | |
| 334 | |
| 335 - - - | |
| 336 | |
| 337 See: https://github.com/evilstreak/markdown-js/issues/24 | |
| 338 | |
| 339 ``` bash | |
| 340 $ markdown.js | |
| 341 > a | |
| 342 | |
| 343 > b | |
| 344 | |
| 345 > c | |
| 346 ^D | |
| 347 <blockquote><p>a</p><p>bundefined> c</p></blockquote> | |
| 348 ``` | |
| 349 | |
| 350 ``` bash | |
| 351 $ marked | |
| 352 > a | |
| 353 | |
| 354 > b | |
| 355 | |
| 356 > c | |
| 357 ^D | |
| 358 <blockquote><p>a | |
| 359 | |
| 360 </p></blockquote> | |
| 361 <blockquote><p>b | |
| 362 | |
| 363 </p></blockquote> | |
| 364 <blockquote><p>c | |
| 365 </p></blockquote> | |
| 366 ``` | |
| 367 | |
| 368 - - - | |
| 369 | |
| 370 ``` bash | |
| 371 $ markdown.pl | |
| 372 * hello | |
| 373 * world | |
| 374 how | |
| 375 | |
| 376 are | |
| 377 you | |
| 378 | |
| 379 * today | |
| 380 * hi | |
| 381 ^D | |
| 382 <ul> | |
| 383 <li><p>hello</p> | |
| 384 | |
| 385 <ul> | |
| 386 <li>world | |
| 387 how</li> | |
| 388 </ul> | |
| 389 | |
| 390 <p>are | |
| 391 you</p> | |
| 392 | |
| 393 <ul> | |
| 394 <li>today</li> | |
| 395 </ul></li> | |
| 396 <li>hi</li> | |
| 397 </ul> | |
| 398 ``` | |
| 399 | |
| 400 ``` bash | |
| 401 $ marked | |
| 402 * hello | |
| 403 * world | |
| 404 how | |
| 405 | |
| 406 are | |
| 407 you | |
| 408 | |
| 409 * today | |
| 410 * hi | |
| 411 ^D | |
| 412 <ul> | |
| 413 <li><p>hello</p> | |
| 414 <ul> | |
| 415 <li><p>world | |
| 416 how</p> | |
| 417 <p>are | |
| 418 you</p> | |
| 419 </li> | |
| 420 <li><p>today</p> | |
| 421 </li> | |
| 422 </ul> | |
| 423 </li> | |
| 424 <li>hi</li> | |
| 425 </ul> | |
| 426 ``` | |
| OLD | NEW |