# # == About == # # This is my way of making slide-based presentations. In short, it just groups # Markdown formatting into rectangles and adds options for layout formatting. # Inside each slide, normal element flow is respected. # Each slide is the size of a landscape-oriented A4 sheet of paper. Light/dark # mode settings are respected (of course). # Currently, this is active only in pages under the "talks" folder. # # == ftags == # # &&presentation Must appear before any other presentation ftags. # It "loads" everything necessary for a presentation, that being # the navigation bar and logic script (which also inserts the # custom stylesheet). # Can be only one per page. Also refer to -- Surroundings -- # # &&slide Everything following this tag is part of a slide. Each slide is # presented in the order it appears in. # &&/slide Ends (the last started) slide. # # &&clide Same as &&slide, but everything following is centered # vertically. Uses flexbox. # &&/slide Ends (the last started) clide. Not compatible with &&/slide! # # &&table Starts a table, where everything following it is formatted as a # table cell in a row. # &&ftable Same as &&table, but all colums have the same width. # &&tarow Ends the last started row and begins a new row. # Effectively everything following it is on a new row. # &&/table Ends (the last started) (table row and) table or ftable. # # &&linebN Adds a line break (vertical spacing) of N (text) lines. # Spacing is equivalent to N em. # Available values for N: 1, 2, 3, 4, 5, 6, 7, 8, 9 # # &&fontSIZE Changes font size to SIZE, in pixels. Default size is 30px. # Available values for SIZE: 18, 20, 22, 25, 27, 35 # &&/font Text between &&fontSIZE and &&/font is sized accordingly # # &¢ered Center horizontally (only) text. # &&/centered Text between &¢ered and &&/centered is aligned. # # &&fright Aligns following elements and text to the right. # &&/fright Text between &&fright and &&/fright is aligned to the right # # &&cont Basic container with no properties. Useful if you need to group # multiple elements into one table cell. # &&/cont Ends (the last started) &&cont # # -- Surroundings -- # # As stated, there can only be one presentation per page. # Everything that is around a presentation and it's slides is normally hidden # during presenting mode and while printing. # # -- Placement/Flow -- # # All ftags can be placed on their own line, or in a line with other ftags. # The only requirement is that such a line must start with an ftag, ftags in the # middle of text aren't recognized. # # -- Regarding flex -- # # The older versions of the script, prior to commit # 687ff3652e5695183ba1691e7d4b94470f8407b3 # used extensively flexbox for element alignment. This was done with the hope that # spacing out elements evenly and centering them would be very easy, which turned # out to be false. # # Now, the only thing that uses flexbox is &&clide, and it only allows to center # everything in the slide vertically. # Vertical centerings for portions of elements can be done with &&linebN, which, # though imperfect, does the job very well and should suffice. # Evenly spacing out elements next to each other can be done with &&table and # &&ftable. # # -- Example Usage -- # # Refer to src/talks/demo/index.md BEGIN { nopresentation=substr(ARGV[1], "talks") == 0 # FILENAME isn't available yet # names is name of ftag, meaning if `names[i] = "examp"` the ftag will be &&examp # ended specifies how the HTML tag is ended # `ended[i] = 0` means no closing ftag (so no &&/examp) # `ended[i] = 1` means &&/examp exists # `ended[i] = 2` means self-closing, so no &&/examp, but &&examp includes the closing tag # # &&examp is usually replaced by `
` # &&/examp is usually replaced by `
` # in case ended[i] = 2, &&examp is replaced by `
` # Main elements and exceptions to the normal replace format names[ 1] = "presentation" ended[ 1] = 0 names[ 2] = "slide" ended[ 2] = 1 names[ 3] = "clide" ended[ 3] = 1 names[ 4] = "table" ended[ 4] = 1 names[ 5] = "ftable" ended[ 5] = 0 names[ 6] = "tarow" ended[ 6] = 0 names[ 7] = "/font" # all font ftags can be closed with a &&/font ended[ 7] = 0 # Line breaks names[ 8] = "lineb1" ended[ 8] = 2 names[ 9] = "lineb2" ended[ 9] = 2 names[10] = "lineb3" ended[10] = 2 names[11] = "lineb4" ended[11] = 2 names[12] = "lineb5" ended[12] = 2 names[13] = "lineb6" ended[13] = 2 names[14] = "lineb7" ended[14] = 2 names[15] = "lineb8" ended[15] = 2 names[16] = "lineb9" ended[16] = 2 # Font sizes names[17] = "font18" ended[17] = 0 names[18] = "font20" ended[18] = 0 names[19] = "font22" ended[19] = 0 names[20] = "font25" ended[20] = 0 names[21] = "font27" ended[21] = 0 names[22] = "font35" ended[22] = 0 # Everything else names[23] = "centered" ended[23] = 1 names[24] = "fright" ended[24] = 1 names[25] = "cont" ended[25] = 1 pres = ORS \ "

" ORS \ " " for (i = 1; i <= length(names); i++) { pat[i] = "&&" names[i] rep[i] = "
" if (ended[i] == 1) { cpat[i] = "&&/" names[i] crep[i] = "
" } else if (ended[i] == 2) { rep[i] = rep[i] "" } } rep[ 1] = pres rep[ 3] = "
" # flex-col + flex:1 +
crep[3] = "
" #
+ flex:1 + /flex-col rep[ 4] = "
" # (layout-row > * is td) crep[4] = "" #
rep[ 5] = "
" #
(layout-row > * is td) rep[ 6] = "
" #
rep[ 7] = "" # &&/font presInsideCode = 0 slideIndex = 0 } function presentationSubstitute(ind) { gsub(/(

|<\/p>)/, "") if ((ind == 2 || ind == 3) && index($0, pat[ind]) != 0) { # &&slide or &&clide gsub(pat[ind], "

/ { presInsideCode = 1 } nopresentation == 0 && /<\/code>/ { presInsideCode = 0 } nopresentation == 0 && presInsideCode == 0 && /^[ \t]*(

|)&&/ { for (i = 1; i <= length(names); i++) { if (index($0, names[i]) != 0) presentationSubstitute(i) } }