github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/present/doc.go (about) 1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 /* 6 Package present implements parsing and rendering of present files, 7 which can be slide presentations as in golang.org/x/tools/cmd/present 8 or articles as in golang.org/x/blog (the Go blog). 9 10 # File Format 11 12 Present files begin with a header giving the title of the document 13 and other metadata, which looks like: 14 15 # Title of document 16 Subtitle of document 17 15:04 2 Jan 2006 18 Tags: foo, bar, baz 19 Summary: This is a great document you want to read. 20 OldURL: former-path-for-this-doc 21 22 The "# " prefix before the title indicates that this is 23 a Markdown-enabled present file: it uses 24 Markdown for text markup in the body of the file. 25 If the "# " prefix is missing, the file uses 26 legacy present markup, described below. 27 28 The date line may be written without a time: 29 30 2 Jan 2006 31 32 In this case, the time will be interpreted as 10am UTC on that date. 33 34 The tags line is a comma-separated list of tags that may be used to categorize 35 the document. 36 37 The summary line gives a short summary used in blog feeds. 38 39 The old URL line, which may be repeated, gives an older (perhaps relative) URL 40 for this document. 41 A server might use these to generate appropriate redirects. 42 43 Only the title is required; 44 the subtitle, date, tags, summary, and old URL lines are optional. 45 In Markdown-enabled present, the summary defaults to being empty. 46 In legacy present, the summary defaults to the first paragraph of text. 47 48 After the header come zero or more author blocks, like this: 49 50 Author Name 51 Job title, Company 52 joe@example.com 53 https://url/ 54 @twitter_name 55 56 The first line of the author block is conventionally the author name. 57 Otherwise, the author section may contain a mixture of text, twitter names, and links. 58 For slide presentations, only the plain text lines will be displayed on the 59 first slide. 60 61 If multiple author blocks are listed, each new block must be preceded 62 by its own blank line. 63 64 After the author blocks come the presentation slides or article sections, 65 which can in turn have subsections. 66 In Markdown-enabled present files, each slide or section begins with a "##" header line, 67 subsections begin with a "###" header line, and so on. 68 In legacy present files, each slide or section begins with a "*" header line, 69 subsections begin with a "**" header line, and so on. 70 71 In addition to the marked-up text in a section (or subsection), 72 a present file can contain present command invocations, each of which begins 73 with a dot, as in: 74 75 .code x.go /^func main/,/^}/ 76 .play y.go 77 .image image.jpg 78 .background image.jpg 79 .iframe https://foo 80 .link https://foo label 81 .html file.html 82 .caption _Gopher_ by [[https://instagram.com/reneefrench][Renee French]] 83 84 Other than the commands, the text in a section is interpreted 85 either as Markdown or as legacy present markup. 86 87 # Markdown Syntax 88 89 Markdown typically means the generic name for a family of similar markup languages. 90 The specific variant used in present is CommonMark. 91 See https://commonmark.org/help/tutorial/ for a quick tutorial. 92 93 In Markdown-enabled present, 94 section headings can end in {#name} to set the HTML anchor ID for the heading to "name". 95 96 Lines beginning with "//" (outside of code blocks, of course) 97 are treated as present comments and have no effect. 98 99 Lines beginning with ": " are treated as speaker notes, described below. 100 101 Example: 102 103 # Title of Talk 104 105 My Name 106 9 Mar 2020 107 me@example.com 108 109 ## Title of Slide or Section (must begin with ##) 110 111 Some Text 112 113 ### Subsection {#anchor} 114 115 - bullets 116 - more bullets 117 - a bullet continued 118 on the next line 119 120 #### Sub-subsection 121 122 Some More text 123 124 Preformatted text (code block) 125 is indented (by one tab, or four spaces) 126 127 Further Text, including command invocations. 128 129 ## Section 2: Example formatting {#fmt} 130 131 Formatting: 132 133 _italic_ 134 // A comment that is completely ignored. 135 : Speaker notes. 136 **bold** 137 `program` 138 Markup—_especially italic text_—can easily be overused. 139 _Why use scoped\_ptr_? Use plain **\*ptr** instead. 140 141 Visit [the Go home page](https://golang.org/). 142 143 # Legacy Present Syntax 144 145 Compared to Markdown, 146 in legacy present 147 slides/sections use "*" instead of "##", 148 whole-line comments begin with "#" instead of "//", 149 bullet lists can only contain single (possibly wrapped) text lines, 150 and the font styling and link syntaxes are subtly different. 151 152 Example: 153 154 Title of Talk 155 156 My Name 157 1 Jan 2013 158 me@example.com 159 160 * Title of Slide or Section (must begin with *) 161 162 Some Text 163 164 ** Subsection 165 166 - bullets 167 - more bullets 168 - a bullet continued 169 on the next line (indented at least one space) 170 171 *** Sub-subsection 172 173 Some More text 174 175 Preformatted text (code block) 176 is indented (however you like) 177 178 Further Text, including command invocations. 179 180 * Section 2: Example formatting 181 182 Formatting: 183 184 _italic_ 185 *bold* 186 `program` 187 Markup—_especially_italic_text_—can easily be overused. 188 _Why_use_scoped__ptr_? Use plain ***ptr* instead. 189 190 Visit [[https://golang.org][the Go home page]]. 191 192 Within the input for plain text or lists, text bracketed by font 193 markers will be presented in italic, bold, or program font. 194 Marker characters are _ (italic), * (bold) and ` (program font). 195 An opening marker must be preceded by a space or punctuation 196 character or else be at start of a line; similarly, a closing 197 marker must be followed by a space or punctuation character or 198 else be at the end of a line. Unmatched markers appear as plain text. 199 There must be no spaces between markers. Within marked text, 200 a single marker character becomes a space and a doubled single 201 marker quotes the marker character. 202 203 Links can be included in any text with the form [[url][label]], or 204 [[url]] to use the URL itself as the label. 205 206 # Command Invocations 207 208 A number of special commands are available through invocations 209 in the input text. Each such invocation contains a period as the 210 first character on the line, followed immediately by the name of 211 the function, followed by any arguments. A typical invocation might 212 be 213 214 .play demo.go /^func show/,/^}/ 215 216 (except that the ".play" must be at the beginning of the line and 217 not be indented as in this comment.) 218 219 Here follows a description of the functions: 220 221 code: 222 223 Injects program source into the output by extracting code from files 224 and injecting them as HTML-escaped <pre> blocks. The argument is 225 a file name followed by an optional address that specifies what 226 section of the file to display. The address syntax is similar in 227 its simplest form to that of ed, but comes from sam and is more 228 general. See 229 230 https://plan9.io/sys/doc/sam/sam.html Table II 231 232 for full details. The displayed block is always rounded out to a 233 full line at both ends. 234 235 If no pattern is present, the entire file is displayed. 236 237 Any line in the program that ends with the four characters 238 239 OMIT 240 241 is deleted from the source before inclusion, making it easy 242 to write things like 243 244 .code test.go /START OMIT/,/END OMIT/ 245 246 to find snippets like this 247 248 tedious_code = boring_function() 249 // START OMIT 250 interesting_code = fascinating_function() 251 // END OMIT 252 253 and see only this: 254 255 interesting_code = fascinating_function() 256 257 Also, inside the displayed text a line that ends 258 259 // HL 260 261 will be highlighted in the display. A highlighting mark may have a 262 suffix word, such as 263 264 // HLxxx 265 266 Such highlights are enabled only if the code invocation ends with 267 "HL" followed by the word: 268 269 .code test.go /^type Foo/,/^}/ HLxxx 270 271 The .code function may take one or more flags immediately preceding 272 the filename. This command shows test.go in an editable text area: 273 274 .code -edit test.go 275 276 This command shows test.go with line numbers: 277 278 .code -numbers test.go 279 280 play: 281 282 The function "play" is the same as "code" but puts a button 283 on the displayed source so the program can be run from the browser. 284 Although only the selected text is shown, all the source is included 285 in the HTML output so it can be presented to the compiler. 286 287 link: 288 289 Create a hyperlink. The syntax is 1 or 2 space-separated arguments. 290 The first argument is always the HTTP URL. If there is a second 291 argument, it is the text label to display for this link. 292 293 .link https://golang.org golang.org 294 295 image: 296 297 The template uses the function "image" to inject picture files. 298 299 The syntax is simple: 1 or 3 space-separated arguments. 300 The first argument is always the file name. 301 If there are more arguments, they are the height and width; 302 both must be present, or substituted with an underscore. 303 Replacing a dimension argument with the underscore parameter 304 preserves the aspect ratio of the image when scaling. 305 306 .image images/betsy.jpg 100 200 307 .image images/janet.jpg _ 300 308 309 video: 310 311 The template uses the function "video" to inject video files. 312 313 The syntax is simple: 2 or 4 space-separated arguments. 314 The first argument is always the file name. 315 The second argument is always the file content-type. 316 If there are more arguments, they are the height and width; 317 both must be present, or substituted with an underscore. 318 Replacing a dimension argument with the underscore parameter 319 preserves the aspect ratio of the video when scaling. 320 321 .video videos/evangeline.mp4 video/mp4 400 600 322 323 .video videos/mabel.ogg video/ogg 500 _ 324 325 background: 326 327 The template uses the function "background" to set the background image for 328 a slide. The only argument is the file name of the image. 329 330 .background images/susan.jpg 331 332 caption: 333 334 The template uses the function "caption" to inject figure captions. 335 336 The text after ".caption" is embedded in a figcaption element after 337 processing styling and links as in standard text lines. 338 339 .caption _Gopher_ by [[https://instagram.com/reneefrench][Renee French]] 340 341 iframe: 342 343 The function "iframe" injects iframes (pages inside pages). 344 Its syntax is the same as that of image. 345 346 html: 347 348 The function html includes the contents of the specified file as 349 unescaped HTML. This is useful for including custom HTML elements 350 that cannot be created using only the slide format. 351 It is your responsibility to make sure the included HTML is valid and safe. 352 353 .html file.html 354 355 # Presenter Notes 356 357 Lines that begin with ": " are treated as presenter notes, 358 in both Markdown and legacy present syntax. 359 By default, presenter notes are collected but ignored. 360 361 When running the present command with -notes, 362 typing 'N' in your browser displaying your slides 363 will create a second window displaying the notes. 364 The second window is completely synced with the main 365 window, except that presenter notes are only visible in the second window. 366 367 Notes may appear anywhere within the slide text. For example: 368 369 ## Title of slide 370 371 Some text. 372 373 : Presenter notes (first paragraph) 374 375 Some more text. 376 377 : Presenter notes (subsequent paragraph(s)) 378 */ 379 package present // import "golang.org/x/tools/present"