]> git.donarmstrong.com Git - lilypond.git/blob - scripts/build/website_post.py
Merge branch 'fixedmerge' into HEAD
[lilypond.git] / scripts / build / website_post.py
1 #!@PYTHON@
2 #-*- coding: utf-8 -*-
3
4 ##### This is web_post.py. This script deals with translations
5 ##### in the "make website" target.
6
7 import sys
8 import os
9 import glob
10 import re
11
12 ###### Translation data, move out, see create-weblinks-itexi.py
13 translations = {
14     'cs': {
15         'English': 'Česky',
16         'Other languages': 'Jiné jazyky',
17         },
18     'de': {
19         'English': 'Deutsch',
20         'Other languages': 'Andere Sprachen',
21         },
22     'es': {
23         'English': 'Español',
24         'Other languages': 'Otros idiomas',
25         },
26     'fr': {
27         'English': 'Français',
28         'Other languages': 'Autres langues',
29         },
30     'hu': {
31         'English': 'Magyar',
32         'Other languages': 'Más nyelvek',
33         },
34     'it': {
35         'English': 'Italiano',
36         'Other languages': 'Altre lingue',
37         },
38     'ja': {
39         'English': '日本語',
40         'Other languages': '他の言語',
41         },
42     'nl': {
43         'English': 'Nederlands',
44         'Other languages': 'Andere talen',
45         },
46     'zh': {
47         'English': '中文',
48         'Other languages': '其它语言',
49         },
50     }
51
52 # needs at least: make -C po or make- C Documentation/po
53 HAVE_GETTEXT = False
54
55 ####  this breaks on lilypond.org
56 # Keep some freakin' gettext compatibility
57 #if HAVE_GETTEXT:
58 #    import lilylib as ly;
59 #    global _;_=ly._
60 #else: # poor mans translation
61 #    def _ (string, lang=os.environ['LANG']):
62 #        return translations.get (lang.split ('_')[0], {}).get (string, string)
63
64 #### this works on lilypond.org
65 def _ (string, lang):
66     return translations.get (lang.split ('_')[0], {}).get (string, string)
67
68
69 exclude_manuals = [
70     '/music-glossary',
71     '/snippets',
72     '/internals',
73     '/contributor'
74 ]
75
76 ###### Actual program
77
78 dir = sys.argv[1]
79
80 os.chdir(dir)
81 html_files = glob.glob( '*.html' )
82
83
84 ### messy way to get all languages
85 langs_set = set()
86 for file in html_files:
87     file_split = file.split('.')
88     if (len(file_split) == 2):
89         # it's English
90         lang = ''
91     elif (len(file_split) == 3):
92         # it's a translation
93         lang = file_split[1]
94     # make sure it's a translated language
95     if lang != "en":
96         langs_set.add(lang)
97 langs = list(langs_set)
98 langs.sort()
99
100
101 ### helper functions
102 def addLangExt(filename, lang, ext):
103     text = filename
104     exclude = 0
105     for dir in exclude_manuals:
106         if (text.find(dir) >= 0):
107             exclude = 1
108     if (not (exclude or (lang==""))):
109         text += "." + lang
110     text += "." + ext
111     return text
112
113 def makeFooter (filename, currentLang):
114     # TODO: add link to automatic language selection?
115     # still need to include this page in the new webpages somewhere
116     footer = '''<p id="languages">
117 %(other)s: %(lst)s.
118 </p>
119 '''
120     def link (lang):
121         str = '''<a href="%(file_name)s">%(language_name)s</a>'''
122         file_name = addLangExt (filename, lang, 'html')
123         language_name = _ ('English', lang)
124         return str % locals ()
125     lst = ', '.join ([link (lang) for lang in langs if lang != currentLang])
126     other = _ ('Other languages', currentLang)
127     return footer % locals ()
128
129 def getLocalHref(line):
130     match = re.search(r'href=[\'"]?([^\'" >]+)', line)
131     if match:
132         url = match.group(0)[6:]
133         if (url[0:7] == "http://"):
134             url = ''
135         # strip any '#'
136         omit = url.find('#')
137         if (omit >= 0):
138             url = url[0:omit]
139     else:
140         url = ''
141     return url
142
143
144
145
146 ### main loop
147 for file in html_files:
148     ### we want to strip the .html and get the lang
149     file_split = file.split('.')
150     file_base = os.path.basename( file_split[0] )
151     if (len(file_split) == 2):
152         # it's English
153         lang = ''
154         # possibly necessary for automatic language selection
155         file_symlink = file.replace(".html", ".en.html")
156         if not os.path.lexists (file_symlink):
157             os.symlink (file, file_symlink)
158     elif (len(file_split) == 3):
159         # it's a translation
160         lang = file_split[1]
161         if (lang == "en"):
162             # it's a symlink
163             continue
164     else:
165         # it's a mess
166         print "is a mess"
167         continue
168
169     ### we need to replace parts of the file
170     lines = open(file).readlines()
171     os.remove(file)
172     outfile = open(file, 'w')
173
174     lang_footer = makeFooter (file_base, lang)
175
176     ### alter file
177     for line in lines:
178         ### alter links as appropriate
179         link = getLocalHref(line)
180         if (link != ""):
181             # questionable
182             if (not link.startswith("../doc/")):
183                 if (link.endswith(".html")):
184                     langlink = addLangExt(link[:-5], lang, "html")
185                     line = line.replace(link, langlink)
186                 if (link.endswith(".pdf")):
187                     langlink = addLangExt(link[:-4], lang, "pdf")
188                     line = line.replace(link, langlink)
189         ### add google tracker header
190         if (line.find("</head>") >= 0):
191             outfile.write("""<!-- Google tracking !-->
192 <script src="http://www.google-analytics.com/urchin.js"
193 type="text/javascript">
194 </script>
195 <script type="text/javascript">
196 _uacct = "UA-68969-1";
197 urchinTracker();
198 </script>
199 """);
200         #### add google tracker goals
201         if (line.find("href=\"http://download.linuxaudio.org") >= 0):
202             # TODO: more ugly hardcoding to make releases hard. :(
203             if (line.find('2.14') >= 0):
204                 line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.14\');\" href=')
205             elif (line.find('2.15') >= 0):
206                 line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.15\');\" href=')
207         ### add language selection footer
208         if (line.find("<div id=\"verifier_texinfo\">") >= 0):
209             outfile.write("<div id=\"footer\">\n")
210             outfile.write( lang_footer )
211         if (line.find("</body") >= 0):
212             outfile.write("</div>\n")
213         outfile.write(line)
214     outfile.close()
215