From 2b0677b099ab16fb280c8630d22ff30ff3d03860 Mon Sep 17 00:00:00 2001 From: RogueM Date: Sun, 8 Nov 2015 21:03:00 +0000 Subject: [PATCH 1/5] small fixes to a couple of en-GB overlays --- src/en-GB/overlay/iqaudio-pi-dac.md | 5 ++--- src/en-GB/overlay/sense-hat.md | 2 +- src/en-GB/template/layout.html | 10 +++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/en-GB/overlay/iqaudio-pi-dac.md b/src/en-GB/overlay/iqaudio-pi-dac.md index 05ea01e..cbb83a0 100644 --- a/src/en-GB/overlay/iqaudio-pi-dac.md +++ b/src/en-GB/overlay/iqaudio-pi-dac.md @@ -23,8 +23,7 @@ pin: description: (optional) 18: name: Rotary Encoder - description: (optional) - 20: + description: (optional) 22: name: IR Sensor description: (optional) @@ -48,4 +47,4 @@ The Pi Dac uses GPIO22 to mute/unmute the Pi-AMP+. You can use GPIO25 to connect an IR sensor and GPIO23/24 for a rotary encoder. Both of these parts are optional, but are broken out on the Pi-DAC+ for convenient access. -Note: pins marked as optional can be used for general purpose if those add-ons are not enabled by software. +Note: pins reserved for the rotary encoder and IR sensor can be used for other purposes if those add-ons have not been fitted and enabled by software. diff --git a/src/en-GB/overlay/sense-hat.md b/src/en-GB/overlay/sense-hat.md index 32aadac..5e04134 100644 --- a/src/en-GB/overlay/sense-hat.md +++ b/src/en-GB/overlay/sense-hat.md @@ -34,7 +34,7 @@ pin: --> #Sense HAT -LED Matrix: LED2472G -> ATTINY88 -> SPI(8/9/10/11) +LED Matrix: LED2472G -> ATTINY88 -> SPI Joystick: SKRHABE010 -> ATTINY88 -> GPIO23/24/25 Axis/IMU: LSM9DS1 -> i2c 0x1c(1e),0x6a(6b) (INT on MCU) Pressure/Temp: LPS25H -> i2c 0x5c diff --git a/src/en-GB/template/layout.html b/src/en-GB/template/layout.html index b280f2a..bd218f4 100644 --- a/src/en-GB/template/layout.html +++ b/src/en-GB/template/layout.html @@ -23,14 +23,14 @@

Raspberry Pinout

