1*8c35d5eeSXin Li# Markdown style guide 2*8c35d5eeSXin Li 3*8c35d5eeSXin LiMuch of what makes Markdown great is the ability to write plain text, and get 4*8c35d5eeSXin Ligreat formatted output as a result. To keep the slate clean for the next author, 5*8c35d5eeSXin Liyour Markdown should be simple and consistent with the whole corpus wherever 6*8c35d5eeSXin Lipossible. 7*8c35d5eeSXin Li 8*8c35d5eeSXin LiWe seek to balance three goals: 9*8c35d5eeSXin Li 10*8c35d5eeSXin Li1. *Source text is readable and portable.* 11*8c35d5eeSXin Li2. *Markdown files are maintainable over time and across teams.* 12*8c35d5eeSXin Li3. *The syntax is simple and easy to remember.* 13*8c35d5eeSXin Li 14*8c35d5eeSXin LiContents: 15*8c35d5eeSXin Li 16*8c35d5eeSXin Li1. [Document layout](#document-layout) 17*8c35d5eeSXin Li1. [Character line limit](#character-line-limit) 18*8c35d5eeSXin Li1. [Trailing whitespace](#trailing-whitespace) 19*8c35d5eeSXin Li1. [Headings](#headings) 20*8c35d5eeSXin Li 1. [ATX-style headings](#atx-style-headings) 21*8c35d5eeSXin Li 1. [Add spacing to headings](#add-spacing-to-headings) 22*8c35d5eeSXin Li1. [Lists](#lists) 23*8c35d5eeSXin Li 1. [Use lazy numbering for long lists](#use-lazy-numbering-for-long-lists) 24*8c35d5eeSXin Li 1. [Nested list spacing](#nested-list-spacing) 25*8c35d5eeSXin Li1. [Code](#code) 26*8c35d5eeSXin Li 1. [Inline](#inline) 27*8c35d5eeSXin Li 1. [Codeblocks](#codeblocks) 28*8c35d5eeSXin Li 1. [Declare the language](#declare-the-language) 29*8c35d5eeSXin Li 1. [Escape newlines](#escape-newlines) 30*8c35d5eeSXin Li 1. [Nest codeblocks within lists](#nest-codeblocks-within-lists) 31*8c35d5eeSXin Li1. [Links](#links) 32*8c35d5eeSXin Li 1. [Use informative Markdown link titles](#use-informative-markdown-link-titles) 33*8c35d5eeSXin Li1. [Images](#images) 34*8c35d5eeSXin Li1. [Prefer lists to tables](#prefer-lists-to-tables) 35*8c35d5eeSXin Li1. [Strongly prefer Markdown to HTML](#strongly-prefer-markdown-to-html) 36*8c35d5eeSXin Li 37*8c35d5eeSXin Li## Document layout 38*8c35d5eeSXin Li 39*8c35d5eeSXin LiIn general, most documents benefit from some variation of the following layout: 40*8c35d5eeSXin Li 41*8c35d5eeSXin Li```markdown 42*8c35d5eeSXin Li# Document Title 43*8c35d5eeSXin Li 44*8c35d5eeSXin LiShort introduction. 45*8c35d5eeSXin Li 46*8c35d5eeSXin Li[TOC] 47*8c35d5eeSXin Li 48*8c35d5eeSXin Li## Topic 49*8c35d5eeSXin Li 50*8c35d5eeSXin LiContent. 51*8c35d5eeSXin Li 52*8c35d5eeSXin Li## See also 53*8c35d5eeSXin Li 54*8c35d5eeSXin Li* https://link-to-more-info 55*8c35d5eeSXin Li``` 56*8c35d5eeSXin Li 57*8c35d5eeSXin Li1. `# Document Title`: The first heading should be a level one heading, and 58*8c35d5eeSXin Li should ideally be the same or nearly the same as the filename. The first 59*8c35d5eeSXin Li level one heading is used as the page `<title>`. 60*8c35d5eeSXin Li 61*8c35d5eeSXin Li1. `author`: *Optional*. If you'd like to claim ownership of the document or 62*8c35d5eeSXin Li if you are very proud of it, add yourself under the title. However, 63*8c35d5eeSXin Li revision history generally suffices. 64*8c35d5eeSXin Li 65*8c35d5eeSXin Li1. `Short introduction.` 1-3 sentences providing a high-level overview of the 66*8c35d5eeSXin Li topic. Imagine yourself as a complete newbie, who landed on your "Extending 67*8c35d5eeSXin Li Foo" doc and needs to know the most basic assumptions you take for granted. 68*8c35d5eeSXin Li "What is Foo? Why would I extend it?" 69*8c35d5eeSXin Li 70*8c35d5eeSXin Li1. `[TOC]`: if you use hosting that supports table of contents, such as Gitiles, 71*8c35d5eeSXin Li put `[TOC]` after the short introduction. See 72*8c35d5eeSXin Li [`[TOC]` documentation](https://gerrit.googlesource.com/gitiles/+/master/Documentation/markdown.md#Table-of-contents). 73*8c35d5eeSXin Li 74*8c35d5eeSXin Li1. `## Topic`: The rest of your headings should start from level 2. 75*8c35d5eeSXin Li 76*8c35d5eeSXin Li1. `## See also`: Put miscellaneous links at the bottom for the user who wants 77*8c35d5eeSXin Li to know more or didn't find what she needed. 78*8c35d5eeSXin Li 79*8c35d5eeSXin Li## Character line limit 80*8c35d5eeSXin Li 81*8c35d5eeSXin LiObey projects' character line limit wherever possible. Long URLs and tables are 82*8c35d5eeSXin Lithe usual suspects when breaking the rule. (Headings also can't be wrapped, but 83*8c35d5eeSXin Liwe encourage keeping them short). Otherwise, wrap your text: 84*8c35d5eeSXin Li 85*8c35d5eeSXin Li```markdown 86*8c35d5eeSXin LiLorem ipsum dolor sit amet, nec eius volumus patrioque cu, nec et commodo 87*8c35d5eeSXin Lihendrerit, id nobis saperet fuisset ius. 88*8c35d5eeSXin Li 89*8c35d5eeSXin Li* Malorum moderatius vim eu. In vix dico persecuti. Te nam saperet percipitur 90*8c35d5eeSXin Li interesset. See the [foo docs](https://gerrit.googlesource.com/gitiles/+/master/Documentation/markdown.md). 91*8c35d5eeSXin Li``` 92*8c35d5eeSXin Li 93*8c35d5eeSXin LiOften, inserting a newline before a long link preserves readability while 94*8c35d5eeSXin Liminimizing the overflow: 95*8c35d5eeSXin Li 96*8c35d5eeSXin Li```markdown 97*8c35d5eeSXin LiLorem ipsum dolor sit amet. See the 98*8c35d5eeSXin Li[foo docs](https://gerrit.googlesource.com/gitiles/+/master/Documentation/markdown.md) 99*8c35d5eeSXin Lifor details. 100*8c35d5eeSXin Li``` 101*8c35d5eeSXin Li 102*8c35d5eeSXin Li## Trailing whitespace 103*8c35d5eeSXin Li 104*8c35d5eeSXin LiDon't use trailing whitespace, use a trailing backslash. 105*8c35d5eeSXin Li 106*8c35d5eeSXin LiThe [CommonMark spec](http://spec.commonmark.org/0.20/#hard-line-breaks) decrees 107*8c35d5eeSXin Lithat two spaces at the end of a line should insert a `<br />` tag. However, many 108*8c35d5eeSXin Lidirectories have a trailing whitespace presubmit check in place, and many IDEs 109*8c35d5eeSXin Liwill clean it up anyway. 110*8c35d5eeSXin Li 111*8c35d5eeSXin LiBest practice is to avoid the need for a `<br />` altogether. Markdown creates 112*8c35d5eeSXin Liparagraph tags for you simply with newlines: get used to that. 113*8c35d5eeSXin Li 114*8c35d5eeSXin Li## Headings 115*8c35d5eeSXin Li 116*8c35d5eeSXin Li### ATX-style headings 117*8c35d5eeSXin Li 118*8c35d5eeSXin Li```markdown 119*8c35d5eeSXin Li## Heading 2 120*8c35d5eeSXin Li``` 121*8c35d5eeSXin Li 122*8c35d5eeSXin LiHeadings with `=` or `-` underlines can be annoying to maintain and don't fit 123*8c35d5eeSXin Liwith the rest of the heading syntax. The user has to ask: Does `---` mean H1 or 124*8c35d5eeSXin LiH2? 125*8c35d5eeSXin Li 126*8c35d5eeSXin Li```markdown 127*8c35d5eeSXin LiHeading - do you remember what level? DO NOT DO THIS. 128*8c35d5eeSXin Li--------- 129*8c35d5eeSXin Li``` 130*8c35d5eeSXin Li 131*8c35d5eeSXin Li### Add spacing to headings 132*8c35d5eeSXin Li 133*8c35d5eeSXin LiPrefer spacing after `#` and newlines before and after: 134*8c35d5eeSXin Li 135*8c35d5eeSXin Li```markdown 136*8c35d5eeSXin Li...text before. 137*8c35d5eeSXin Li 138*8c35d5eeSXin Li# Heading 1 139*8c35d5eeSXin Li 140*8c35d5eeSXin LiText after... 141*8c35d5eeSXin Li``` 142*8c35d5eeSXin Li 143*8c35d5eeSXin LiLack of spacing makes it a little harder to read in source: 144*8c35d5eeSXin Li 145*8c35d5eeSXin Li```markdown 146*8c35d5eeSXin Li...text before. 147*8c35d5eeSXin Li 148*8c35d5eeSXin Li#Heading 1 149*8c35d5eeSXin LiText after... DO NOT DO THIS. 150*8c35d5eeSXin Li``` 151*8c35d5eeSXin Li 152*8c35d5eeSXin Li## Lists 153*8c35d5eeSXin Li 154*8c35d5eeSXin Li### Use lazy numbering for long lists 155*8c35d5eeSXin Li 156*8c35d5eeSXin LiMarkdown is smart enough to let the resulting HTML render your numbered lists 157*8c35d5eeSXin Licorrectly. For longer lists that may change, especially long nested lists, use 158*8c35d5eeSXin Li"lazy" numbering: 159*8c35d5eeSXin Li 160*8c35d5eeSXin Li```markdown 161*8c35d5eeSXin Li1. Foo. 162*8c35d5eeSXin Li1. Bar. 163*8c35d5eeSXin Li 1. Foofoo. 164*8c35d5eeSXin Li 1. Barbar. 165*8c35d5eeSXin Li1. Baz. 166*8c35d5eeSXin Li``` 167*8c35d5eeSXin Li 168*8c35d5eeSXin LiHowever, if the list is small and you don't anticipate changing it, prefer fully 169*8c35d5eeSXin Linumbered lists, because it's nicer to read in source: 170*8c35d5eeSXin Li 171*8c35d5eeSXin Li```markdown 172*8c35d5eeSXin Li1. Foo. 173*8c35d5eeSXin Li2. Bar. 174*8c35d5eeSXin Li3. Baz. 175*8c35d5eeSXin Li``` 176*8c35d5eeSXin Li 177*8c35d5eeSXin Li### Nested list spacing 178*8c35d5eeSXin Li 179*8c35d5eeSXin LiWhen nesting lists, use a 4 space indent for both numbered and bulleted lists: 180*8c35d5eeSXin Li 181*8c35d5eeSXin Li```markdown 182*8c35d5eeSXin Li1. 2 spaces after a numbered list. 183*8c35d5eeSXin Li 4 space indent for wrapped text. 184*8c35d5eeSXin Li2. 2 spaces again. 185*8c35d5eeSXin Li 186*8c35d5eeSXin Li* 3 spaces after a bullet. 187*8c35d5eeSXin Li 4 space indent for wrapped text. 188*8c35d5eeSXin Li 1. 2 spaces after a numbered list. 189*8c35d5eeSXin Li 8 space indent for the wrapped text of a nested list. 190*8c35d5eeSXin Li 2. Looks nice, don't it? 191*8c35d5eeSXin Li* 3 spaces after a bullet. 192*8c35d5eeSXin Li``` 193*8c35d5eeSXin Li 194*8c35d5eeSXin LiThe following works, but it's very messy: 195*8c35d5eeSXin Li 196*8c35d5eeSXin Li```markdown 197*8c35d5eeSXin Li* One space, 198*8c35d5eeSXin Liwith no indent for wrapped text. 199*8c35d5eeSXin Li 1. Irregular nesting... DO NOT DO THIS. 200*8c35d5eeSXin Li``` 201*8c35d5eeSXin Li 202*8c35d5eeSXin LiEven when there's no nesting, using the 4 space indent makes layout consistent 203*8c35d5eeSXin Lifor wrapped text: 204*8c35d5eeSXin Li 205*8c35d5eeSXin Li```markdown 206*8c35d5eeSXin Li* Foo, 207*8c35d5eeSXin Li wrapped. 208*8c35d5eeSXin Li 209*8c35d5eeSXin Li1. 2 spaces 210*8c35d5eeSXin Li and 4 space indenting. 211*8c35d5eeSXin Li2. 2 spaces again. 212*8c35d5eeSXin Li``` 213*8c35d5eeSXin Li 214*8c35d5eeSXin LiHowever, when lists are small, not nested, and a single line, one space can 215*8c35d5eeSXin Lisuffice for both kinds of lists: 216*8c35d5eeSXin Li 217*8c35d5eeSXin Li```markdown 218*8c35d5eeSXin Li* Foo 219*8c35d5eeSXin Li* Bar 220*8c35d5eeSXin Li* Baz. 221*8c35d5eeSXin Li 222*8c35d5eeSXin Li1. Foo. 223*8c35d5eeSXin Li2. Bar. 224*8c35d5eeSXin Li``` 225*8c35d5eeSXin Li 226*8c35d5eeSXin Li## Code 227*8c35d5eeSXin Li 228*8c35d5eeSXin Li### Inline 229*8c35d5eeSXin Li 230*8c35d5eeSXin Li`Backticks` designate `inline code`, and will render all wrapped content 231*8c35d5eeSXin Liliterally. Use them for short code quotations and field names: 232*8c35d5eeSXin Li 233*8c35d5eeSXin Li```markdown 234*8c35d5eeSXin LiYou'll want to run `really_cool_script.sh arg`. 235*8c35d5eeSXin Li 236*8c35d5eeSXin LiPay attention to the `foo_bar_whammy` field in that table. 237*8c35d5eeSXin Li``` 238*8c35d5eeSXin Li 239*8c35d5eeSXin LiUse inline code when referring to file types in an abstract sense, rather than a 240*8c35d5eeSXin Lispecific file: 241*8c35d5eeSXin Li 242*8c35d5eeSXin Li```markdown 243*8c35d5eeSXin LiBe sure to update your `README.md`! 244*8c35d5eeSXin Li``` 245*8c35d5eeSXin Li 246*8c35d5eeSXin LiBackticks are the most common approach for "escaping" Markdown metacharacters; 247*8c35d5eeSXin Liin most situations where escaping would be needed, code font just makes sense 248*8c35d5eeSXin Lianyway. 249*8c35d5eeSXin Li 250*8c35d5eeSXin Li### Codeblocks 251*8c35d5eeSXin Li 252*8c35d5eeSXin LiFor code quotations longer than a single line, use a codeblock: 253*8c35d5eeSXin Li 254*8c35d5eeSXin Li<pre> 255*8c35d5eeSXin Li```python 256*8c35d5eeSXin Lidef Foo(self, bar): 257*8c35d5eeSXin Li self.bar = bar 258*8c35d5eeSXin Li``` 259*8c35d5eeSXin Li</pre> 260*8c35d5eeSXin Li 261*8c35d5eeSXin Li#### Declare the language 262*8c35d5eeSXin Li 263*8c35d5eeSXin LiIt is best practice to explicitly declare the language, so that neither the 264*8c35d5eeSXin Lisyntax highlighter nor the next editor must guess. 265*8c35d5eeSXin Li 266*8c35d5eeSXin Li#### Indented codeblocks are sometimes cleaner 267*8c35d5eeSXin Li 268*8c35d5eeSXin LiFour-space indenting is also interpreted as a codeblock. These can look 269*8c35d5eeSXin Licleaner and be easier to read in source, but there is no way to specify the 270*8c35d5eeSXin Lilanguage. We encourage their use when writing many short snippets: 271*8c35d5eeSXin Li 272*8c35d5eeSXin Li```markdown 273*8c35d5eeSXin LiYou'll need to run: 274*8c35d5eeSXin Li 275*8c35d5eeSXin Li bazel run :thing -- --foo 276*8c35d5eeSXin Li 277*8c35d5eeSXin LiAnd then: 278*8c35d5eeSXin Li 279*8c35d5eeSXin Li bazel run :another_thing -- --bar 280*8c35d5eeSXin Li 281*8c35d5eeSXin LiAnd again: 282*8c35d5eeSXin Li 283*8c35d5eeSXin Li bazel run :yet_again -- --baz 284*8c35d5eeSXin Li``` 285*8c35d5eeSXin Li 286*8c35d5eeSXin Li#### Escape newlines 287*8c35d5eeSXin Li 288*8c35d5eeSXin LiBecause most commandline snippets are intended to be copied and pasted directly 289*8c35d5eeSXin Liinto a terminal, it's best practice to escape any newlines. Use a single 290*8c35d5eeSXin Libackslash at the end of the line: 291*8c35d5eeSXin Li 292*8c35d5eeSXin Li<pre> 293*8c35d5eeSXin Li```shell 294*8c35d5eeSXin Libazel run :target -- --flag --foo=longlonglonglonglongvalue \ 295*8c35d5eeSXin Li--bar=anotherlonglonglonglonglonglonglonglonglonglongvalue 296*8c35d5eeSXin Li``` 297*8c35d5eeSXin Li</pre> 298*8c35d5eeSXin Li 299*8c35d5eeSXin Li#### Nest codeblocks within lists 300*8c35d5eeSXin Li 301*8c35d5eeSXin LiIf you need a codeblock within a list, make sure to indent it so as to not break 302*8c35d5eeSXin Lithe list: 303*8c35d5eeSXin Li 304*8c35d5eeSXin Li```markdown 305*8c35d5eeSXin Li* Bullet. 306*8c35d5eeSXin Li 307*8c35d5eeSXin Li ```c++ 308*8c35d5eeSXin Li int foo; 309*8c35d5eeSXin Li ``` 310*8c35d5eeSXin Li 311*8c35d5eeSXin Li* Next bullet. 312*8c35d5eeSXin Li``` 313*8c35d5eeSXin Li 314*8c35d5eeSXin LiYou can also create a nested code block with 4 spaces. Simply indent 4 315*8c35d5eeSXin Liadditional spaces from the list indentation: 316*8c35d5eeSXin Li 317*8c35d5eeSXin Li```markdown 318*8c35d5eeSXin Li* Bullet. 319*8c35d5eeSXin Li 320*8c35d5eeSXin Li int foo; 321*8c35d5eeSXin Li 322*8c35d5eeSXin Li* Next bullet. 323*8c35d5eeSXin Li``` 324*8c35d5eeSXin Li 325*8c35d5eeSXin Li## Links 326*8c35d5eeSXin Li 327*8c35d5eeSXin LiLong links make source Markdown difficult to read and break the 80 character 328*8c35d5eeSXin Liwrapping. **Wherever possible, shorten your links**. 329*8c35d5eeSXin Li 330*8c35d5eeSXin Li### Use informative Markdown link titles 331*8c35d5eeSXin Li 332*8c35d5eeSXin LiMarkdown link syntax allows you to set a link title, just as HTML does. Use it 333*8c35d5eeSXin Liwisely. 334*8c35d5eeSXin Li 335*8c35d5eeSXin LiTitling your links as "link" or "here" tells the reader precisely nothing when 336*8c35d5eeSXin Liquickly scanning your doc and is a waste of space: 337*8c35d5eeSXin Li 338*8c35d5eeSXin Li```markdown 339*8c35d5eeSXin LiSee the syntax guide for more info: [link](syntax_guide.md). 340*8c35d5eeSXin LiOr, check out the style guide [here](style_guide.md). 341*8c35d5eeSXin LiDO NOT DO THIS. 342*8c35d5eeSXin Li``` 343*8c35d5eeSXin Li 344*8c35d5eeSXin LiInstead, write the sentence naturally, then go back and wrap the most 345*8c35d5eeSXin Liappropriate phrase with the link: 346*8c35d5eeSXin Li 347*8c35d5eeSXin Li```markdown 348*8c35d5eeSXin LiSee the [syntax guide](syntax_guide.md) for more info. 349*8c35d5eeSXin LiOr, check out the [style guide](style_guide.md). 350*8c35d5eeSXin Li``` 351*8c35d5eeSXin Li 352*8c35d5eeSXin Li## Images 353*8c35d5eeSXin Li 354*8c35d5eeSXin LiUse images sparingly, and prefer simple screenshots. This guide is designed 355*8c35d5eeSXin Liaround the idea that plain text gets users down to the business of communication 356*8c35d5eeSXin Lifaster with less reader distraction and author procrastination. However, it's 357*8c35d5eeSXin Lisometimes very helpful to show what you mean. 358*8c35d5eeSXin Li 359*8c35d5eeSXin LiSee [image syntax](https://gerrit.googlesource.com/gitiles/+/master/Documentation/markdown.md#Images). 360*8c35d5eeSXin Li 361*8c35d5eeSXin Li## Prefer lists to tables 362*8c35d5eeSXin Li 363*8c35d5eeSXin LiAny tables in your Markdown should be small. Complex, large tables are difficult 364*8c35d5eeSXin Lito read in source and most importantly, **a pain to modify later**. 365*8c35d5eeSXin Li 366*8c35d5eeSXin Li```markdown 367*8c35d5eeSXin LiFruit | Attribute | Notes 368*8c35d5eeSXin Li--- | --- | --- | --- 369*8c35d5eeSXin LiApple | [Juicy](https://example.com/SomeReallyReallyReallyReallyReallyReallyReallyReallyLongQuery), Firm, Sweet | Apples keep doctors away. 370*8c35d5eeSXin LiBanana | [Convenient](https://example.com/SomeDifferentReallyReallyReallyReallyReallyReallyReallyReallyLongQuery), Soft, Sweet | Contrary to popular belief, most apes prefer mangoes. 371*8c35d5eeSXin Li 372*8c35d5eeSXin LiDO NOT DO THIS 373*8c35d5eeSXin Li``` 374*8c35d5eeSXin Li 375*8c35d5eeSXin Li[Lists](#lists) and subheadings usually suffice to present the same information 376*8c35d5eeSXin Liin a slightly less compact, though much more edit-friendly way: 377*8c35d5eeSXin Li 378*8c35d5eeSXin Li```markdown 379*8c35d5eeSXin Li## Fruits 380*8c35d5eeSXin Li 381*8c35d5eeSXin Li### Apple 382*8c35d5eeSXin Li 383*8c35d5eeSXin Li* [Juicy](https://SomeReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongURL) 384*8c35d5eeSXin Li* Firm 385*8c35d5eeSXin Li* Sweet 386*8c35d5eeSXin Li 387*8c35d5eeSXin LiApples keep doctors away. 388*8c35d5eeSXin Li 389*8c35d5eeSXin Li### Banana 390*8c35d5eeSXin Li 391*8c35d5eeSXin Li* [Convenient](https://example.com/SomeDifferentReallyReallyReallyReallyReallyReallyReallyReallyLongQuery) 392*8c35d5eeSXin Li* Soft 393*8c35d5eeSXin Li* Sweet 394*8c35d5eeSXin Li 395*8c35d5eeSXin LiContrary to popular belief, most apes prefer mangoes. 396*8c35d5eeSXin Li``` 397*8c35d5eeSXin Li 398*8c35d5eeSXin LiHowever, there are times when a small table is called for: 399*8c35d5eeSXin Li 400*8c35d5eeSXin Li```markdown 401*8c35d5eeSXin LiTransport | Favored by | Advantages 402*8c35d5eeSXin Li--- | --- | --- 403*8c35d5eeSXin LiSwallow | Coconuts | Otherwise unladen 404*8c35d5eeSXin LiBicycle | Miss Gulch | Weatherproof 405*8c35d5eeSXin LiX-34 landspeeder | Whiny farmboys | Cheap since the X-38 came out 406*8c35d5eeSXin Li``` 407*8c35d5eeSXin Li 408*8c35d5eeSXin Li## Strongly prefer Markdown to HTML 409*8c35d5eeSXin Li 410*8c35d5eeSXin LiPlease prefer standard Markdown syntax wherever possible and avoid HTML hacks. 411*8c35d5eeSXin LiIf you can't seem to accomplish what you want, reconsider whether you really 412*8c35d5eeSXin Lineed it. Except for [big tables](#prefer-lists-to-tables), Markdown meets almost 413*8c35d5eeSXin Liall needs already. 414*8c35d5eeSXin Li 415*8c35d5eeSXin LiEvery bit of HTML or Javascript hacking reduces the readability and portability. 416*8c35d5eeSXin LiThis in turn limits the usefulness of integrations with 417*8c35d5eeSXin Liother tools, which may either present the source as plain text or render it. See 418*8c35d5eeSXin Li[Philosophy](philosophy.md). 419*8c35d5eeSXin Li 420*8c35d5eeSXin LiGitiles does not render HTML. 421