]> Shamusworld >> Repos - ardour-manual/commitdiff
Adding PDF generation
authorEd Ward <edwsaintesprit@hotmail.com>
Tue, 30 Jul 2019 14:14:34 +0000 (16:14 +0200)
committerEd Ward <edwsaintesprit@hotmail.com>
Tue, 30 Jul 2019 14:14:34 +0000 (16:14 +0200)
16 files changed:
build.py
include/audio-track-controls.html
include/master-bus-strip.html
include/monitor-section.html
include/preferences.html
include/region-properties.html
include/session-properties.html
include/the-transport-menu.html
include/the-view-menu.html
include/timecode-generators-and-slaves.html
include/track-and-bus-groups.html
include/track-types.html
include/workflow-amp-operations.html
onepage-template.txt [deleted file]
page-template.txt [deleted file]
source/css/app.css [deleted file]

index 376204959f810b72d7c5bfe126233c36b2346e01..2345dbceb9c6e299aea61fdbea3d775e292659e1 100755 (executable)
--- a/build.py
+++ b/build.py
@@ -9,9 +9,6 @@
 
 # Remnants (could go into the master document as the first header)
 
-#bootstrap_path: /bootstrap-3.3.7
-#page_title: The Ardour Manual
-
 import os
 import re
 import shutil
@@ -19,11 +16,19 @@ import argparse
 
 
 # Global vars
+global_bootstrap_path = '/bootstrap-3.3.7'
+global_page_title = 'The Ardour Manual'
+global_site_dir = './website/'
+global_githuburl = 'https://github.com/Ardour/manual/edit/master/include/'
+global_screen_template = 'page-template.html'
+global_onepage_template = 'onepage-template.html'
+global_pdf_template = 'pdf-template.html'
+global_master_doc = 'master-doc.txt'
+
 # This matches all *non* letter/number, ' ', '.', '-', and '_' chars
 cleanString = re.compile(r'[^a-zA-Z0-9 \._-]+')
 # This matches new 'unbreakable' links, up to the closing quote or anchor
 findLinks = re.compile(r'"@@[^#"]*[#"]')
-githuburl = 'https://github.com/Ardour/manual/edit/master/include/'
 
 #
 # Create an all lowercase filename without special characters and with spaces
@@ -70,19 +75,12 @@ def ParseHeader(fileObj):
 #
 def PartToLevel(s):
        level = -1
+       lvl = {'part': 0, 'chapter': 1, 'subchapter': 2}
+       if s in lvl:
+               return lvl[s]
+       else:
+               return -1
 
-       if s == 'part':
-               level = 0
-       elif s == 'chapter':
-               level = 1
-       elif s == 'subchapter':
-               level = 2
-       elif s == 'section':
-               level = 3
-       elif s == 'subsection':
-               level = 4
-
-       return level
 
 #
 # Converts a integer to a roman number
@@ -107,7 +105,7 @@ def GetFileStructure():
        fnames = [None]*6
        content = ''
        grab = False
-       mf = open('master-doc.txt')
+       mf = open(global_master_doc)
 
        for ln in mf:
                if ln.startswith('---'):
@@ -202,12 +200,19 @@ def GetParent(fs, pos):
 
        return pos
 
+#
+# Change the hierarchy of titles : h1->hn, h2->hn+1, etc... n being delta-1
+#
+def reheader(txt, delta):
+       for i in range(6, 0, -1):
+               txt = txt.replace('<h' + str(i),'<h' + str(i+delta))
+               txt = txt.replace('</h' + str(i),'</h' + str(i+delta))
+       return txt
 
 #
 # Creates the BreadCrumbs
 #
 def GetBreadCrumbs(fs, pos):
-       # The <span class="divider">&gt;</span> is for Bootstrap pre-3.0
        breadcrumbs = '<li class="active">'+ fs[pos]['title'] + '</li>'
 
        while pos >= 0:
@@ -342,26 +347,15 @@ def BuildList(lst, fs, pagePos, cList):
 #
 def BuildOnePageSidebar(fs):
 
-       content = '\n\n<ul style="white-space:nowrap;">\n'
+       content = '\n\n<ul class="toc" style="white-space:nowrap;">\n'
        lvl = 0
-       levelNums = [0]*6
+       levelNums = [0]*3
 
        for i in range(len(fs)):
                # Handle Part/Chapter/subchapter/section/subsection numbering
                level = fs[i]['level']
-               if level == 0:
+               if level < 2:
                        levelNums[2] = 0
-                       levelNums[3] = 0
-                       levelNums[4] = 0
-               elif level == 1:
-                       levelNums[2] = 0
-                       levelNums[3] = 0
-                       levelNums[4] = 0
-               elif level == 2:
-                       levelNums[3] = 0
-                       levelNums[4] = 0
-               elif level == 3:
-                       levelNums[4] = 0
                levelNums[level] = levelNums[level] + 1;
                j = level
                txtlevel = ''
@@ -420,44 +414,49 @@ if quiet:
 
 level = 0
 fileCount = 0
-levelNums = [0]*6
+levelNums = [0]*3
 lastFile = ''
 page = ''
 onepage = ''
+pdfpage = ''
 toc = ''
 pageNumber = 0
 
-siteDir = './website/'
+
 
 if not quiet and devmode:
        print('Devmode active: scribbling extra junk to the manual...')
 
-if os.access(siteDir, os.F_OK):
+if os.access(global_site_dir, os.F_OK):
        if not quiet:
                print('Removing stale HTML data...')
 
-       shutil.rmtree(siteDir)
+       shutil.rmtree(global_site_dir)
 
-shutil.copytree('./source', siteDir)
+shutil.copytree('./source', global_site_dir)
 
 
 # Read the template, and fix the stuff that's fixed for all pages
-temp = open('page-template.txt')
+temp = open(global_screen_template)
 template = temp.read()
 temp.close()
-
-template = template.replace('{{page.bootstrap_path}}', '/bootstrap-3.3.7')
-template = template.replace('{{page.page_title}}', 'The Ardour Manual')
+template = template.replace('{{page.bootstrap_path}}', global_bootstrap_path)
+template = template.replace('{{page.page_title}}', global_page_title)
 
 # Same as above, but for the One-page version
-temp = open('onepage-template.txt')
+temp = open(global_onepage_template)
 onepage = temp.read()
 temp.close()
+onepage = onepage.replace('{{page.bootstrap_path}}', global_bootstrap_path)
+onepage = onepage.replace('{{page.page_title}}', global_page_title)
 
