Tidied up generate-html.py, added more strings to be translated
This commit is contained in:
parent
31c23e23b7
commit
5c7963b2d3
|
@ -11,6 +11,7 @@ import urlmapper
|
||||||
reload(sys)
|
reload(sys)
|
||||||
sys.setdefaultencoding('utf8')
|
sys.setdefaultencoding('utf8')
|
||||||
|
|
||||||
|
|
||||||
def cssify(value):
|
def cssify(value):
|
||||||
value = slugify(value);
|
value = slugify(value);
|
||||||
if value[0] == '3' or value[0] == '5':
|
if value[0] == '3' or value[0] == '5':
|
||||||
|
@ -18,6 +19,7 @@ def cssify(value):
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
|
||||||
def slugify(value):
|
def slugify(value):
|
||||||
"""
|
"""
|
||||||
Normalizes string, converts to lowercase, removes non-alpha characters,
|
Normalizes string, converts to lowercase, removes non-alpha characters,
|
||||||
|
@ -28,6 +30,7 @@ def slugify(value):
|
||||||
value = re.sub('[^\w\s-]', '', value).strip().lower()
|
value = re.sub('[^\w\s-]', '', value).strip().lower()
|
||||||
return re.sub('[-\s]+', '_', value)
|
return re.sub('[-\s]+', '_', value)
|
||||||
|
|
||||||
|
|
||||||
def load_overlay(overlay):
|
def load_overlay(overlay):
|
||||||
try:
|
try:
|
||||||
data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay))
|
data = markjaml.load('src/{}/overlay/{}.md'.format(lang, overlay))
|
||||||
|
@ -37,20 +40,22 @@ def load_overlay(overlay):
|
||||||
except IOError:
|
except IOError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
details = []
|
details = []
|
||||||
|
|
||||||
|
if 'type' not in loaded:
|
||||||
|
loaded['type'] = 'addon'
|
||||||
|
|
||||||
if 'manufacturer' in loaded:
|
if 'manufacturer' in loaded:
|
||||||
details.append(strings['made_by'].format(manufacturer=loaded['manufacturer']))
|
details.append('* ' + strings['made_by'].format(manufacturer=loaded['manufacturer']))
|
||||||
|
|
||||||
if 'pincount' in loaded:
|
if 'pincount' in loaded:
|
||||||
pincount = int(loaded['pincount'])
|
pincount = int(loaded['pincount'])
|
||||||
if pincount == 40:
|
if pincount == 40:
|
||||||
details.append(strings['type_hat'])
|
details.append('* ' + strings['type_hat'])
|
||||||
elif pincount == 26:
|
elif pincount == 26:
|
||||||
details.append(strings['type_classic'])
|
details.append('* ' + strings['type_classic'])
|
||||||
else:
|
else:
|
||||||
details.append(strings['pin_header'].format(pincount))
|
details.append('* ' + strings['pin_header'].format(pincount))
|
||||||
|
|
||||||
if 'pin' in loaded:
|
if 'pin' in loaded:
|
||||||
uses_5v = False
|
uses_5v = False
|
||||||
|
@ -73,28 +78,28 @@ def load_overlay(overlay):
|
||||||
uses += 1
|
uses += 1
|
||||||
|
|
||||||
if uses > 0:
|
if uses > 0:
|
||||||
details.append('* Uses {} GPIO pins'.format(uses))
|
details.append(strings['uses_n_gpio_pins'].format(uses))
|
||||||
|
|
||||||
if '3' in loaded['pin'] and '5' in loaded['pin']:
|
if '3' in loaded['pin'] and '5' in loaded['pin']:
|
||||||
pin_3 = loaded['pin']['3']
|
pin_3 = loaded['pin']['3']
|
||||||
pin_5 = loaded['pin']['5']
|
pin_5 = loaded['pin']['5']
|
||||||
if 'mode' in pin_3 and 'mode' in pin_5:
|
if 'mode' in pin_3 and 'mode' in pin_5:
|
||||||
if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c':
|
if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c':
|
||||||
details.append(strings['uses_i2c'])
|
details.append('* ' + strings['uses_i2c'])
|
||||||
|
|
||||||
if 'url' in loaded:
|
if 'url' in loaded:
|
||||||
details.append('* [More Information]({url})'.format(url=loaded['url']))
|
details.append('* [{text}]({url})'.format(text=strings['more_information'], url=loaded['url']))
|
||||||
|
|
||||||
if 'github' in loaded:
|
if 'github' in loaded:
|
||||||
details.append('* [GitHub Repository]({url})'.format(url=loaded['github']))
|
details.append('* [{text}]({url})'.format(text=strings['github_repository'], url=loaded['github']))
|
||||||
|
|
||||||
if 'buy' in loaded:
|
if 'buy' in loaded:
|
||||||
details.append('* [Buy Now]({url})'.format(url=loaded['buy']))
|
details.append('* [{text}]({url})'.format(text=strings['buy_now'], url=loaded['buy']))
|
||||||
|
|
||||||
|
|
||||||
|
if loaded['type'] != 'info':
|
||||||
loaded['long_description'] = '{}\n{}'.format(loaded['long_description'], markdown.markdown('\n'.join(details)))
|
loaded['long_description'] = '{}\n{}'.format(loaded['long_description'], markdown.markdown('\n'.join(details)))
|
||||||
|
|
||||||
if not 'page_url' in loaded:
|
if 'page_url' not in loaded:
|
||||||
loaded['page_url'] = slugify(loaded['name'])
|
loaded['page_url'] = slugify(loaded['name'])
|
||||||
|
|
||||||
loaded['rendered_html'] = render_overlay_page(loaded)
|
loaded['rendered_html'] = render_overlay_page(loaded)
|
||||||
|
@ -104,6 +109,7 @@ def load_overlay(overlay):
|
||||||
select_overlays.append((loaded['page_url'], loaded['name']))
|
select_overlays.append((loaded['page_url'], loaded['name']))
|
||||||
return loaded
|
return loaded
|
||||||
|
|
||||||
|
|
||||||
def load_md(filename):
|
def load_md(filename):
|
||||||
filename = 'src/{}/{}'.format(lang, filename)
|
filename = 'src/{}/{}'.format(lang, filename)
|
||||||
try:
|
try:
|
||||||
|
@ -114,6 +120,7 @@ def load_md(filename):
|
||||||
print('Unable to load markdown from {}'.format(filename))
|
print('Unable to load markdown from {}'.format(filename))
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
||||||
def render_pin_text(pin_num, pin_url, pin_name, pin_functions, pin_subtext):
|
def render_pin_text(pin_num, pin_url, pin_name, pin_functions, pin_subtext):
|
||||||
return '<article class="{pin_url}"><h1>{pin_name}</h1>{pin_functions}{pin_subtext}{pin_text}</article>'.format(
|
return '<article class="{pin_url}"><h1>{pin_name}</h1>{pin_functions}{pin_subtext}{pin_text}</article>'.format(
|
||||||
pin_url=pin_url,
|
pin_url=pin_url,
|
||||||
|
@ -122,8 +129,9 @@ def render_pin_text(pin_num, pin_url, pin_name, pin_functions, pin_subtext):
|
||||||
pin_subtext=pin_subtext,
|
pin_subtext=pin_subtext,
|
||||||
pin_text=load_md('pin/pin-{}.md'.format(pin_num)))
|
pin_text=load_md('pin/pin-{}.md'.format(pin_num)))
|
||||||
|
|
||||||
|
|
||||||
def render_overlay_page(overlay):
|
def render_overlay_page(overlay):
|
||||||
if overlay == None:
|
if overlay is None:
|
||||||
return ''
|
return ''
|
||||||
return '<article class="page_{}">{}</article>'.format(slugify(overlay['name']), overlay['long_description'])
|
return '<article class="page_{}">{}</article>'.format(slugify(overlay['name']), overlay['long_description'])
|
||||||
|
|
||||||
|
@ -132,19 +140,19 @@ def render_alternate(handle, name):
|
||||||
handle = slugify(handle.lower())
|
handle = slugify(handle.lower())
|
||||||
return '<span class="alternate legend_{}">{}</span>'.format(handle, name)
|
return '<span class="alternate legend_{}">{}</span>'.format(handle, name)
|
||||||
|
|
||||||
|
|
||||||
def render_pin_page(pin_num):
|
def render_pin_page(pin_num):
|
||||||
pin = pinout.pins[str(pin_num)]
|
pin = pinout.pins[str(pin_num)]
|
||||||
pin_url = pin['name']
|
pin_url = pin['name']
|
||||||
|
|
||||||
if pin_url == 'Ground':
|
if pin_url == 'Ground':
|
||||||
return (None, None, None)
|
return None, None, None
|
||||||
|
|
||||||
pin_text_name = pin['name']
|
pin_text_name = pin['name']
|
||||||
|
|
||||||
pin_subtext = []
|
pin_subtext = []
|
||||||
|
|
||||||
|
pin_subtext.append(strings['physical_pin_n'].format(pin_num))
|
||||||
pin_subtext.append('Physical pin {}'.format(pin_num))
|
|
||||||
|
|
||||||
if 'scheme' in pin:
|
if 'scheme' in pin:
|
||||||
if 'bcm' in pin['scheme']:
|
if 'bcm' in pin['scheme']:
|
||||||
|
@ -161,7 +169,7 @@ def render_pin_page(pin_num):
|
||||||
pin_subtext.append('Wiring Pi pin {}'.format(wiringpi))
|
pin_subtext.append('Wiring Pi pin {}'.format(wiringpi))
|
||||||
if 'bcmAlt' in pin['scheme']:
|
if 'bcmAlt' in pin['scheme']:
|
||||||
bcmAlt = pin['scheme']['bcmAlt']
|
bcmAlt = pin['scheme']['bcmAlt']
|
||||||
pin_subtext.append('BCM pin {} on Rev 1 ( very early ) Pi'.format(bcmAlt))
|
pin_subtext.append(strings['bcm_pin_rev1_pi'].format(bcmAlt))
|
||||||
|
|
||||||
if 'description' in pin:
|
if 'description' in pin:
|
||||||
pin_text_name = '{} ({})'.format(pin_text_name, pin['description'])
|
pin_text_name = '{} ({})'.format(pin_text_name, pin['description'])
|
||||||
|
@ -192,9 +200,6 @@ def render_pin_page(pin_num):
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>'''.format(headings='</th><th>'.join(fn_headings), functions='</td><td>'.join(fn_functions))
|
</table>'''.format(headings='</th><th>'.join(fn_headings), functions='</td><td>'.join(fn_functions))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
pin_url = slugify('pin{}_{}'.format(pin_num, pin_url))
|
pin_url = slugify('pin{}_{}'.format(pin_num, pin_url))
|
||||||
|
|
||||||
pin_text = render_pin_text(
|
pin_text = render_pin_text(
|
||||||
|
@ -205,13 +210,12 @@ def render_pin_page(pin_num):
|
||||||
'<ul><li>{}</li></ul>'.format('</li><li>'.join(pin_subtext))
|
'<ul><li>{}</li></ul>'.format('</li><li>'.join(pin_subtext))
|
||||||
)
|
)
|
||||||
# if pin_text != None:
|
# if pin_text != None:
|
||||||
return (pin_url, pin_text, pin_text_name) #pages[pin_url] = pin_text
|
return pin_url, pin_text, pin_text_name # pages[pin_url] = pin_text
|
||||||
|
|
||||||
|
|
||||||
def render_pin(pin_num, selected_url, overlay=None):
|
def render_pin(pin_num, selected_url, overlay=None):
|
||||||
pin = pinout.pins[str(pin_num)]
|
pin = pinout.pins[str(pin_num)]
|
||||||
|
|
||||||
|
|
||||||
pin_type = list([x.strip() for x in pin['type'].lower().split('/')])
|
pin_type = list([x.strip() for x in pin['type'].lower().split('/')])
|
||||||
pin_url = pin['name']
|
pin_url = pin['name']
|
||||||
pin_name = pin['name']
|
pin_name = pin['name']
|
||||||
|
@ -222,7 +226,7 @@ def render_pin(pin_num, selected_url, overlay=None):
|
||||||
if 'bcm' in pin['scheme']:
|
if 'bcm' in pin['scheme']:
|
||||||
bcm_pin = 'bcm' + str(pin['scheme']['bcm'])
|
bcm_pin = 'bcm' + str(pin['scheme']['bcm'])
|
||||||
|
|
||||||
if overlay != None and ( pin_num in overlay['pin'] or str(pin_num) in overlay['pin'] or bcm_pin in overlay['pin']):
|
if overlay is not None and (pin_num in overlay['pin'] or str(pin_num) in overlay['pin'] or bcm_pin in overlay['pin']):
|
||||||
|
|
||||||
if pin_num in overlay['pin']:
|
if pin_num in overlay['pin']:
|
||||||
overlay_pin = overlay['pin'][pin_num]
|
overlay_pin = overlay['pin'][pin_num]
|
||||||
|
@ -231,7 +235,7 @@ def render_pin(pin_num, selected_url, overlay=None):
|
||||||
else:
|
else:
|
||||||
overlay_pin = overlay['pin'][bcm_pin]
|
overlay_pin = overlay['pin'][bcm_pin]
|
||||||
|
|
||||||
if overlay_pin == None:
|
if overlay_pin is None:
|
||||||
overlay_pin = {}
|
overlay_pin = {}
|
||||||
|
|
||||||
pin_used = True
|
pin_used = True
|
||||||
|
@ -268,7 +272,6 @@ def render_pin(pin_num, selected_url, overlay=None):
|
||||||
if pin_used:
|
if pin_used:
|
||||||
selected += ' overlay-pin'
|
selected += ' overlay-pin'
|
||||||
|
|
||||||
|
|
||||||
pin_url = pin_url + url_suffix
|
pin_url = pin_url + url_suffix
|
||||||
|
|
||||||
return '<li class="pin{pin_num} {pin_type}{pin_selected}"><a href="{pin_url}" title="{pin_title}"><span class="default"><span class="phys">{pin_num}</span> {pin_name}</span><span class="pin"></span></a></li>\n'.format(
|
return '<li class="pin{pin_num} {pin_type}{pin_selected}"><a href="{pin_url}" title="{pin_title}"><span class="default"><span class="phys">{pin_num}</span> {pin_name}</span><span class="pin"></span></a></li>\n'.format(
|
||||||
|
@ -281,6 +284,7 @@ def render_pin(pin_num, selected_url, overlay=None):
|
||||||
langcode=lang
|
langcode=lang
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def render_nav(url, overlay=None):
|
def render_nav(url, overlay=None):
|
||||||
html_odd = ''
|
html_odd = ''
|
||||||
html_even = ''
|
html_even = ''
|
||||||
|
@ -293,6 +297,7 @@ def render_nav(url, overlay=None):
|
||||||
<ul class="top">
|
<ul class="top">
|
||||||
{}</ul>'''.format(html_odd, html_even)
|
{}</ul>'''.format(html_odd, html_even)
|
||||||
|
|
||||||
|
|
||||||
def get_hreflang_urls(src):
|
def get_hreflang_urls(src):
|
||||||
hreflang = []
|
hreflang = []
|
||||||
for lang in sorted(alternate_urls):
|
for lang in sorted(alternate_urls):
|
||||||
|
@ -313,7 +318,8 @@ def get_lang_urls(src):
|
||||||
if url_lang == lang:
|
if url_lang == lang:
|
||||||
img_css = ' class="grayscale"'
|
img_css = ' class="grayscale"'
|
||||||
url = alternate_urls[url_lang][src]
|
url = alternate_urls[url_lang][src]
|
||||||
urls.append('<li><a href="{url}" rel="alternate" hreflang="{lang}"><img{css} src="{resource_url}{lang}.png" /></a>'.format(
|
urls.append(
|
||||||
|
'<li><a href="{url}" rel="alternate" hreflang="{lang}"><img{css} src="{resource_url}{lang}.png" /></a>'.format(
|
||||||
lang=url_lang,
|
lang=url_lang,
|
||||||
url=url,
|
url=url,
|
||||||
resource_url=resource_url,
|
resource_url=resource_url,
|
||||||
|
@ -322,20 +328,24 @@ def get_lang_urls(src):
|
||||||
return urls
|
return urls
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Main Program Flow
|
Main Program Flow
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
lang = "en"
|
lang = "en"
|
||||||
default_strings = {
|
default_strings = {
|
||||||
'made_by': '* Made by {manufacturer}',
|
'made_by': 'Made by {manufacturer}',
|
||||||
'type_hat': '* HAT form-factor',
|
'type_hat': 'HAT form-factor',
|
||||||
'type_classic': '* Classic form-factor',
|
'type_classic': 'Classic form-factor',
|
||||||
'pin_header': '* {} pin header',
|
'pin_header': '{} pin header',
|
||||||
'uses_i2c': '* Uses I2C',
|
'uses_i2c': 'Uses I2C',
|
||||||
'wiring_pi_pin': 'Wiring Pi pin {}'
|
'wiring_pi_pin': 'Wiring Pi pin {}',
|
||||||
|
'uses_n_gpio_pins': '* Uses {} GPIO pins',
|
||||||
|
'bcm_pin_rev1_pi': 'BCM pin {} on Rev 1 ( very early ) Pi',
|
||||||
|
'physical_pin_n': 'Physical pin {}',
|
||||||
|
'more_information': 'More Information',
|
||||||
|
'github_repository': 'GitHub Repository',
|
||||||
|
'buy_now': 'Buy Now'
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
|
@ -359,7 +369,6 @@ for key, val in default_strings.items():
|
||||||
if key not in strings:
|
if key not in strings:
|
||||||
strings[key] = val
|
strings[key] = val
|
||||||
|
|
||||||
|
|
||||||
base_url = pinout.get_setting('base_url', '/pinout/') # '/pinout-tr/pinout/'
|
base_url = pinout.get_setting('base_url', '/pinout/') # '/pinout-tr/pinout/'
|
||||||
resource_url = pinout.get_setting('resource_url', '/resources/') # '/pinout-tr/resources/'
|
resource_url = pinout.get_setting('resource_url', '/resources/') # '/pinout-tr/resources/'
|
||||||
url_suffix = pinout.get_setting('url_suffix', '') # '.html'
|
url_suffix = pinout.get_setting('url_suffix', '') # '.html'
|
||||||
|
@ -372,7 +381,6 @@ select_overlays = []
|
||||||
|
|
||||||
overlays_html = ''
|
overlays_html = ''
|
||||||
|
|
||||||
|
|
||||||
if not os.path.isdir('output'):
|
if not os.path.isdir('output'):
|
||||||
try:
|
try:
|
||||||
os.mkdir('output')
|
os.mkdir('output')
|
||||||
|
@ -389,13 +397,11 @@ if not os.path.isdir('output/{}/pinout'.format(lang)):
|
||||||
except OSError:
|
except OSError:
|
||||||
exit('Failed to create output/{}/pinout dir'.format(lang))
|
exit('Failed to create output/{}/pinout dir'.format(lang))
|
||||||
|
|
||||||
|
|
||||||
overlays = map(load_overlay, overlays)
|
overlays = map(load_overlay, overlays)
|
||||||
|
|
||||||
for url, name in select_overlays:
|
for url, name in select_overlays:
|
||||||
overlays_html += '<li><a href="{}{}">{}</a></li>'.format(base_url, url, name)
|
overlays_html += '<li><a href="{}{}">{}</a></li>'.format(base_url, url, name)
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Manually add the index page as 'pinout', this is due to how the
|
Manually add the index page as 'pinout', this is due to how the
|
||||||
website is currently structured with /pinout as the index
|
website is currently structured with /pinout as the index
|
||||||
|
@ -411,7 +417,7 @@ print('Rendering pin pages...')
|
||||||
|
|
||||||
for pin in range(1, len(pinout.pins) + 1):
|
for pin in range(1, len(pinout.pins) + 1):
|
||||||
(pin_url, pin_html, pin_title) = render_pin_page(pin)
|
(pin_url, pin_html, pin_title) = render_pin_page(pin)
|
||||||
if pin_url == None:
|
if pin_url is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
hreflang = get_hreflang_urls('pin{}'.format(pin))
|
hreflang = get_hreflang_urls('pin{}'.format(pin))
|
||||||
|
@ -479,4 +485,3 @@ for url in pages:
|
||||||
|
|
||||||
with open(os.path.join('output', lang, '{}.html'.format(url)), 'w') as f:
|
with open(os.path.join('output', lang, '{}.html'.format(url)), 'w') as f:
|
||||||
f.write(html)
|
f.write(html)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue