]> git.donarmstrong.com Git - lilypond.git/blob - scripts/build/website_post.py
Merge branch 'master' into lilypond/translation
[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     footer = '''<p id="languages">
115 %(other)s: %(lst)s.
116 <br>
117 %(browser_language)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     browser_lang = _ ('About <a href="%s">automatic language selection</a>.', currentLang)
128     browser_language_url = "http://www.lilypond.org/website/misc/browser-language"
129     browser_language = browser_lang % browser_language_url
130     return footer % locals ()
131
132 def getLocalHref(line):
133     match = re.search(r'href=[\'"]?([^\'" >]+)', line)
134     if match:
135         url = match.group(0)[6:]
136         if (url[0:7] == "http://"):
137             url = ''
138         # strip any '#'
139         omit = url.find('#')
140         if (omit >= 0):
141             url = url[0:omit]
142     else:
143         url = ''
144     return url
145
146
147
148
149 ### main loop
150 for file in html_files:
151     ### we want to strip the .html and get the lang
152     file_split = file.split('.')
153     file_base = os.path.basename( file_split[0] )
154     if (len(file_split) == 2):
155         # it's English
156         lang = ''
157         # possibly necessary for automatic language selection
158         file_symlink = file.replace(".html", ".en.html")
159         if not os.path.lexists (file_symlink):
160             os.symlink (file, file_symlink)
161     elif (len(file_split) == 3):
162         # it's a translation
163         lang = file_split[1]
164         if (lang == "en"):
165             # it's a symlink
166             continue
167     else:
168         # it's a mess
169         print "is a mess"
170         continue
171
172     ### we need to replace parts of the file
173     lines = open(file).readlines()
174     os.remove(file)
175     outfile = open(file, 'w')
176
177     lang_footer = makeFooter (file_base, lang)
178
179     ### alter file
180     for line in lines:
181         ### alter links as appropriate
182         link = getLocalHref(line)
183         if (link != ""):
184             # questionable
185             if (not link.startswith("../doc/")):
186                 if (link.endswith(".html")):
187                     langlink = addLangExt(link[:-5], lang, "html")
188                     line = line.replace(link, langlink)
189                 if (link.endswith(".pdf")):
190                     langlink = addLangExt(link[:-4], lang, "pdf")
191                     line = line.replace(link, langlink)
192         ### add google tracker header
193         if (line.find("</head>") >= 0):
194             outfile.write("""<!-- Google tracking !-->
195 <script src="http://www.google-analytics.com/urchin.js"
196 type="text/javascript">
197 </script>
198 <script type="text/javascript">
199 _uacct = "UA-68969-1";
200 urchinTracker();
201 </script>
202 """);
203         #### add google tracker goals
204         if (line.find("href=\"http://download.linuxaudio.org") >= 0):
205             # TODO: more ugly hardcoding to make releases hard. :(
206             if (line.find('2.14') >= 0):
207                 line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.14\');\" href=')
208             elif (line.find('2.15') >= 0):
209                 line = line.replace('a href=', 'a onClick=\"javascript:urchinTracker(\'/download/v2.15\');\" href=')
210         ### add language selection footer
211         if (line.find("<div id=\"verifier_texinfo\">") >= 0):
212             outfile.write("<div id=\"footer\">\n")
213             outfile.write( lang_footer )
214         if (line.find("</body") >= 0):
215             outfile.write("</div>\n")
216         outfile.write(line)
217     outfile.close()
218