-onepage = onepage.replace('{{page.bootstrap_path}}', '/bootstrap-3.3.7')
-onepage = onepage.replace('{{page.page_title}}', 'The Ardour Manual')
+# Same as above, but for the PDF version
+temp = open(global_pdf_template)
+pdfpage = temp.read()
+temp.close()
+pdfpage = pdfpage.replace('{{page.page_title}}', global_page_title)
 
-# Parse out the master docuemnt's structure into a dictionary list
+# Parse out the master document's structure into a dictionary list
 fileStruct = GetFileStructure()
 
 # Build a quasi-tree structure listing children at level + 1 for each node
@@ -472,7 +471,7 @@ if not quiet:
        print('.') if len(links) == 1 else print('s.')
 
 if not quiet:
-       master = open('master-doc.txt')
+       master = open(global_master_doc)
        firstLine = master.readline().rstrip('\r\n')
        master.close()
 
@@ -493,21 +492,9 @@ for header in fileStruct:
        lastLevel = level
        level = header['level']
 
-       # Handle Part/Chapter/subchapter/section/subsection numbering
-       if level == 0:
+       # Handle Part/Chapter/subchapter numbering
+       if level < 2:
                levelNums[2] = 0
-               levelNums[3] = 0
-               levelNums[4] = 0
-       elif level == 1:
-               levelNums[2] = 0
-               levelNums[3] = 0
-               levelNums[4] = 0
-       elif level == 2:
-               levelNums[3] = 0
-               levelNums[4] = 0
-       elif level == 3:
-               levelNums[4] = 0
-
        levelNums[level] = levelNums[level] + 1;
 
        # This is totally unnecessary, but nice; besides which, you can capture
@@ -525,7 +512,6 @@ for header in fileStruct:
 
        # Handle TOC scriblings and one-page titles...
        opl = ''
-
        if 'link' in header:
                opl = ' id="' + header['link'] + '"'
        else:
