]> git.donarmstrong.com Git - lilypond.git/blobdiff - scripts/build/website_post.py
Imported Upstream version 2.14.2
[lilypond.git] / scripts / build / website_post.py
diff --git a/scripts/build/website_post.py b/scripts/build/website_post.py
new file mode 100644 (file)
index 0000000..551da46
--- /dev/null
@@ -0,0 +1,215 @@
+#!@PYTHON@
+#-*- coding: utf-8 -*-
+
+##### This is web_post.py. This script deals with translations
+##### in the "make website" target.
+
+import sys
+import os
+import glob
+import re
+
+###### Translation data, move out, see create-weblinks-itexi.py
+translations = {
+    'cs': {
+        'English': 'Česky',
+        'Other languages': 'Jiné jazyky',
+        },
+    'de': {
+        'English': 'Deutsch',
+        'Other languages': 'Andere Sprachen',
+        },
+    'es': {
+        'English': 'Español',
+        'Other languages': 'Otros idiomas',
+        },
+    'fr': {
+        'English': 'Français',
+        'Other languages': 'Autres langues',
+        },
+    'hu': {
+        'English': 'Magyar',
+        'Other languages': 'Más nyelvek',
+        },
+    'it': {
+        'English': 'Italiano',
+        'Other languages': 'Altre lingue',
+        },
+    'ja': {
+        'English': '日本語',
+        'Other languages': '他の言語',
+        },
+    'nl': {
+        'English': 'Nederlands',
+        'Other languages': 'Andere talen',
+        },
+    'zh': {
+        'English': '中文',
+        'Other languages': '其它语言',
+        },
+    }
+
+# needs at least: make -C po or make- C Documentation/po
+HAVE_GETTEXT = False
+
+####  this breaks on lilypond.org
+# Keep some freakin' gettext compatibility
+#if HAVE_GETTEXT:
+#    import lilylib as ly;
+#    global _;_=ly._
+#else: # poor mans translation
+#    def _ (string, lang=os.environ['LANG']):
+#        return translations.get (lang.split ('_')[0], {}).get (string, string)
+
+#### this works on lilypond.org
+def _ (string, lang):
+    return translations.get (lang.split ('_')[0], {}).get (string, string)
+
+
+exclude_manuals = [
+    '/music-glossary',
+    '/snippets',
+    '/internals',
+    '/contributor'
+]
+
+###### Actual program
+
+dir = sys.argv[1]
+
+os.chdir(dir)
+html_files = glob.glob( '*.html' )
+
+
+### messy way to get all languages
+langs_set = set()
+for file in html_files:
+    file_split = file.split('.')
+    if (len(file_split) == 2):
+        # it's English
+        lang = ''
+    elif (len(file_split) == 3):
+        # it's a translation
+        lang = file_split[1]
+    # make sure it's a translated language
+    if lang != "en":
+        langs_set.add(lang)
+langs = list(langs_set)
+langs.sort()
+
+
+### helper functions
+def addLangExt(filename, lang, ext):
+    text = filename
+    exclude = 0
+    for dir in exclude_manuals:
+        if (text.find(dir) >= 0):
+            exclude = 1
+    if (not (exclude or (lang==""))):
+        text += "." + lang
+    text += "." + ext
+    return text
+
+def makeFooter (filename, currentLang):
+    # TODO: add link to automatic language selection?
+    # still need to include this page in the new webpages somewhere
+    footer = '''<p id="languages">
+%(other)s: %(lst)s.
+</p>
+'''
+    def link (lang):
+        str = '''<a href="%(file_name)s">%(language_name)s</a>'''
+        file_name = addLangExt (filename, lang, 'html')
+        language_name = _ ('English', lang)
+        return str % locals ()
+    lst = ', '.join ([link (lang) for lang in langs if lang != currentLang])
+    other = _ ('Other languages', currentLang)
+    return footer % locals ()
+
+def getLocalHref(line):
+    match = re.search(r'href=[\'"]?([^\'" >]+)', line)
+    if match:
+        url = match.group(0)[6:]
+        if (url[0:7] == "http://"):
+            url = ''
+        # strip any '#'
+        omit = url.find('#')
+        if (omit >= 0):
+            url = url[0:omit]
+    else:
+        url = ''
+    return url
+
+
+
+
+### main loop
+for file in html_files:
+    ### we want to strip the .html and get the lang
+    file_split = file.split('.')
+    file_base = os.path.basename( file_split[0] )
+    if (len(file_split) == 2):
+        # it's English
+        lang = ''
+        # possibly necessary for automatic language selection
+        file_symlink = file.replace(".html", ".en.html")
+        if (not (os.path.exists(file_symlink))):
+            os.symlink (file, file_symlink)
+    elif (len(file_split) == 3):
+        # it's a translation
+        lang = file_split[1]
+        if (lang == "en"):
+            # it's a symlink
+            continue
+    else:
+        # it's a mess
+        print "is a mess"
+        continue
+
+    ### we need to replace parts of the file
+    lines = open(file).readlines()
+    os.remove(file)
+    outfile = open(file, 'w')
+
+    lang_footer = makeFooter (file_base, lang)
+
+    ### alter file
+    for line in lines:
+        ### alter links as appropriate
+        link = getLocalHref(line)
+        if (link != ""):
+            # questionable
+            if (not link.startswith("../doc/")):
+                if (link.endswith(".html")):
+                   langlink = addLangExt(link[:-5], lang, "html")
+                    line = line.replace(link, langlink)
+                if (link.endswith(".pdf")):
+                   langlink = addLangExt(link[:-4], lang, "pdf")
+                    line = line.replace(link, langlink)
+        ### add google tracker header
+        if (line.find("</head>") >= 0):
+            outfile.write("""<!-- Google tracking !-->
+<script src="http://www.google-analytics.com/urchin.js"
+type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-68969-1";
+urchinTracker();
+</script>
+""");
+        #### add google tracker goals
+        if (line.find("href=\"http://download.linuxaudio.org") >= 0):
+            # TODO: more ugly hardcoding to make releases hard. :(
+            if (line.find('2.12') >= 0):
+                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.12\');\" href=')
+            elif (line.find('2.13') >= 0):
+                line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.13\');\" href=')
+        ### add language selection footer
+        if (line.find("<div id=\"verifier_texinfo\">") >= 0):
+            outfile.write("<div id=\"footer\">\n")
+            outfile.write( lang_footer )
+        if (line.find("</body") >= 0):
+            outfile.write("</div>\n")
+        outfile.write(line)
+    outfile.close()
+