- Learn about Pi add-ons and pin functions + Tout savoir sur cartes compatible Raspberry Pi et leurs functions
From efce2b5d504fbb4de20b1acf131e419376543b72 Mon Sep 17 00:00:00 2001 From: RogueM Date: Sun, 8 Nov 2015 21:07:54 +0000 Subject: [PATCH 2/5] merge of Gadgetoid changes 151108 --- generate-html.py | 91 ++++++++++++++++-- resources/gb.png | Bin 0 -> 599 bytes resources/pinout.css | 13 ++- resources/tr.png | Bin 0 -> 492 bytes serve.py | 6 +- .../{rtk-000-0001.md => rtk-000-001.md} | 0 src/en-GB/settings.yaml | 7 ++ urlmapper.py | 85 ++++++++++++++++ 8 files changed, 188 insertions(+), 14 deletions(-) create mode 100644 resources/gb.png create mode 100755 resources/tr.png rename src/en-GB/overlay/{rtk-000-0001.md => rtk-000-001.md} (100%) create mode 100755 urlmapper.py diff --git a/generate-html.py b/generate-html.py index cf40047..31eb2c6 100755 --- a/generate-html.py +++ b/generate-html.py @@ -9,19 +9,43 @@ import sys import pinout import yaml import markjaml +import urlmapper reload(sys) sys.setdefaultencoding('utf8') lang = "en-GB" +default_strings = { + 'made_by': '* Made by {manufacturer}', + 'type_hat': '* HAT form-factor', + 'type_classic': '* Classic form-factor', + 'pin_header': '* {} pin header', + 'uses_i2c': '* Uses I2C', + 'wiring_pi_pin': 'Wiring Pi pin {}' +} if len(sys.argv) > 1: lang = sys.argv[1] +alternate_urls = urlmapper.generate_urls(lang) + pinout.load(lang) overlays = pinout.settings['overlays'] +strings = pinout.get_setting('strings',{}) + +if type(strings) == list: + _strings = {} + for item in strings: + _strings[item.keys()[0]] = item.values()[0] + strings = _strings + +for key, val in default_strings.items(): + if key not in strings: + strings[key] = val + + base_url = pinout.get_setting('base_url','/pinout/') # '/pinout-tr/pinout/' resource_url = pinout.get_setting('resource_url','/resources/') # '/pinout-tr/resources/' url_suffix = pinout.get_setting('url_suffix','') # '.html' @@ -81,16 +105,16 @@ def load_overlay(overlay): details = [] if 'manufacturer' in loaded: - details.append('* Made by ' + loaded['manufacturer']) + details.append(strings['made_by'].format(manufacturer=loaded['manufacturer'])) if 'pincount' in loaded: pincount = int(loaded['pincount']) if pincount == 40: - details.append('* HAT form-factor') + details.append(strings['type_hat']) elif pincount == 26: - details.append('* Classic 26-pin') + details.append(strings['type_classic']) else: - details.append('* {} pin header'.format(pincount)) + details.append(strings['pin_header'].format(pincount)) if 'pin' in loaded: uses_5v = False @@ -120,7 +144,7 @@ def load_overlay(overlay): pin_5 = loaded['pin']['5'] if 'mode' in pin_3 and 'mode' in pin_5: if pin_3['mode'] == 'i2c' and pin_5['mode'] == 'i2c': - details.append('* Uses I2C') + details.append(strings['uses_i2c']) if 'url' in loaded: details.append('* [More Information]({url})'.format(url=loaded['url'])) @@ -138,6 +162,7 @@ def load_overlay(overlay): loaded['page_url'] = slugify(loaded['name']) loaded['rendered_html'] = render_overlay_page(loaded) + loaded['src'] = overlay pages[loaded['page_url']] = loaded navs[loaded['page_url']] = render_nav(loaded['page_url'], overlay=loaded) select_overlays.append((loaded['page_url'], loaded['name'])) @@ -293,7 +318,7 @@ def render_pin(pin_num, selected_url, overlay=None): pin_name = 'BCM {} {}'.format(bcm, pin_subname) if 'wiringpi' in pin['scheme']: wiringpi = pin['scheme']['wiringpi'] - pin_link_title.append('Wiring Pi pin {}'.format(wiringpi)) + pin_link_title.append(strings['wiring_pi_pin'].format(wiringpi)) pin_url = base_url + slugify('pin{}_{}'.format(pin_num,pin_url)) @@ -345,9 +370,9 @@ and all other pages in /pinout/ serve.py will mirror this structure for testing. ''' -pages['pinout'] = {} -pages['pinout']['rendered_html'] = render_overlay_page({'name':'Index','long_description':load_md('index.md')}) -navs['pinout'] = render_nav('pinout') +pages['index'] = {} +pages['index']['rendered_html'] = render_overlay_page({'name':'Index','long_description':load_md('index.md')}) +navs['index'] = render_nav('pinout') print('Rendering pin pages...') @@ -355,8 +380,26 @@ for pin in range(1,len(pinout.pins)+1): (pin_url, pin_html, pin_title) = render_pin_page(pin) if pin_url == None: continue + + hreflang = [] + + src = 'pin{}'.format(pin) + + for code in alternate_urls: + if src in alternate_urls[code]: + alt = alternate_urls[code][src] + code_lang = code.split('-')[0] + '.' + if code_lang == 'en.': + code_lang = '' + hreflang.append(''.format( + lang=code_lang, + alt=alt, + code=code + )) + pin_nav = render_nav(pin_url) pin_html = pinout.render_html(template, + hreflang = "\n\t\t".join(hreflang), nav = pin_nav, content = pin_html, resource_url = resource_url, @@ -376,6 +419,33 @@ print('Rendering overlay and index pages...') for url in pages: content = pages[url]['rendered_html'] nav = navs[url] + hreflang = [] + + if url == 'index': + for code in alternate_urls: + code_lang = code.split('-')[0] + '.' + if code_lang == 'en.': + code_lang = '' + hreflang.append(''.format( + lang=code_lang, + alt=alt, + code=code + )) + + if 'src' in pages[url]: + src = pages[url]['src'] + + for code in alternate_urls: + if src in alternate_urls[code]: + alt = alternate_urls[code][src] + code_lang = code.split('-')[0] + '.' + if code_lang == 'en.': + code_lang = '' + hreflang.append(''.format( + lang=code_lang, + alt=alt, + code=code + )) if not 'description' in pages[url]: pages[url]['description'] = pinout.settings['default_desc'] @@ -386,6 +456,7 @@ for url in pages: pages[url]['name'] = pinout.settings['default_title'] html = pinout.render_html(template, + hreflang = "\n\t\t".join(hreflang), nav = nav, content = content, overlays = overlays_html, @@ -395,7 +466,7 @@ for url in pages: ) print('Outputting page {}'.format(url)) - if url != 'pinout': + if url != 'index': url = os.path.join('pinout',url) with open(os.path.join('output',lang,'{}.html'.format(url)),'w') as f: diff --git a/resources/gb.png b/resources/gb.png new file mode 100644 index 0000000000000000000000000000000000000000..ff701e19f6d2c0658fb23b1d94124cba4ce60851 GIT binary patch literal 599 zcmV-d0;v6oP)U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A zK+FZ=zkmP!`TOVhpFbzBzFaPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8 literal 0 HcmV?d00001 diff --git a/resources/pinout.css b/resources/pinout.css index 2952aad..18450d1 100644 --- a/resources/pinout.css +++ b/resources/pinout.css @@ -16,10 +16,15 @@ h2 {font-size:18px;margin-top:20px;} .drop-down { float: right; display: block; - width: 250px; + width: 500px; border:2px solid #D6264E; margin-left:20px; } +img.grayscale { + filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale"); /* Firefox 10+, Firefox on Android */ + filter: gray; /* IE6-9 */ + -webkit-filter: grayscale(100%); /* Chrome 19+, Safari 6+, Safari 6+ iOS */ +} .overlay { margin: 0; padding: 0; @@ -28,6 +33,7 @@ h2 {font-size:18px;margin-top:20px;} background:rgba(255,255,255,0.95); padding:10px 0px; clear:both; + overflow:hidden; } .overlay-container span { display:block; @@ -36,8 +42,12 @@ h2 {font-size:18px;margin-top:20px;} .overlay li { display:block; width:250px; + float:left; } .overlay li:nth-child(odd) a { + border-right:2px solid #D6264E; +} +.overlay li:nth-child(4n+1) a,.overlay li:nth-child(4n+2) a { background:rgba(214, 38, 78, 0.05); } .overlay li a, .drop-down span { @@ -49,6 +59,7 @@ h2 {font-size:18px;margin-top:20px;} cursor:pointer; width:230px; } +.drop-down span {width:60px;} .drop-down span:hover, .drop-down:hover span { background:#D6264E; color:#FFFFFF; diff --git a/resources/tr.png b/resources/tr.png new file mode 100755 index 0000000000000000000000000000000000000000..be32f77e9910c0896c1ee8e7ed4f0edf815a517e GIT binary patch literal 492 zcmV@|4`Xj5kLT%yy% zCxE~j7#aURc>+`lQtjr(@bBOM9XtMi`UFz<>-YcPzyAOF1!ObI$^vZw2q2J#|6qeb zs-vSBOie-Rl$HN?bb!_U0_g#3VEFwTr~x2=m_Y6Zss`GqsL0^t^nd#F|4B*zH*EO- z_3QuT%m4H6g6)A?0#pkSKujPf{rCwIb#eU5`( z{s2t}2q2J#|9}60{Pg58FvR|AYlEDjruP5RC6KEgJ^H_IA4CJhNdN)F0>q49OBog~ z{?Etvzo-c07$As@{Qu?4|3!FoS~(Xu$ujuK&Ki|5;f") def custom_static(filename): diff --git a/src/en-GB/overlay/rtk-000-0001.md b/src/en-GB/overlay/rtk-000-001.md similarity index 100% rename from src/en-GB/overlay/rtk-000-0001.md rename to src/en-GB/overlay/rtk-000-001.md diff --git a/src/en-GB/settings.yaml b/src/en-GB/settings.yaml index 2af5b36..b9cc54f 100644 --- a/src/en-GB/settings.yaml +++ b/src/en-GB/settings.yaml @@ -8,6 +8,13 @@ resource_url: /resources/ url_suffix: urls: GND: ground +strings: +- made_by: '* Made by {manufacturer}' +- type_hat: '* HAT form-factor' +- type_classic: '* Classic form-factor' +- pin_header: '* {} pin header' +- uses_i2c: '* Uses I2C' +- wiring_pi_pin: 'Wiring Pi pin {}' overlays: - ground - spi diff --git a/urlmapper.py b/urlmapper.py new file mode 100755 index 0000000..8308e08 --- /dev/null +++ b/urlmapper.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +import json +import unicodedata +import re +import os +import time +import sys +import pinout +import yaml +import markjaml +import glob + +reload(sys) +sys.setdefaultencoding('utf8') + +def url_slugify(value): + """ + Normalizes string, converts to lowercase, removes non-alpha characters, + and converts spaces to hyphens. + """ + value = unicode(value) + value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii') + value = re.sub('[^\w\s-]', '', value).strip().lower() + return re.sub('[-\s]+', '_', value) + +def load_overlay_url(overlay, lang): + try: + data = markjaml.load('src/{}/overlay/{}.md'.format(lang,overlay)) + + loaded = data['data'] + except IOError: + return None + + if not 'page_url' in loaded: + loaded['page_url'] = url_slugify(loaded['name']) + + return overlay, loaded['page_url'] + +def get_pin_url(pin_num,pinout): + pin = pinout.pins[str(pin_num)] + pin_url = pin['name'] + + if pin_url == 'Ground': + return None + + if 'scheme' in pin: + if 'bcm' in pin['scheme']: + bcm = pin['scheme']['bcm'] + pin_url = 'gpio{}'.format(bcm) + + return url_slugify('pin{}_{}'.format(pin_num,pin_url)) + +def generate_for_lang(lang="en-GB"): + url_lookup = {} + + pinout.load(lang) + + overlays = pinout.settings['overlays'] + + overlays_html = '' + + overlays = map(lambda overlay: load_overlay_url(overlay, lang),overlays) + + for pin in range(1,len(pinout.pins)+1): + pin_url = get_pin_url(pin,pinout) + if pin_url is None: + continue + + url_lookup['pin{}'.format(pin)] = '{}'.format(pin_url) + + for url in overlays: + if url is None: + continue + + url_lookup['{}'.format(url[0])] = '{}'.format(url[1]) + + return url_lookup + +def generate_urls(lang="en-GB"): + languages = [l.replace('src/','') for l in glob.glob('src/*')] # if not l == 'src/'+lang + urls = {} + for lang in languages: + urls[lang] = generate_for_lang(lang) + return urls + From 46e59a0128ee530f4f021358c08eb5f4a8672a45 Mon Sep 17 00:00:00 2001 From: RogueM Date: Sun, 8 Nov 2015 23:16:11 +0000 Subject: [PATCH 3/5] some clean up prior to sync to upstream --- src/fr-FR/index.md | 2 +- src/fr-FR/overlay/sense-hat.md | 41 ++++++++++++++++++++++++++++++++++ src/fr-FR/settings.yaml | 1 + src/tr-TR/settings.yaml | 6 ++--- src/tr-TR/template/layout.html | 4 ++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/fr-FR/overlay/sense-hat.md diff --git a/src/fr-FR/index.md b/src/fr-FR/index.md index a5e66e0..b2b3733 100644 --- a/src/fr-FR/index.md +++ b/src/fr-FR/index.md @@ -8,7 +8,7 @@ Ce document n'est pas destiné à l'impression, c'est à la fois un outil de ré * BCM - numérotation Broadcom, plus communément apellée "GPIO"; utile pour travailler avec la librarie RPi.GPIO * WiringPi - numérotation Wiring Pi; utile pour travailler avec la librarie Wiring Pi -* Physical - numérotation correspondante à la position physique des broches sur le connecteur GPIO +* Physique - numérotation correspondante à la position physique des broches sur le connecteur GPIO ##Pi 2 (note 1) diff --git a/src/fr-FR/overlay/sense-hat.md b/src/fr-FR/overlay/sense-hat.md new file mode 100644 index 0000000..32aadac --- /dev/null +++ b/src/fr-FR/overlay/sense-hat.md @@ -0,0 +1,41 @@ + +#Sense HAT + +LED Matrix: LED2472G -> ATTINY88 -> SPI(8/9/10/11) +Joystick: SKRHABE010 -> ATTINY88 -> GPIO23/24/25 +Axis/IMU: LSM9DS1 -> i2c 0x1c(1e),0x6a(6b) (INT on MCU) +Pressure/Temp: LPS25H -> i2c 0x5c +Humidity/Temp: HTS221 -> i2c 0x5f \ No newline at end of file diff --git a/src/fr-FR/settings.yaml b/src/fr-FR/settings.yaml index 53a454d..2af5b36 100644 --- a/src/fr-FR/settings.yaml +++ b/src/fr-FR/settings.yaml @@ -29,3 +29,4 @@ overlays: - traffic-hat - iqaudio-pi-dac - piano-hat +- sense-hat diff --git a/src/tr-TR/settings.yaml b/src/tr-TR/settings.yaml index 0e288b5..f6761fa 100644 --- a/src/tr-TR/settings.yaml +++ b/src/tr-TR/settings.yaml @@ -2,9 +2,9 @@ default_desc: Raspberry Pi, B+ ve Pi 2 için Pin şematiği default_title: Raspberry Pi GPIO Pinleri - Pi 1, B+, Pi 2 title_suffix: " - Raspberry Pi Pinleri" -base_url: /pinout-tr/pinout/ -resource_url: /pinout-tr/resources/ -url_suffix: .html +base_url: /pinout/ +resource_url: /resources/ +url_suffix: '' urls: GND: ground_toprak overlays: diff --git a/src/tr-TR/template/layout.html b/src/tr-TR/template/layout.html index 64bd6ee..c8d28a1 100644 --- a/src/tr-TR/template/layout.html +++ b/src/tr-TR/template/layout.html @@ -9,10 +9,14 @@ + {{hreflang}}