From: Reinhold Kainhofer
Date: Sun, 17 Aug 2008 15:50:57 +0000 (+0200)
Subject: Merge branch 'master' of ssh://kainhofer@git.sv.gnu.org/srv/git/lilypond into dev...
X-Git-Tag: release/2.11.58-1~32^2~55
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=4cf1c1f0def359889bf9dc326cd6f7ec6edceecd;hp=9ddb926d01938067b665f0085ee882ded31e028a;p=lilypond.git
Merge branch 'master' of ssh://kainhofer@git.sv.gnu.org/srv/git/lilypond into dev/texi2html
Conflicts:
Documentation/user/macros.itexi
buildscripts/add_html_footer.py
stepmake/stepmake/generic-targets.make
---
diff --git a/Documentation/GNUmakefile b/Documentation/GNUmakefile
index d265a1ee96..447337efc9 100644
--- a/Documentation/GNUmakefile
+++ b/Documentation/GNUmakefile
@@ -16,7 +16,7 @@ OUT_HTML_FILES= $(HTML_PAGE_NAMES:%=$(outdir)/%.html)
default: local-doc
-local-WWW: txt-to-html $(OUT_HTML_FILES)
+local-WWW-2: txt-to-html $(OUT_HTML_FILES)
local-WWW-clean: deep-WWW-clean
diff --git a/Documentation/bibliography/GNUmakefile b/Documentation/bibliography/GNUmakefile
index 4a7bab0111..89eb2d0bcb 100644
--- a/Documentation/bibliography/GNUmakefile
+++ b/Documentation/bibliography/GNUmakefile
@@ -1,4 +1,4 @@
-# Documentation/tex/Makefile
+# Documentation/bibliography/Makefile
depth=../..
@@ -18,10 +18,10 @@ ps: $(PS_FILES)
# urg
default:
-GENHTMLS = engraving colorado computer-notation
+GENHTMLS = engraving colorado computer-notation
OUTGENHTMLS = $(addprefix $(outdir)/, $(GENHTMLS:%=%.html))
-local-WWW: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) index.html)
+local-WWW-2: $(addprefix $(outdir)/, $(BIB_FILES:.bib=.html) index.html)
$(outdir)/%.bib: %.bib
ln -f $< $@
diff --git a/Documentation/de/user/GNUmakefile b/Documentation/de/user/GNUmakefile
index 662d176be1..810efc38e7 100644
--- a/Documentation/de/user/GNUmakefile
+++ b/Documentation/de/user/GNUmakefile
@@ -3,3 +3,13 @@ depth = ../../..
LOCALSTEPMAKE_TEMPLATES = lilypond ly doclang
include $(depth)/make/stepmake.make
+
+local-WWW-1: $(XREF_MAP_FILES) $(outdir)/lilypond-snippets.xref-map \
+ $(outdir)/music-glossary.xref-map \
+ $(outdir)/lilypond-internals.xref-map
+
+$(outdir)/lilypond-snippets.xref-map:
+ ln -sf ../../../../input/lsr/$@ $@
+
+$(outdir)/lilypond-internals.xref-map $(outdir)/music-glossary.xref-map:
+ ln -sf ../../../user/$@ $@
diff --git a/Documentation/es/user/GNUmakefile b/Documentation/es/user/GNUmakefile
index 4928d75252..d51764115b 100644
--- a/Documentation/es/user/GNUmakefile
+++ b/Documentation/es/user/GNUmakefile
@@ -3,3 +3,13 @@ depth = ../../..
LOCALSTEPMAKE_TEMPLATES = lilypond ly doclang
include $(depth)/make/stepmake.make
+
+local-WWW-1: $(XREF_MAP_FILES) $(outdir)/lilypond-snippets.xref-map \
+ $(outdir)/music-glossary.xref-map \
+ $(outdir)/lilypond-internals.xref-map
+
+$(outdir)/lilypond-snippets.xref-map:
+ ln -sf ../../../../input/lsr/$@ $@
+
+$(outdir)/lilypond-internals.xref-map $(outdir)/music-glossary.xref-map:
+ ln -sf ../../../user/$@ $@
diff --git a/Documentation/fr/user/GNUmakefile b/Documentation/fr/user/GNUmakefile
index e492cfeb9c..f32ebf319f 100644
--- a/Documentation/fr/user/GNUmakefile
+++ b/Documentation/fr/user/GNUmakefile
@@ -3,3 +3,12 @@ depth = ../../..
LOCALSTEPMAKE_TEMPLATES = lilypond ly doclang
include $(depth)/make/stepmake.make
+local-WWW-1: $(XREF_MAP_FILES) $(outdir)/lilypond-snippets.xref-map \
+ $(outdir)/music-glossary.xref-map \
+ $(outdir)/lilypond-internals.xref-map
+
+$(outdir)/lilypond-snippets.xref-map:
+ ln -sf ../../../../input/lsr/$@ $@
+
+$(outdir)/lilypond-internals.xref-map $(outdir)/music-glossary.xref-map:
+ ln -sf ../../../user/$@ $@
diff --git a/Documentation/lilypond-ie-fixes.css b/Documentation/lilypond-ie-fixes.css
new file mode 100644
index 0000000000..8a068900f0
--- /dev/null
+++ b/Documentation/lilypond-ie-fixes.css
@@ -0,0 +1,28 @@
+/***********************************************************/
+/* TOC SIDEBAR */
+/***********************************************************/
+body {
+ height: 100%;
+ font-size: 100%;
+ min-height: 0;
+}
+
+/***********************************************************/
+/* MAIN CONTENT */
+/***********************************************************/
+
+div#main {
+ min-height: 0;
+ height: 100%;
+ width: 73%;
+ overflow-x: auto;
+}
+
+/***********************************************************/
+/* TOC SIDEBAR */
+/***********************************************************/
+
+div#tocframe {
+ height: 100%;
+ width: 27%;
+}
diff --git a/Documentation/lilypond.css b/Documentation/lilypond.css
new file mode 100644
index 0000000000..21145a8ab0
--- /dev/null
+++ b/Documentation/lilypond.css
@@ -0,0 +1,187 @@
+/***********************************************************/
+/* PAGE-WIDE SETTINGS */
+/**********************************************************/
+
+html {
+ height:100%;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ font-size: 100%;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+/***********************************************************/
+/* HEADERS */
+/***********************************************************/
+h2 {
+ font-size: x-large;
+ color: #1d7b85;
+}
+.unnumberedsubsubsec {
+ font-size: large;
+ color: #1d7b85;
+}
+.subsubheading {
+ font-size: large;
+ color: #3b220d;
+}
+
+/***********************************************************/
+/* LINKS */
+/***********************************************************/
+a {
+ color: #344242;
+}
+a:visited {
+ color: #666666;
+}
+a:active {
+ color: #00cccc;
+}
+a:hover {
+ color: #1d7b85;
+ text-decoration:underline;
+}
+
+/***********************************************************/
+/* BLOCK FORMATTING */
+/***********************************************************/
+blockquote {
+ border: 1px solid #cccccc;
+ padding: 3px;
+ width: 40em;
+}
+.verbatim, .example {
+ font-family: "Courier New",Courier,monospace;
+}
+hr {
+ border: none;
+ height: 1px;
+ color: #666666;
+ background-color: #666666;
+}
+table.cartouche {
+ border: 2px dotted #cccccc;
+ margin-left: auto;
+ margin-right: auto;
+ width: 85%;
+}
+table.cartouche td {
+ border: none;
+}
+
+/***********************************************************/
+/* MAIN CONTENT */
+/***********************************************************/
+
+div#main {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 27%;
+ padding: 0 1em;
+ margin: 0;
+ overflow: auto;
+}
+
+#languages {
+ padding-bottom: 1em;
+}
+
+/***********************************************************/
+/* TOC SIDEBAR */
+/***********************************************************/
+
+div#tocframe {
+ position: absolute;
+ top: 0;
+ right: 73%;
+ bottom: 0;
+ left: 0;
+ padding: 5px;
+ padding-bottom: 0;
+ margin: 0;
+ overflow: auto;
+ background-color: #FFFACD;
+ z-index:100;
+ list-style-type: none;
+}
+
+@media screen {
+ body>div#tocframe {
+ position: fixed
+ }
+ }
+
+#tocframe .contents {
+ width: 100%;
+ padding-bottom: 0.25em;
+ border: none;
+ margin: 0em;
+ background-color: transparent;
+ list-style-type: none;
+}
+
+#tocframe ul.toc {
+ padding-left: 0px;
+ margin-left: 0px;
+}
+#tocframe ul.toc li {
+ padding-left: 0px;
+ margin-left: 0px;
+ list-style-type: none;
+}
+#tocframe ul.toc > li {
+ font-size: 12px;
+}
+#tocframe ul.toc li li {
+ padding-left: 15px;
+}
+li.toc_current {
+ font-weight: bold;
+ font-style: italic;
+}
+
+li.toc_current ul {
+ font-weight: normal;
+ font-style: normal;
+ background: transparent;
+}
+
+
+
+
+/***********************************************************/
+/* NAVIGATION */
+/***********************************************************/
+
+.nav_table {
+ width: 100%;
+ background-color: #CCC;
+ border: 0;
+ margin-top: 4px;
+ left: auto;
+ right: auto;
+ font-size: 0.8em;
+}
+
+
+
+
+
+
+/***********************************************************/
+/* OVERRIDES FOR PRINTING... */
+/***********************************************************/
+@media print {
+ /* Hide the sidebar: */
+ body { padding-left: 0; }
+ #tocframe { display: none; }
+ .nav_table { display: none; }
+}
\ No newline at end of file
diff --git a/Documentation/misc/GNUmakefile b/Documentation/misc/GNUmakefile
index b84aa786b8..bb3beb4998 100644
--- a/Documentation/misc/GNUmakefile
+++ b/Documentation/misc/GNUmakefile
@@ -14,7 +14,7 @@ default: local-doc
#urg default local-WWW target uses footify before its time;
# must add footify with txt-to-html target
OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS)))
-##local-WWW: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
+##local-WWW-2: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
copy-for-me:
$(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
diff --git a/Documentation/pictures/GNUmakefile b/Documentation/pictures/GNUmakefile
index 6665721085..438389f944 100644
--- a/Documentation/pictures/GNUmakefile
+++ b/Documentation/pictures/GNUmakefile
@@ -21,5 +21,4 @@ endif # PLATFORM_WINDOWS
local-dist: $(icon)
xgifs: $(OUTGIF_FILES)
pngs: $(OUTPNG_FILES)
-local-WWW: $(OUTPNG_FILES)
-
+local-WWW-1: $(OUTPNG_FILES)
diff --git a/Documentation/topdocs/GNUmakefile b/Documentation/topdocs/GNUmakefile
index 7e2d2641d9..6fd3a7504f 100644
--- a/Documentation/topdocs/GNUmakefile
+++ b/Documentation/topdocs/GNUmakefile
@@ -3,6 +3,7 @@ depth = ../..
STEPMAKE_TEMPLATES=documentation tex texinfo topdocs
LOCALSTEPMAKE_TEMPLATES=lilypond ly
+OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)
HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html)
PDF_FILES=$(outdir)/NEWS.pdf
README_TOP_FILES=NEWS AUTHORS INSTALL README
@@ -12,5 +13,7 @@ include $(depth)/make/stepmake.make
MAKEINFO_FLAGS += -I $(top-src-dir)/Documentation/user
+local-WWW-1: $(OUT_TEXI_FILES)
+
.SECONDARY:
diff --git a/Documentation/user/GNUmakefile b/Documentation/user/GNUmakefile
index eb4577dcc3..b930b98e16 100644
--- a/Documentation/user/GNUmakefile
+++ b/Documentation/user/GNUmakefile
@@ -16,6 +16,10 @@ OUT_PNG_IMAGES=$(OUT_PDF_IMAGES:%.pdf=%.png)
OUT_TEXI_FILES=$(ITEXI_FILES:%.itexi=$(outdir)/%.texi)\
$(ITELY_FILES:%.itely=$(outdir)/%.texi)
+
+MASTER_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)\
+ $(outdir)/lilypond-internals.texi
+
HTML_FILES = $(TELY_FILES:%.tely=$(outdir)/%-big-page.html)\
$(outdir)/lilypond-internals-big-page.html
@@ -63,8 +67,6 @@ extra-local-help:
xml update Docbook xml documentation\n\
"
-# Generic rule using % twice not possible?
-# $(outdir)/%/%.html: $(outdir)/%.texi
$(outdir)/lilypond.texi: $(outdir)/lilypond-internals.texi
#
@@ -123,12 +125,15 @@ $(outdir)/%/source:
mkdir -p $(dir $@)
ln -sf $(depth)/.. $(@)
-local-WWW: $(HTML_FILES) $(DEEP_HTML_FILES)\
- $(datafiles) $(PDF_FILES) $(source-links) info
+local-WWW-1: $(MASTER_TEXI_FILES) $(MASTER_TEXI_FILES:%.texi=%.xref-map) $(outdir)/lilypond-snippets.xref-map $(PDF_FILES) info
+
+local-WWW-2: $(HTML_FILES) $(DEEP_HTML_FILES) $(source-links)
$(outdir)/%.bib: %.bib
ln -f $< $@
+$(outdir)/lilypond-snippets.xref-map:
+ ln -fs ../../../input/lsr/$@ $@
# lilypond.texi deps
$(top-build-dir)/mf/$(outconfbase)/feta16list.ly:
@@ -146,9 +151,4 @@ $(outdir)/lilypond.texi $(outdir)/lilypond-program.texi $(outdir)/lilypond-learn
$(outdir)/lilypond-internals.texi: $(LILYPOND_BINARY)
cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
-
-## unused
-$(outdir)/interfaces.itexi: dummy
- cd $(outdir) && lilypond $(top-src-dir)/ly/generate-interface-doc
-
.SECONDARY:
diff --git a/Documentation/user/macros.itexi b/Documentation/user/macros.itexi
index 07cf74a547..25daba0a82 100644
--- a/Documentation/user/macros.itexi
+++ b/Documentation/user/macros.itexi
@@ -288,6 +288,10 @@
@ref{\TEXT\,,\DISPLAY\,lilypond-learning,Learning Manual}
@end macro
+@macro rlearningnamed{TEXT,DISPLAY}
+learning manual, @ref{\TEXT\,,\DISPLAY\,lilypond-learning,Learning Manual}
+@end macro
+
@macro ruser{TEXT}
@ref{\TEXT\,,,lilypond,Notation Reference}
@end macro
@@ -296,6 +300,10 @@
@ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference}
@end macro
+@macro rusernamed{TEXT,DISPLAY,DISPLAY}
+notation reference, @ref{\TEXT\,,\DISPLAY\,lilypond,Notation Reference}
+@end macro
+
@macro rprogram{TEXT}
@ref{\TEXT\,,,lilypond-program,Application Usage}
@end macro
@@ -304,6 +312,10 @@
@ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage}
@end macro
+@macro rprogramnamed{TEXT,DISPLAY}
+program usage manual, @ref{\TEXT\,,\DISPLAY\,lilypond-program,Application Usage}
+@end macro
+
@macro rlsr{TEXT}
@ref{\TEXT\,,,lilypond-snippets,Snippets}
@end macro
diff --git a/Documentation/user/music-glossary.tely b/Documentation/user/music-glossary.tely
index cdcb02e370..dbed2449a1 100644
--- a/Documentation/user/music-glossary.tely
+++ b/Documentation/user/music-glossary.tely
@@ -129,6 +129,9 @@ documentation, see @rlearning{About the documentation}.
* Pitch names::
@end menu
+@contents
+
+
@node Musical terms A-Z
@chapter Musical terms A-Z
diff --git a/GNUmakefile.in b/GNUmakefile.in
index 5160939baa..cec5d29937 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -82,7 +82,7 @@ final-install:
# For both online and offline docs, issue `make web WEB_TARGETS="offline online"'
WEB_TARGETS = offline
-local-WWW-post:
+WWW-post:
# need UTF8 setting in case this is hosted on a website.
echo -e 'AddDefaultCharset utf-8\nAddCharset utf-8 .html\nAddCharset utf-8 .en\nAddCharset utf-8 .nl\nAddCharset utf-8 .txt\n' > $(top-build-dir)/.htaccess
$(PYTHON) $(buildscript-dir)/mutopia-index.py -o $(outdir)/examples.html input/
diff --git a/buildscripts/add_html_footer.py b/buildscripts/add_html_footer.py
index f063132132..8536ef3956 100644
--- a/buildscripts/add_html_footer.py
+++ b/buildscripts/add_html_footer.py
@@ -6,6 +6,7 @@ Print a nice footer.
import re
import os
import time
+import operator
import langdefs
@@ -53,18 +54,21 @@ mail_address = 'http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bug
suggest_Docs_url = 'http://lilypond.org/web/devel/participating/documentation-adding'
header_tag = ''
+header_tag_re = re.compile (header_tag)
+
footer_tag = ''
+footer_tag_re = re.compile (footer_tag)
lang_available = _doc ("Other languages: %s.")
browser_lang = _doc ('About automatic language selection.')
browser_language_url = "/web/about/browser-language"
LANGUAGES_TEMPLATE = '''
-
+
%(language_available)s
-
+
%(browser_language)s
-
+
'''
@@ -93,7 +97,7 @@ def source_links_replace (m, source_val):
splitted_docs_re = re.compile ('(input/lsr/out-www/lilypond-snippets|Documentation/user/out-www/(lilypond|music-glossary|lilypond-program|lilypond-learning))/')
snippets_ref_re = re.compile (r'href="(\.\./)?lilypond-snippets')
-user_ref_re = re.compile (r'href="(?:\.\./)?lilypond(|-internals|-learning|-program)')
+user_ref_re = re.compile (r'href="(?:\.\./)?lilypond(-internals|-learning|-program|(?!-snippets))')
## Windows does not support symlinks.
# This function avoids creating symlinks for splitted HTML manuals
@@ -115,57 +119,53 @@ def hack_urls (s, prefix):
source_val = os.readlink (source_path)
return re.sub ('href="source/(.*?)"', lambda m: source_links_replace (m, source_val), s)
+body_tag_re = re.compile ('(?i)]*)>')
+html_tag_re = re.compile ('(?i)')
+doctype_re = re.compile ('(?i)\n'
+
def add_header (s):
- """Add header ( and doctype)"""
- if re.search (header_tag, s) == None:
- body = ''
- s = re.sub ('(?i)', body, s)
- if re.search ('(?i)]*>', body + header, s, 1)
- elif re.search ('(?i)', '' + header, s, 1)
- else:
- s = header + s
+ """Add header ( and doctype)"""
+ if header_tag_re.search (s) == None:
+ body = ''
+ (s, n) = body_tag_re.subn (body + header, s, 1)
+ if not n:
+ (s, n) = html_tag_re.subn ('' + header, s, 1)
+ if not n:
+ s = header + s
s = header_tag + '\n' + s
- if re.search ('(?i)\n'
+ if doctype_re.search (s) == None:
s = doctype + s
return s
+title_tag_re = re.compile ('.*?(.*?)', re.DOTALL)
+AT_web_title_re = re.compile ('@WEB-TITLE@')
+
def add_title (s):
# urg
# maybe find first node?
fallback_web_title = '-- --'
- m = re.match ('.*?(.*?)', s, re.DOTALL)
+ m = title_tag_re.match (s)
if m:
fallback_web_title = m.group (1)
- s = re.sub ('@WEB-TITLE@', fallback_web_title, s)
+ s = AT_web_title_re.sub (fallback_web_title, s)
return s
-info_nav_bar = re.compile (r'', re.M | re.S)
-info_footnote_hr = re.compile (r'
\s*()?\s*', re.M | re.I)
-
-def add_footer (s):
- """add footer
-
-also add navigation bar to bottom of Info HTML pages"""
- m = info_nav_bar.search (s)
- if m:
- # avoid duplicate
in case there are footnotes at the end of the Info HTML page
- if info_footnote_hr.search (s):
- custom_footer = '\n' + footer
- else:
- custom_footer = '
\n\n' + footer
- else:
- custom_footer = footer
- if re.search ('(?i)', footer_tag + custom_footer + '\n' + '', s, 1)
- elif re.search ('(?i)', footer_tag + custom_footer + '\n' + '', s, 1)
- else:
- s += footer_tag + custom_footer + '\n'
+footer_insert_re = re.compile ('')
+end_body_re = re.compile ('(?i)')
+end_html_re = re.compile ('(?i)')
+
+def add_footer (s, footer_text):
+ """add footer"""
+ (s, n) = footer_insert_re.subn (footer_text + '\n' + '', s, 1)
+ if not n:
+ (s, n) = end_body_re.subn (footer_text + '\n' + '', s, 1)
+ if not n:
+ (s, n) = end_html_re.subn (footer_text + '\n' + '', s, 1)
+ if not n:
+ s += footer_text + '\n'
return s
def find_translations (prefix, lang_ext):
@@ -177,35 +177,37 @@ def find_translations (prefix, lang_ext):
if lang_ext != e:
if e in pages_dict[prefix]:
available.append (l)
- elif lang_ext == '' and l.enabled and reduce (lambda x, y: x and y, [not prefix.startswith (s) for s in non_copied_pages]):
+ elif lang_ext == '' and l.enabled and reduce (operator.and_, [not prefix.startswith (s) for s in non_copied_pages]):
# English version of missing translated pages will be written
missing.append (e)
return available, missing
+online_links_re = re.compile ('''(href|src)=[\'"]([^/][.]*[^.:\'"]*)(.html|.png)(#[^"\']*|)[\'"]''')
+offline_links_re = re.compile ('''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''')
+
def process_links (s, prefix, lang_ext, file_name, missing, target):
page_flavors = {}
if target == 'online':
# Strip .html, .png suffix for auto language selection (content
# negotiation). The menu must keep the full extension, so do
# this before adding the menu.
- page_flavors[file_name] = [lang_ext, re.sub (
- '''(href|src)=[\'"]([^/][.]*[^.:\'"]*)(.html|.png)(#[^"\']*|)[\'"]''',
- '\\1="\\2\\4"', s)]
+ page_flavors[file_name] = \
+ [lang_ext, online_links_re.sub ('\\1="\\2\\4"', s)]
elif target == 'offline':
- # in LANG doc index: don't rewrite .html suffixes as not all .LANG.html pages exist
+ # in LANG doc index: don't rewrite .html suffixes
+ # as not all .LANG.html pages exist;
# the doc index should be translated and contain the right links
if prefix == 'Documentation/out-www/index':
page_flavors[file_name] = [lang_ext, s]
elif lang_ext == '':
page_flavors[file_name] = [lang_ext, s]
for e in missing:
- page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = [e, re.sub (
- '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
- 'href="\\1.' + e + '\\2\\3"', s)]
+ page_flavors[langdefs.lang_file_name (prefix, e, '.html')] = \
+ [e, offline_links_re.sub ('href="\\1.' + e + '\\2\\3"', s)]
else:
- page_flavors[file_name] = [lang_ext, re.sub (
- '''href=[\'"]([^/][.]*[^.:\'"]*)(.html)(#[^"\']*|)[\'"]''',
- 'href="\\1.' + lang_ext + '\\2\\3"', s)]
+ page_flavors[file_name] = \
+ [lang_ext,
+ offline_links_re.sub ('href="\\1.' + lang_ext + '\\2\\3"', s)]
return page_flavors
def add_menu (page_flavors, prefix, available, target, translation):
@@ -229,12 +231,7 @@ def add_menu (page_flavors, prefix, available, target, translation):
language_available = t (lang_available) % language_menu
languages = LANGUAGES_TEMPLATE % vars ()
# put language menu before '' and '' tags
- if re.search ('(?i)