@@ -536,19 +522,10 @@ for header in fileStruct:
                oph = '<h1 class="clear"' + opl +'>Part ' + num2roman(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
        elif level == 1:
                toc = toc + '\t<p class="chapter">Ch. ' + str(levelNums[level]) + ':&nbsp;&nbsp;<a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h1 class="clear"' + opl +'>' + str(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
+               oph = '<h2 class="clear"' + opl +'>' + str(levelNums[level]) + ' - ' + header['title'] + '</h3>\n';
        elif level == 2:
                toc = toc + '\t\t<p class="subchapter"><a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h1 class="clear"' + opl +'>' + str(levelNums[level-1]) + '.' + str(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
-       elif level == 3:
-               toc = toc + '\t\t\t<p class="section"><a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h1 class="clear"' + opl +'>' + str(levelNums[level-2]) + '.' + str(levelNums[level-1]) + '.' + str(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
-       elif level == 4:
-               toc = toc + '\t\t\t\t<p class="subsection"><a href="/' + header['filename'] + '/">' + header['title'] + '</a></p>\n'
-               oph = '<h1 class="clear"' + opl +'>' + str(levelNums[level-3]) + '.'  + str(levelNums[level-2]) + '.'  + str(levelNums[level-1]) + '.' + str(levelNums[level]) + ' - ' + header['title'] + '</h1>\n';
-
-
-
+               oph = '<h3 class="clear"' + opl +'>' + str(levelNums[level-1]) + '.' + str(levelNums[level]) + ' - ' + header['title'] + '</h3>\n';
 
        # Make the 'this thing contains...' stuff
        if HaveChildren(fileStruct, pageNumber):
@@ -593,7 +570,7 @@ for header in fileStruct:
        if level > 0:
                if 'include' in header:
                        srcFile = open('include/' + header['include'])
-                       githubedit = '<span style="float:right;"><a title="Edit in GitHub" href="' + githuburl + header['include'] + '"><img src="/images/github.png" alt="Edit on GitHub"/></a></span>'
+                       githubedit = '<span style="float:right;"><a title="Edit in GitHub" href="' + global_githuburl + header['include'] + '"><img src="/images/github.png" alt="Edit in GitHub"/></a></span>'
                        content = srcFile.read()
                        srcFile.close()
 
@@ -620,17 +597,15 @@ for header in fileStruct:
                        devnote = devnote + 'link: ' + header['link'] + '<br>'
                content = devnote + '</aside>' + content
 
-       # ----- One page version -----
+       # ----- One page and PDF version -----
 
        # Fix up any internal links
        opcontent = FixInternalLinks(oplinks, content, header['title'])
-
-       # Create the link sidebar
-       opsidebar = BuildOnePageSidebar(fileStruct)
+       opcontent = reheader(opcontent, 2)
 
        # Set up the actual page from the template
-       onepage = onepage.replace('{% tree %}', opsidebar)
-       onepage = onepage.replace('{{ content }}', oph + '\n' + opcontent + '{{ content }}')
+       onepage = onepage.replace('{{ content }}', oph + '\n' + opcontent + '\n{{ content }}')
+       pdfpage = pdfpage.replace('{{ content }}', oph + '\n' + opcontent + '\n{{ content }}')
 
        # ----- Normal version -----
 
@@ -654,10 +629,10 @@ for header in fileStruct:
 
        # Create the directory for the index.html file to go into (we use makedirs,
        # because we have to in order to accomodate the 'uri' keyword)
-       os.makedirs(siteDir + header['filename'], 0o775, exist_ok=True)
+       os.makedirs(global_site_dir + header['filename'], 0o775, exist_ok=True)
 
        # Finally, write the file!
-       destFile = open(siteDir + header['filename'] + '/index.html', 'w')
+       destFile = open(global_site_dir + header['filename'] + '/index.html', 'w')
        destFile.write(page)
        destFile.close()
 
@@ -676,17 +651,31 @@ page = page.replace('{% prevnext %}', '')
 page = page.replace('{% githubedit %}', '')
 page = page.replace('{% breadcrumbs %}', '')
 
-os.mkdir(siteDir + 'toc', 0o775)
-tocFile = open(siteDir + 'toc/index.html', 'w')
+os.mkdir(global_site_dir + 'toc', 0o775)
+tocFile = open(global_site_dir + 'toc/index.html', 'w')
 tocFile.write(page)
 tocFile.close()
 
 # Create the one-page version of the documentation
-onepageFile = open(siteDir + 'ardourmanual.html', 'w')
+onepageFile = open(global_site_dir + 'ardourmanual.html', 'w')
+opsidebar = BuildOnePageSidebar(fileStruct) # create the link sidebar
+onepage = onepage.replace('{% tree %}', opsidebar)
 onepage = onepage.replace('{{ content }}', '') # cleans up the last spaceholder
 onepageFile.write(onepage)
 onepageFile.close()
 
+if not quiet:
+       print('Generating the PDF...')
+# Create the PDF version of the documentation
+pdfpageFile = open(global_site_dir + 'pdf.html', 'w')
+pdfpage = pdfpage.replace('{% tree %}', opsidebar) # create the TOC
+pdfpage = pdfpage.replace('{{ content }}', '') # cleans up the last spaceholder
+pdfpageFile.write(pdfpage)
+pdfpageFile.close()
+
+from weasyprint import HTML
+doc = HTML(filename = global_site_dir + 'pdf.html') #, base_url = os.path.dirname(os.path.realpath(__file__)))
+doc.write_pdf(global_site_dir + 'manual.pdf')
 
 if not quiet:
        print('Processed ' + str(fileCount) + ' files.')
index 1d9f763b3e68115ce8be7f97414824be8d4979e1..6b999691aa6fa6460ee0bb6183d34e40331fe141 100644 (file)
   The control buttons are:
 </p>
 <table class="dl">
-  <tr><th id="record"><kbd style="color:red;">&#9679;</kbd> (Record)</th>
+  <tr><th id="audiotrack-record"><kbd style="color:red;">&#9679;</kbd> (Record)</th>
       <td>The button with the pink circle arms the track
       for recording. When armed, the entire button will turn pink, and change to
       bright red as soon as the transport is rolling and the track is recording.
       <kbd class="mouse">Right</kbd> clicking will allow to en/disable Rec-safe,
       protecting the track against accidental recording.</td></tr>
-  <tr><th id="mute"><kbd>M</kbd> (Mute)</th>
+  <tr><th id="audiotrack-mute"><kbd>M</kbd> (Mute)</th>
       <td>Mutes the track. <kbd class="mouse">Right</kbd> clicking displays
       a menu which dictates what particular parts of the track should be muted.</td></tr>
-  <tr><th id="solo"><kbd>S</kbd> (Solo)</th>
+  <tr><th id="audiotrack-solo"><kbd>S</kbd> (Solo)</th>
       <td>Soloes the track. The behaviour of the solo system
       is described in detail in the section <a href="@@muting-and-soloing">Muting and Soloing</a>.
       <kbd class="mouse">Right</kbd> clicking will allow to en/disable Solo isolate
       and Solo safe.</td></tr>
-  <tr><th id="playlist"><kbd>P</kbd> (Playlist)</th>
+  <tr><th id="audiotrack-playlist"><kbd>P</kbd> (Playlist)</th>
       <td>Opens a playlist menu when clicked. The menu
       offers various operations related to the track's <a href="@@playlists">playlist</a>.</td></tr>
-  <tr><th id="automation"><kbd>A</kbd> (Automation)</th>
+  <tr><th id="audiotrack-automation"><kbd>A</kbd> (Automation)</th>
       <td>Opens the automation menu for the
       track. For details see <a href="@@automation">Automation</a>.</td></tr>
-  <tr><th id="group"><kbd>G</kbd> (Group)</th>
+  <tr><th id="audiotrack-group"><kbd>G</kbd> (Group)</th>
       <td>Allows to assign the track to an existing or a
       new group. For details see <a href="@@track-and-bus-groups">Track and bus groups</a>.</td></tr>
 </table>
index 6de109108ee41484b9c29375aebb0c504716a29b..239d348c4a5342f07b430d336282422538555387 100644 (file)
@@ -13,7 +13,7 @@
 <ul>
   <li>There is no color affected to the master strip</li>
   <li>The master strip cannot be hidden, so there is not <kbd class="menu">X</kbd> in the top right</li>
-  <li>It is by definition always solo, so no <kbd class="menu">Solo</kbd>, <kbd class="menu">Iso</kbd> or <kbd class="menu">Lock</kbd> buttons. It is replaced by a button to show the Monitoring section if <a href="@@session-properties#monitoring">the session has one</a></li>
+  <li>It is by definition always solo, so no <kbd class="menu">Solo</kbd>, <kbd class="menu">Iso</kbd> or <kbd class="menu">Lock</kbd> buttons. It is replaced by a button to show the Monitoring section if <a href="@@session-properties#properties-monitoring">the session has one</a></li>
   <li>It cannot belong to a mix group, so the button is removed.</li>
 </ul>
 
index a428e37b70d34b8ef29a1e89eae3bcb883136528..4348b537f8c88667da9056d61ede72db0b3fb87f 100644 (file)
@@ -9,7 +9,7 @@
 <p>
   The <dfn>Monitor section</dfn> is an optional feature that provides Control Room/Monitor Speaker outputs.
   It can be activated for the current session in the
-  <a href="@@session-properties#monitoring">
+  <a href="@@session-properties#properties-monitoring">
   <kbd class="menu">Session &gt; Properties</kbd> window</a> by enabling the
   <kbd class="option">Use monitor section in this session</kbd> option in the
   <kbd class="menu">Monitoring</kbd> tab. By default the Monitor Section is fed with audio from the Master Bus,
index 83aa681c42310013d7c5ae8cc99adc7ee3306dcc..e469c64d72588e946d566a361c824ba4cc449901 100644 (file)
 </p>
 
 <ul>
-       <li><a href="#general">General</a></li>
-       <li><a href="#editor">Editor</a></li>
-       <li><a href="#mixer">Mixer</a></li>
-       <li><a href="#signal_flow">Signal Flow</a></li>
-       <li><a href="#audio">Audio</a></li>
-       <li><a href="#midi">MIDI</a></li>
-       <li><a href="#metronome">Metronome</a></li>
-       <li><a href="#metering">Metering</a></li>
-       <li><a href="#transport">Transport</a></li>
-       <li><a href="#sync">Sync</a></li>
-       <li><a href="#control_surfaces">Control Surfaces</a></li>
-       <li><a href="#midi_ports">MIDI Ports</a></li>
-       <li><a href="#plugins">Plugins</a></li>
-       <li><a href="#appearance">Appearance</a></li>
-       <li><a href="#video">Video</a></li>
+       <li><a href="#preferences-general">General</a></li>
+       <li><a href="#preferences-editor">Editor</a></li>
+       <li><a href="#preferences-mixer">Mixer</a></li>
+       <li><a href="#preferences-signal_flow">Signal Flow</a></li>
+       <li><a href="#preferences-audio">Audio</a></li>
+       <li><a href="#preferences-midi">MIDI</a></li>
+       <li><a href="#preferences-metronome">Metronome</a></li>
+       <li><a href="#preferences-metering">Metering</a></li>
+       <li><a href="#preferences-transport">Transport</a></li>
+       <li><a href="#preferences-sync">Sync</a></li>
+       <li><a href="#preferences-control_surfaces">Control Surfaces</a></li>
+       <li><a href="#preferences-midi_ports">MIDI Ports</a></li>
+       <li><a href="#preferences-plugins">Plugins</a></li>
+       <li><a href="#preferences-appearance">Appearance</a></li>
+       <li><a href="#preferences-video">Video</a></li>
 </ul>
 
-<h2 id="general">General</h2>
+<h2 id="preferences-general">General</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="editor">Editor</h2>
+<h2 id="preferences-editor">Editor</h2>
 
 <ul>
   <li>
   provides a way to revert any user made change to its default value.
 </p>
 
-<h2 id="mixer">Mixer</h2>
+<h2 id="preferences-mixer">Mixer</h2>
 
 <ul>
   <li>
 
 </ul>
 
-<h2 id="signal_flow">Signal Flow</h2>
+<h2 id="preferences-signal_flow">Signal Flow</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="audio">Audio</h2>
+<h2 id="preferences-audio">Audio</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="midi">MIDI</h2>
+<h2 id="preferences-midi">MIDI</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="metronome">Metronome</h2>
+<h2 id="preferences-metronome">Metronome</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="metering">Metering</h2>
+<h2 id="preferences-metering">Metering</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="transport">Transport</h2>
+<h2 id="preferences-transport">Transport</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="sync">Sync</h2>
+<h2 id="preferences-sync">Sync</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="control_surfaces">Control Surfaces</h2>
+<h2 id="preferences-control_surfaces">Control Surfaces</h2>
 
 <p>
   This tab contains settings for <a href="@@control-surfaces">control surfaces</a>.
   protocol settings</kbd> (only for Generic MIDI and Open Sound Control).
 </p>
 
-<h2 id="midi_ports">MIDI Ports</h2>
+<h2 id="preferences-midi_ports">MIDI Ports</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="plugins">Plugins</h2>
+<h2 id="preferences-plugins">Plugins</h2>
 
 <p class="note">
   The content of this preference page varies heavily between versions or Ardour:
   </li>
 </ul>
 
-<h2 id="appearance">Appearance</h2>
+<h2 id="preferences-appearance">Appearance</h2>
 
 <ul>
   <li>
   </li>
 </ul>
 
-<h2 id="video">Video</h2>
+<h2 id="preferences-video">Video</h2>
 
 <ul>
   <li>
index 7b003dcd939a2219eebd0506852778147eb2e97d..0c50ed2e2d4847159121178ffda17aef6d908896 100644 (file)
@@ -37,7 +37,7 @@
     <th><kbd class="menu">Audition</kbd></th>
     <td>This button allows to listen to the region and only the region, dry (with
       no effects, regardless of the processors applied to the track). For MIDI,
-      the default MIDI synth, set in the <a href="@@preferences#midi">Preferences</a>,
+      the default MIDI synth, set in the <a href="@@preferences#preferences-midi">Preferences</a>,
       is used to audition the region.</td>
     <td></td>
   </tr>
index 22a28836973e2564eebfc9cbf7ee62692a272a08..db8bb55054601f7b7c9590ea8d72870e81aad749 100644 (file)
 </p>
 
 <ul>
-       <li><a href="#timecode">Timecode</a></li>
-       <li><a href="#sync">Sync</a></li>
-       <li><a href="#fade">Fades</a></li>
-       <li><a href="#media">Media</a></li>
-       <li><a href="#locations">Locations</a></li>
-       <li><a href="#filenames">Filenames</a></li>
-       <li><a href="#monitoring">Monitoring</a></li>
-       <li><a href="#meterbridge">Meterbridge</a></li>
-       <li><a href="#misc">Misc</a></li>
+       <li><a href="#properties-timecode">Timecode</a></li>
+       <li><a href="#properties-sync">Sync</a></li>
+       <li><a href="#properties-fade">Fades</a></li>
+       <li><a href="#properties-media">Media</a></li>
+       <li><a href="#properties-locations">Locations</a></li>
+       <li><a href="#properties-filenames">Filenames</a></li>
+       <li><a href="#properties-monitoring">Monitoring</a></li>
+       <li><a href="#properties-meterbridge">Meterbridge</a></li>
+       <li><a href="#properties-misc">Misc</a></li>
 </ul>
 
 
 
 
-<h2 id="timecode">Timecode</h2>
+<h2 id="properties-timecode">Timecode</h2>
 
 <ul>
   <li>
@@ -78,7 +78,7 @@
   </li>
 </ul>
 
-<h2 id="sync">Sync</h2>
+<h2 id="properties-sync">Sync</h2>
 
 <ul>
        <li>
                        <li>
                                <dfn>Use Video File's FPS Instead of Timecode Value for Timeline and Video
                                Monitor</dfn> when checked, uses the timecode FPS value of the standard
-                               used by the video file instead of forcing the FPS set in the <a href="#timecode">
+                               used by the video file instead of forcing the FPS set in the <a href="#properties-timecode">
                                Timecode tab</a>.
                        </li>
                        <li>
                                <dfn>Apply Pull-Up/Down to Video Timeline and Video Monitor (Unless using
-                               JACK-sync)</dfn> allows to apply the pull-up/down as set in the <a href="#timecode">
+                               JACK-sync)</dfn> allows to apply the pull-up/down as set in the <a href="#properties-timecode">
                                Timecode tab</a> to the <a href="@@video-timeline-and-monitoring">video
                                timeline</a> as displayed in the editor and to the Video Monitor, resulting
                                in a shorter/longer video in the editor and a speed-up/down in the Video
        </li>
 </ul>
 
-<h2 id="fade">Fades</h2>
+<h2 id="properties-fade">Fades</h2>
 
 <ul>
        <li>
        </li>
 </ul>
 
-<h2 id="media">Media</h2>
+<h2 id="properties-media">Media</h2>
 
 <p>
        Change how sound is stored on disk. These options do not change how sound is handled
        </li>
 </ul>
 
-<h2 id="locations">Locations</h2>
+<h2 id="properties-locations">Locations</h2>
 
 <p>
        These options add file locations that will be searched to find the audio and
        </li>
 </ul>
 
-<h2 id="filenames">Filenames</h2>
+<h2 id="properties-filenames">Filenames</h2>
 
 <p>
         This tab is used to change how Ardour names recorded regions.
 </ul>
 
 
-<h2 id="monitoring">Monitoring</h2>
+<h2 id="properties-monitoring">Monitoring</h2>
 
 <p>
         Provides options affecting monitoring.
 </ul>
 
 
-<h2 id="meterbridge">Meterbridge</h2>
+<h2 id="properties-meterbridge">Meterbridge</h2>
 
 <p>
        This tab changes what controls are displayed in the Meterbridge that is
        </li>
 </ul>
 
-<h2 id="misc">Misc</h2>
+<h2 id="properties-misc">Misc</h2>
 
 <p>
        This tab has several things that don't fit on the other tabs.
index 5ec9bfe0481f668d160cdcd95e069ba141bab766..6d6e61d4e16cf22181239cf8440fe043ff9573fc 100644 (file)
@@ -7,14 +7,14 @@
        <tr><th>Start/Stop</th><td>Starts or stops the playhead, and recording if it is armed</td></tr>
        <tr><th>Play</th>
                <tr><th class="sub1">Play Selection</th><td>Only plays the selected part of the session, be it a range or selected regions</td></tr>
-               <tr><th class="sub1">Play Selection w/Preroll</th><td>As the previous menu, except it starts the playback a few bars or seconds before the beginning of the selection (the amount of time can be set in the <a href="@@preferences#transport">Preferences</a>)</td></tr>
+               <tr><th class="sub1">Play Selection w/Preroll</th><td>As the previous menu, except it starts the playback a few bars or seconds before the beginning of the selection (the amount of time can be set in the <a href="@@preferences#preferences-transport">Preferences</a>)</td></tr>
                <tr><th class="sub1">Start/Continue/Stop</th><td>Leaves loop play or range play mode but without stopping the transport</td></tr>
                <tr><th class="sub1">Play from Edit Point and Return</th><td>Starts the playback at the <a href="@@edit-point-control">Edit point</a>, and when stopped, goes back to the original location</td></tr>
                <tr><th class="sub1">Play Loop Range</th><td>If a <a href="@@the-loop-range">Loop range</a> is defined, play it and loop until stopped</td></tr>
        <tr><th>Start Recording</th><td>This is a shortcut to trigger the global recording, and start playback at once</td></tr>
        <tr><th>Stop and Forget Capture</th><td>Stops the recording, removes the newly created material, and goes back to the original position</td></tr>
        <tr><th>Enable Record</th><td>Triggers the global recording. Next time "Play" is pressed, it will record on the track(s) that are armed for recording</td></tr>
-       <tr><th>Record w/Preroll</th><td>As the Start Recording menu, except it starts the recording a few bars or seconds before the playhead's position (the amount of time can be set in the <a href="@@preferences#transport">Preferences</a>)</td></tr>
+       <tr><th>Record w/Preroll</th><td>As the Start Recording menu, except it starts the recording a few bars or seconds before the playhead's position (the amount of time can be set in the <a href="@@preferences#preferences-transport">Preferences</a>)</td></tr>
        <tr><th>Record w/Count-In</th><td>As the Start Recording menu, except it waits for 2 bars before the playhead's position. The Metronome will tick (even if disabled) during the count-in</td></tr>
 
        <tr><th>Set Loop from Selection</th><td>Converts the selection into a <a href="@@the-loop-range">Loop range</a> by placing loop markers at the start and end of the selected range</td></tr>
index df178d4e412f9f9d0c845cca1ad6049f06779c24..d95e36d9b2c4f0efa137056e1d9139e17efbf68c 100644 (file)
@@ -72,7 +72,7 @@
        <tr><th>[] Show Editor Mixer</th><td>When checked, the selected tracks' mixer strip is displayed on the left of the editor window, allowing for a quick access to e.g. effects and routing</td></tr>
        <tr><th>[] Show Editor List</th><td>In the Editor window, shows the <a href="@@editor-lists">Editor List</a>, giving access to a number of handy lists (regions, tracks, &hellip;)</td></tr>
        <tr><th>[] Toggle Mixer List</th><td>In the Mixer view, shows the Mixer list, giving access to some handy lists (<a href="@@favorite-plugins-window">Favorite plugins</a>, <a href="@@strips-list">The Strip list</a>,&hellip;)</td></tr>
-       <tr><th>[] Toggle Monitor Section Visibility</th><td>If the <kbd class="option">Use monitoring section on this session</kbd> has been checked in the <a href="@@session-properties#monitoring">Session Properties window</a>, shows or hides the Monitor Section in the Mixer</td></tr>
+       <tr><th>[] Toggle Monitor Section Visibility</th><td>If the <kbd class="option">Use monitoring section on this session</kbd> has been checked in the <a href="@@session-properties#properties-monitoring">Session Properties window</a>, shows or hides the Monitor Section in the Mixer</td></tr>
        <tr><th>[] Show Measure Lines</th><td>If checked, in the Editor, shows a vertical white line at each measure start</td></tr>
        <tr><th>[] Show Summary</th><td>If checked, in the Editor, shows the <a href="@@summary">Summary</a>, allowing a faster navigation in the session</td></tr>
        <tr><th>[] Show Group Tabs</th><td>If checked, makes the groups visible as tabs on the left in the Editor, and on the top in the mixer</td></tr>
index 955f26ffe3145348a36f1c240a63087bc0e3eb29..41df915598f21a179a15b92c6d77ea9218bbddd3 100644 (file)
 <h3>Clock Sync Lock</h3>
 <p>
   As described in the
-  <a href="http://manual.ardour.org/synchronization/on-clock-and-time/">On Clock and Time</a>
+  <a href="@@on-clock-and-time">On Clock and Time</a>
   chapter, timecode and clock are independent. If the external timecode
   source is not in sample-sync with the audio hardware (and JACK), Ardour
   needs to run at varispeed to adjust for the discrepancy.
index a1c7f0f4a50d9d512df4e70a5e8fbe0d1c74b18e..284e65f19cee05f3651ea57d184565707e5b5e0a 100644 (file)
   &minus;4&nbsp;dB (the <em>difference</em> of the gains remains the same).
 </p>
 <p>
-  <a href="@@bus-controls#mute"><kbd class="option">Muting</kbd></a>,
-  <a href="@@bus-controls#solo"><kbd class="option">Soloing</kbd></a>,
-  <a href="@@audio-track-controls#record"><kbd class="option">record enable</kbd></a>,
+  <a href="@@bus-controls"><kbd class="option">Muting</kbd></a>,
+  <a href="@@bus-controls"><kbd class="option">Soloing</kbd></a>,
+  <a href="@@audio-track-controls#audiotrack-record"><kbd class="option">record enable</kbd></a>,
   <a href="@@the-tracks-and-busses-list"><kbd class="option">active state</kbd></a>,
   <a href="@@track-color"><kbd class="option">color</kbd></a> and
   <a href="@@monitoring"><kbd class="option">monitoring</kbd></a>
index 4576c82cf1aa38a06cfa355a1d27f78ecdd81176..c1afee9234080a15b3ad0bb7bc14c026fec746ab 100644 (file)
@@ -23,8 +23,8 @@
   <tr><th>Audio</th>
                <td>An <dfn>Audio Track</dfn> is created with a user-specified number of
                inputs. The number of outputs is defined by the master bus channel count
-               (for details see <a href="#channelconfiguration">Channel Configuration</a>
-               below). This is the type of track to use when planning to work with
+               (for details see <a href="@@channel-configuration">Channel Configuration</a>).
+               This is the type of track to use when planning to work with
                existing or newly recorded audio.</td></tr>
   <tr><th>MIDI</th>
                <td>A <dfn>MIDI track</dfn> is created with a single MIDI input, and a
index 49a695c1537ba99e3895911627b4b4db4132ebf3..0aa98912fbdbfd326fcdb2a611144b319ae9a936 100644 (file)
@@ -41,7 +41,7 @@
        Importing a video makes Ardour start the video server automatically. If
        the <kbd class="option">Show video Server Startup Dialog</kbd> option in the
        <kbd class="menu">Video</kbd> section of the
-       <a href="@@preferences#video">preferences</a> is checked, the
+       <a href="@@preferences#preferences-video">preferences</a> is checked, the
        <kbd class="menu">Launch Video Server</kbd> window is shown, allowing more
        complex operations, e.g. connecting to a remote video server instead of a local
        one.
diff --git a/onepage-template.txt b/onepage-template.txt
deleted file mode 100644 (file)
index b4240eb..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-<!doctype html>
-<html lang="en">
-
-<head>
-       <title>The Ardour Manual</title>
-       <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
-       <meta name="description" content="The Ardour Manual">
-       <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-       <link href="{{page.bootstrap_path}}/css/bootstrap.min.css" rel="stylesheet">
-       <link href="/css/app.css" rel="stylesheet">
-
-</head>
-
-<body>
-       <div class="container-fluid">
-               <div class="row-fluid">
-                       <div id="tree" class="navbar">
-                               <h1><a href="/"><img class="img-responsive" src="/images/logo.png" alt="The Ardour Manual" /></a></h1>
-
-                               {% tree %}
-
-                       </div> <!-- tree -->
-
-                       <div class="span12" id="content">
-
-                               {{ content }}
-
-                       </div> <!-- content -->
-               </div> <!-- row-fluid -->
-       </div> <!-- container-fluid -->
-
-
-       <script type="text/javascript">
-               // I'll go to hell for this
-               var isA = function(regex) { return navigator.userAgent.match(regex) };
-               var isAbout = function(regex) { return document.getElementsByTagName('h1')[1].textContent.match(regex) };
-
-               if ( (isA(/Mac/) || isAbout(/OS X/)) && (!isAbout(/Linux/)) ) {
-                       var e = document.getElementsByTagName('body')[0];
-                       e.className += ' mac';  // class magic for Cmd vs. Ctrl keys.
-               }
-       </script>
-
-</body>
-</html>
diff --git a/page-template.txt b/page-template.txt
deleted file mode 100644 (file)
index fb0c9b5..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-<!doctype html>
-<html lang="en">
-
-<head>
-       <title>{{page.page_title}}</title>
-       <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
-       <meta name="description" content="The Ardour Manual">
-       <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
-       <link href="{{page.bootstrap_path}}/css/bootstrap.min.css" rel="stylesheet">
-       <link href="/css/app.css" rel="stylesheet">
-{% if page.style %}
-       <link href="/css/{{page.style}}.css" rel="stylesheet">
-{% endif %}
-</head>
-
-<body>
-       <div class="container-fluid">
-               <div class="row-fluid">
-                       <div id="tree">
-
-                               <h1><a href="/"><img class="img-responsive" src="/images/logo.png" alt="The Ardour Manual" /></a></h1>
-
-                               <form id="custom-search-form" class="navbar-form" method="post" action="https://duckduckgo.com">
-                                       <div class="input-group">
-                                               <input type="text" class="form-control" placeholder="Search &hellip;" name="q">
-                                               <span class="input-group-btn">
-                                                       <button class="btn btn-default" type="submit"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button>
-                                                       <button class="btn btn-default" type="button" onclick="window.location.href='/ardourmanual.html'"><span class="glyphicon glyphicon-book" aria-hidden="true"></span></button>
-                                               </span>
-                                       </div>
-                                       <input type="hidden" name="sites" value="manual.ardour.org"><!-- domain -->
-                                       <input type="hidden" name="kh" value="1"> <!--HTTPS on/off -->
-                                       <input type="hidden" name="kl" value="wt-wt"> <!--region wt-wt = no region/worldwide -->
-                                       <input type="hidden" name="kg" value="p"> <!--get [g] vs post [p] -->
-                                       <input type="hidden" name="k7" value="w"> <!-- background colour -->
-                                       <input type="hidden" name="kj" value="#212a30"> <!-- results page header colour -->
-                                       <input type="hidden" name="kx" value="#59acd4"> <!-- URLs colour -->
-                                       <input type="hidden" name="k1" value="-1"> <!-- adverts on/off -->
-                                       <input type="hidden" name="k9" value="#59acd4"> <!-- links colour -->
-                                       <input type="hidden" name="kaa" value="#2d586c"> <!-- visited links colour -->
-                                       <input type="hidden" name="kae" value="#cc0000"> <!-- theme [changes result titles] colour -->
-                                       <input type="hidden" name="ka" value="junge"> <!-- link font -->
-                                       <input type="hidden" name="kt" value="junge"> <!-- text font -->
-                               </form>
-
-                               {% tree %}
-
-                       </div> <!-- tree -->
-
-                       <div class="span12" id="content">
-
-                               {% breadcrumbs %}
-                               {% githubedit %}
-
-                               <h1 class="title">{{ page.title }}</h1>
-
-                               {{ content }}
-
-                               <div class="clear"></div>
-
-                               {% prevnext %}
-
-                       </div> <!-- content -->
-               </div> <!-- row-fluid -->
-       </div> <!-- container-fluid -->
-
-
-       <script type="text/javascript">
-               // I'll go to hell for this
-               var isA = function(regex) { return navigator.userAgent.match(regex) };
-               var isAbout = function(regex) { return document.getElementsByTagName('h1')[1].textContent.match(regex) };
-
-               if ( (isA(/Mac/) || isAbout(/OS X/)) && (!isAbout(/Linux/)) ) {
-                       var e = document.getElementsByTagName('body')[0];
-                       e.className += ' mac';  // class magic for Cmd vs. Ctrl keys.
-               }
-       </script>
-
-</body>
-</html>
diff --git a/source/css/app.css b/source/css/app.css
deleted file mode 100644 (file)
index 28741c5..0000000
+++ /dev/null
@@ -1,452 +0,0 @@
-@font-face {
-    font-family: 'junge-regular';
-    src: url('junge-regular-webfont.woff2') format('woff2'),
-         url('junge-regular-webfont.woff') format('woff'),
-         url('junge-regular-webfont.ttf')  format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-body {
-  font-family: 'junge-regular';
-  font-size: 16px;
-  line-height: 2ex;
-}
-
-.clear {
-  clear:both;
-}
-
-#tree {
-  background-color: #212A30;
-  line-height: 1.8ex;
-  height: 100%;
-  overflow: scroll;
-  position: fixed;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  width: 20em;
-  padding: 1em 1em 2em 1.5em;
-}
-
-#tree h1 {
-  font-size: 1.75em;
-  margin-bottom: 1em;
-  font-weight: normal;
-}
-
-#tree ul {
-  padding-left: 1em;
-  list-style-type: none;
-}
-
-#tree a {
-  display: inline !important;
-  font-size: 0.88em;
-  line-height: 2em;
-  color: #E4E4E4;
-  border-bottom: 1px solid transparent;
-}
-
-#tree a:hover {
-  text-decoration: none;
-  border-bottom: 1px solid #aaa;
-}
-
-#tree .active > a {
-  display: inline;
-  color: #FF8080;
-}
-
-#content {
-  padding: 1em 2em 2ex 21em;
-  margin-left: 0;
-  line-height: 2em;
-}
-
-#content h1,
-#content h2,
-#content h3,
-#content h4 {
-  font-weight: normal;
-  padding-bottom: .3ex;
-}
-
-#content h1 {
-  font-size: 1.8em;
-  margin: 0 0 2ex 0;
-  padding-bottom: .8ex;
-  border-bottom: 2px solid #ccc;
-}
-
-#content h2 {
-  font-size: 1.3em;
-  margin: 2ex 0 1ex 0;
-  border-bottom: 2px solid #ddd;
-}
-
-#content h3 {
-  font-size: 1.2em;
-  margin: 1.5ex 0 1ex 0;
-  border-bottom: 1px solid #eee;
-}
-
-#content h4 {
-  font-size: 1.1em;
-  margin: 1.5ex 0 .5ex 0;
-  border-bottom: 1px solid #eee;
-}
-
-#content table {
-  width:100%;
-  margin: 1em 0;
-  padding: 0;
-  font-weight: normal;
-  text-align: left;
-}
-
-#content table tr {
-  border-bottom: 2px solid #eeeeee;
-}
-
-#content table tr:nth-child(odd){
-  background-color: white;
-}
-
-#content table tr:nth-child(even){
-  background-color: #f5f5f5;
-}
-
-#content table tr:hover {
-  background-color: #F2F9FF;
-}
-
-#content table td,
-#content table th {
-  margin: 0;
-  padding: .5em;
-}
-
-#content table th {
-  font-weight: bold;
-}
-
-#content table th.sub1 {
-  padding-left: 2em;
-}
-
-#content table th.sub2 {
-  padding-left: 4em;
-}
-
-#content table thead {
-  font-weight:bold;
-}
-
-#content table.dl th {
-  /* dl class (definition list) is for 2-columns tables that describe properties:
-  maximmizes the width of the 2nd (description) column */
-  vertical-align: top;
-  min-width: 20%;
-  white-space:nowrap
-}
-
-#content table.dl td {
-  vertical-align: top;
-  width: 100%;
-}
-
-#content ul,
-#content ol {
-       overflow: hidden;
-}
-
-#content figure {
-  display: table;
-}
-
-#content figcaption {
-       display: table-caption;
-       caption-side: bottom;
-       font-style: italic;
-  padding-top: 0.5em;
-  padding-bottom: 1em;
-}
-
-#content figcaption.center {
-       text-align: center;
-}
-
-#content figcaption.titleover {
-  text-align: center;
-       caption-side: top ;
-}
-
-#content figure.right {
-  margin: 0 0 1em 1em;
-  float: right;
-  clear: right;
-}
-
-#content figure.left {
-  margin: 0 1em 1em 0;
-  float: left;
-  clear: left;
-}
-
-#content figure.center {
-  margin: 1em auto 1em auto;
-  clear: both;
-}
-
-kbd {
-  display: inline-block;
-  min-width: 1em;
-  padding: .2em .3em;
-  font: normal .8em/1 sans-serif;
-  text-align: center;
-  text-decoration: none;
-  border-radius: .3em;
-  background: rgb(250, 250, 250);
-  background: linear-gradient(to top, rgb(210, 210, 210), rgb(255, 255, 255));
-  color:  rgb(50, 50, 50);
-  text-shadow: 0 0 2px rgb(255, 255, 255);
-  box-shadow: inset 0 0 1px rgb(255, 255, 255), inset 0 0 .4em rgb(200, 200, 200), 0 .1em 0 rgb(130, 130, 130), 0 .11em 0 rgba(0, 0, 0, .4), 0 .1em .11em rgba(0, 0, 0, .9);
-  white-space:nowrap;
-  text-transform:capitalize;
-}
-
-kbd.def {
-  font-weight:bolder;
-       margin-right:.2em;
-}
-
-kbd.input,
-kbd.cmd,
-kbd.osc {
-  font-family:mono;
-  border-width:0;
-  text-transform:none;
-}
-
-kbd.input {
-  background:none;
-  border-radius: 0;
-}
-
-kbd.cmd {
-  display:block;
-  width:100%;
-  margin-bottom:1ex;
-  text-transform:none;
-  background: rgb(220, 220, 220);
-  text-shadow: none;
-  box-shadow: none;
-  text-align:left;
-}
-
-kbd.cmd.lin:before {
-  content: 'user@linux:~ ';
-  color:#999999;
-}
-
-kbd.cmd.mac:before {
-  content: 'MacBook:~/Desktop User\$ ';
-  color:#999999;
-}
-
-kbd.cmd.win:before {
-  content: 'C:\\Users\\myAccount> ';
-  color:#999999;
-}
-
-kbd.optoff,
-kbd.option {
-  border:none;
-  background:none;
-}
-
-kbd.optoff:before {
-  content:url('/images/checkbox-unchecked.png');
-  margin: 0 1em 0 0;
-  vertical-align:middle;
-}
-
-kbd.option:before {
-  content:url('/images/checkbox-checked.png');
-  margin: 0 1em 0 0;
-  vertical-align:middle;
-}
-
-kbd.menu {
-  border:none;
-  background:none;
-  font-weight:bold;
-  font-stretch:extra-condensed;
-  white-space:normal;
-}
-
-kbd.osc {
-  border:none;
-  background: rgb(208, 208, 243);
-  font-stretch:extra-condensed;
-  white-space: nowrap;
-  text-align:left;
-}
-
-kbd.fader,
-kbd.knob,
-kbd.button {
-  background: rgb(174, 174, 217);
-  background: linear-gradient(to top, rgb(174, 174, 217), rgb(221, 221, 255));
-  color:#000044;
-}
-
-kbd.fader {
-  border-width: 1px 1px 9px 9px;
-}
-
-kbd.knob {
-  border-radius:12px;
-  border-width: 1px 1px 9px 9px;
-}
-
-kbd.button {
-  border-radius:8px;
-  border-width: 1px 1px 3px 3px;
-}
-
-kbd.mouse {
-  border-radius:10px;
-}
-
-samp {
-  font-family:mono;
-  color:#666666;
-  background-color:#EBEBEB;
-  margin-left: .5em;
-  margin-right: .5em;
-}
-
-#content dfn {
-  font-weight: bold;
-  font-style: normal;
-}
-
-#content img.mini {
-  width: 200px;
-}
-
-#content img.mini:hover {
-  width: 100%;
-}
-
-#content p.center {
-       text-align:center;
-}
-
-#content .note,
-#content .warning,
-#content .fixme {
-  min-height: 1.5ex;
-  padding: 1em;
-  margin-bottom: 1em;
-  border-style: solid;
-  border-width: 1px 1px 1px 8px;
-}
-
-#content code {
-  font-size: .9em;
-  color: #555;
-}
-
-#content .note {
-  border-color: #e3e3e3;
-  background-color: #f5f5f5;
-}
-
-#content .warning {
-  border-color: #995555;
-  background-color: #ffeeee;
-}
-
-#content .fixme {
-  border-color: #999944;
-  background-color: #f0f0e0;
-  font-weight:bold;
-}
-
-.fixme:before {
-  content:'FIXME: ';
-  font-style: italic;
-  font-size:2em;
-}
-
-/* Keyboard modifiers */
-.mod1:before {        content: "Ctrl ";}
-.mod2:before {        content: "Alt ";}
-.mod3:before {        content: "Shift ";}
-.mod4:before {        content: "Win ";}
-.mod12:before {       content: "Ctrl Alt ";}
-.mod13:before {       content: "Ctrl Shift ";}
-.mod14:before {       content: "Ctrl Win ";}
-.mod23:before {       content: "Alt Shift ";}
-.kp:before {          content: "Keypad ";}
-/* Variants *without* space after them (yes, these are needed!) */
-.mod1n:before {       content: "Ctrl";}
-.mod2n:before {       content: "Alt";}
-.mod3n:before {       content: "Shift";}
-.mod4n:before {       content: "Win";}
-.mod12n:before {      content: "Ctrl Alt";}
-.mod13n:before {      content: "Ctrl Shift";}
-.mod14n:before {      content: "Ctrl Win";}
-.mod23n:before {      content: "Alt Shift";}
-/* Automagic translation for Mac based display */
-.mac .mod1:before {   content: "Cmd ";}
-.mac .mod2:before {   content: "Ctrl ";}
-.mac .mod3:before {   content: "Shift ";}
-.mac .mod4:before {   content: "Opt ";}
-.mac .mod12:before {  content: "Cmd Ctrl ";}
-.mac .mod13:before {  content: "Cmd Shift ";}
-.mac .mod14:before {  content: "Cmd Opt ";}
-.mac .mod23:before {  content: "Ctrl Shift ";}
-/* No space variants (Mac based) */
-.mac .mod1n:before {  content: "Cmd";}
-.mac .mod2n:before {  content: "Ctrl";}
-.mac .mod3n:before {  content: "Shift";}
-.mac .mod4n:before {  content: "Opt";}
-.mac .mod12n:before { content: "Cmd Ctrl";}
-.mac .mod13n:before { content: "Cmd Shift";}
-.mac .mod14n:before { content: "Cmd Opt";}
-.mac .mod23n:before { content: "Ctrl Shift";}
-
-@media (max-width: 800px) {
-  #tree {
-    position: relative;
-    height: 250px;
-    width: 100%;
-    margin-top: 20px;
-  }
-  #content {
-    padding-left: 20px;
-    margin-top: 0px;
-  }
-}
-
-/* for the TOC */
-#content p.chapter,
-#content p.subchapter,
-#content p.section,
-#content p.subsection {
-  line-height:1em;
-}
-#content p.chapter { padding-top: 1em; padding-left: 1em; padding-bottom:1em; }
-#content p.subchapter { padding-left: 4em; }
-#content p.section { padding-left: 6em; }
-#content p.subsection { padding-left: 8em; }
-
-/* for images sliced in divs, as in http://manual.ardour.org/ardours-interface/about/ */
-.container { position: relative; border: none; }
-.hoverimg { position: absolute; border: none; }
-.hoverimg:hover{ z-index:100; box-shadow: 0 0 .2em .2em lightgreen; }