Fix processing of contractions, and changes to ensure code (after initial lines) for narrativeweb is the same for trunk and gramps34
svn: r21293
This commit is contained in:
parent
404c2f154b
commit
553baa596a
@ -67,7 +67,6 @@ Classes for producing the web pages:
|
|||||||
# python modules
|
# python modules
|
||||||
#------------------------------------------------
|
#------------------------------------------------
|
||||||
from __future__ import print_function, division
|
from __future__ import print_function, division
|
||||||
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import gc
|
import gc
|
||||||
import os
|
import os
|
||||||
@ -80,14 +79,13 @@ except ImportError:
|
|||||||
from md5 import md5
|
from md5 import md5
|
||||||
import time, datetime
|
import time, datetime
|
||||||
import shutil
|
import shutil
|
||||||
import io
|
|
||||||
import codecs
|
import codecs
|
||||||
import tarfile
|
import tarfile
|
||||||
import tempfile
|
import tempfile
|
||||||
if sys.version_info[0] < 3:
|
if sys.version_info[0] < 3:
|
||||||
from cStringIO import StringIO
|
from cStringIO import StringIO
|
||||||
else:
|
else:
|
||||||
from io import StringIO, BytesIO, TextIOWrapper, BufferedWriter
|
from io import StringIO, BytesIO, TextIOWrapper
|
||||||
from textwrap import TextWrapper
|
from textwrap import TextWrapper
|
||||||
from unicodedata import normalize
|
from unicodedata import normalize
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
@ -125,6 +123,7 @@ from gramps.gen.plug.report import MenuReportOptions
|
|||||||
from gramps.gen.utils.config import get_researcher
|
from gramps.gen.utils.config import get_researcher
|
||||||
from gramps.gen.utils.string import confidence
|
from gramps.gen.utils.string import confidence
|
||||||
from gramps.gen.utils.file import media_path_full
|
from gramps.gen.utils.file import media_path_full
|
||||||
|
from gramps.gen.utils.alive import probably_alive
|
||||||
from gramps.gen.utils.db import get_source_and_citation_referents
|
from gramps.gen.utils.db import get_source_and_citation_referents
|
||||||
from gramps.gen.constfunc import win, cuni, conv_to_unicode, UNITYPE
|
from gramps.gen.constfunc import win, cuni, conv_to_unicode, UNITYPE
|
||||||
from gramps.gui.thumbnails import get_thumbnail_path, run_thumbnailer
|
from gramps.gui.thumbnails import get_thumbnail_path, run_thumbnailer
|
||||||
@ -142,11 +141,22 @@ from gramps.plugins.lib.libhtml import Html, xml_lang
|
|||||||
from gramps.plugins.lib.libhtmlbackend import HtmlBackend, process_spaces
|
from gramps.plugins.lib.libhtmlbackend import HtmlBackend, process_spaces
|
||||||
|
|
||||||
from gramps.plugins.lib.libgedcom import make_gedcom_date
|
from gramps.plugins.lib.libgedcom import make_gedcom_date
|
||||||
from gramps.gen.utils.alive import probably_alive
|
|
||||||
from gramps.gen.utils.place import conv_lat_lon
|
from gramps.gen.utils.place import conv_lat_lon
|
||||||
from gramps.gui.pluginmanager import GuiPluginManager
|
from gramps.gui.pluginmanager import GuiPluginManager
|
||||||
|
|
||||||
from gramps.gen.relationship import get_relationship_calculator
|
from gramps.gen.relationship import get_relationship_calculator
|
||||||
|
|
||||||
|
# FIXME: This could be glocale.get_translation().language(), except that at the
|
||||||
|
# moment, (1) that gives an empty string when LANG is set to something like
|
||||||
|
# "sk_SK.UTF-8", and (2) it should be a language specific to collation, not just
|
||||||
|
# the language for translation.
|
||||||
|
import locale
|
||||||
|
COLLATE_LANG = locale.getlocale()[0]
|
||||||
|
SORT_KEY = glocale.sort_key
|
||||||
|
#------------------------------------------------
|
||||||
|
# Everything below this point is identical for gramps34 (post 3.4.2), gramps40 and trunk
|
||||||
|
#------------------------------------------------
|
||||||
|
|
||||||
#------------------------------------------------
|
#------------------------------------------------
|
||||||
# constants
|
# constants
|
||||||
#------------------------------------------------
|
#------------------------------------------------
|
||||||
@ -333,8 +343,8 @@ osm_markers = """
|
|||||||
|
|
||||||
var wms = new OpenLayers.Layer.WMS(
|
var wms = new OpenLayers.Layer.WMS(
|
||||||
"OpenLayers WMS",
|
"OpenLayers WMS",
|
||||||
"http://maps.opengeo.org/geowebcache/service/wms",
|
"http://vmap0.tiles.osgeo.org/wms/vmap0",
|
||||||
{'layers':"openstreetmap", 'format': "image/png"});
|
{'layers':'basic'});
|
||||||
map.addLayer(wms);
|
map.addLayer(wms);
|
||||||
|
|
||||||
map.setCenter(new OpenLayers.LonLat(%s, %s), %d);
|
map.setCenter(new OpenLayers.LonLat(%s, %s), %d);
|
||||||
@ -2413,7 +2423,7 @@ class BasePage(object):
|
|||||||
|
|
||||||
ordered = Html("ol")
|
ordered = Html("ol")
|
||||||
section += ordered
|
section += ordered
|
||||||
sortlist = sorted(handlelist, key=lambda x:glocale.sort_key(x[1]))
|
sortlist = sorted(handlelist, key=lambda x:SORT_KEY(x[1]))
|
||||||
|
|
||||||
for (path, name, gid) in sortlist:
|
for (path, name, gid) in sortlist:
|
||||||
list = Html("li")
|
list = Html("li")
|
||||||
@ -2478,7 +2488,6 @@ class BasePage(object):
|
|||||||
person=partner)
|
person=partner)
|
||||||
return trow
|
return trow
|
||||||
|
|
||||||
|
|
||||||
def display_child_link(self, chandle):
|
def display_child_link(self, chandle):
|
||||||
"""
|
"""
|
||||||
display child link ...
|
display child link ...
|
||||||
@ -3306,9 +3315,12 @@ class PlacePages(BasePage):
|
|||||||
self.place_dict = defaultdict(set)
|
self.place_dict = defaultdict(set)
|
||||||
|
|
||||||
def display_pages(self, title):
|
def display_pages(self, title):
|
||||||
# FIXME: Most of the parameters should be removed. report is passed to
|
"""
|
||||||
# __init__, title appears not to be used and place_list, source_list and
|
Generate and output the pages under the Place tab, namely the place
|
||||||
# db_place_handles violate modularity and should be removed.
|
index and the individual place pages.
|
||||||
|
|
||||||
|
@param: title -- the web site title
|
||||||
|
"""
|
||||||
log.debug("obj_dict[Place]")
|
log.debug("obj_dict[Place]")
|
||||||
for item in self.report.obj_dict[Place].items():
|
for item in self.report.obj_dict[Place].items():
|
||||||
log.debug(" %s" % str(item))
|
log.debug(" %s" % str(item))
|
||||||
@ -3964,7 +3976,7 @@ class SurnameListPage(BasePage):
|
|||||||
temp_list[index_val] = (surname, data_list)
|
temp_list[index_val] = (surname, data_list)
|
||||||
|
|
||||||
ppl_handle_list = (temp_list[key]
|
ppl_handle_list = (temp_list[key]
|
||||||
for key in sorted(temp_list, key = glocale.sort_key))
|
for key in sorted(temp_list, key = SORT_KEY))
|
||||||
|
|
||||||
last_letter = ''
|
last_letter = ''
|
||||||
last_surname = ''
|
last_surname = ''
|
||||||
@ -4127,21 +4139,20 @@ class SourcePages(BasePage):
|
|||||||
Generate and output the pages under the Sources tab, namely the sources
|
Generate and output the pages under the Sources tab, namely the sources
|
||||||
index and the individual sources pages.
|
index and the individual sources pages.
|
||||||
|
|
||||||
@param: report -- the instance of the main report class for this report
|
|
||||||
@param: title -- the web site title
|
@param: title -- the web site title
|
||||||
"""
|
"""
|
||||||
# FIXME: Perhaps report and title should just be passed in to the class
|
|
||||||
log.debug("obj_dict[Source]")
|
log.debug("obj_dict[Source]")
|
||||||
for item in self.report.obj_dict[Source].items():
|
for item in self.report.obj_dict[Source].items():
|
||||||
log.debug(" %s" % str(item))
|
log.debug(" %s" % str(item))
|
||||||
self.report.user.begin_progress(_("Narrated Web Site Report"),
|
self.report.user.begin_progress(_("Narrated Web Site Report"),
|
||||||
_("Creating source pages"),
|
_("Creating source pages"),
|
||||||
len(self.source_dict) + 1)
|
len(self.report.obj_dict[Source]) + 1)
|
||||||
self.SourceListPage(self.report, title, self.report.obj_dict[Source].keys())
|
self.SourceListPage(self.report, title,
|
||||||
|
self.report.obj_dict[Source].keys())
|
||||||
|
|
||||||
for item in self.report.obj_dict[Source].items():
|
for source_handle in self.report.obj_dict[Source]:
|
||||||
self.report.user.step_progress()
|
self.report.user.step_progress()
|
||||||
self.SourcePage(self.report, title, item[0])
|
self.SourcePage(self.report, title, source_handle)
|
||||||
|
|
||||||
self.report.user.end_progress()
|
self.report.user.end_progress()
|
||||||
|
|
||||||
@ -4173,7 +4184,7 @@ class SourcePages(BasePage):
|
|||||||
key = source.get_title() + str(source.get_gramps_id())
|
key = source.get_title() + str(source.get_gramps_id())
|
||||||
source_dict[key] = (source, handle)
|
source_dict[key] = (source, handle)
|
||||||
|
|
||||||
keys = sorted(source_dict, key=glocale.sort_key)
|
keys = sorted(source_dict, key=SORT_KEY)
|
||||||
|
|
||||||
msg = _("This page contains an index of all the sources in the "
|
msg = _("This page contains an index of all the sources in the "
|
||||||
"database, sorted by their title. Clicking on a source’s "
|
"database, sorted by their title. Clicking on a source’s "
|
||||||
@ -4343,7 +4354,6 @@ class MediaPages(BasePage):
|
|||||||
Generate and output the pages under the Media tab, namely the media
|
Generate and output the pages under the Media tab, namely the media
|
||||||
index and the individual media pages.
|
index and the individual media pages.
|
||||||
|
|
||||||
@param: report -- the instance of the main report class for this report
|
|
||||||
@param: title -- the web site title
|
@param: title -- the web site title
|
||||||
"""
|
"""
|
||||||
log.debug("obj_dict[Media]")
|
log.debug("obj_dict[Media]")
|
||||||
@ -6521,7 +6531,7 @@ class RepositoryPages(BasePage):
|
|||||||
key = repository.get_name() + str(repository.get_gramps_id())
|
key = repository.get_name() + str(repository.get_gramps_id())
|
||||||
repos_dict[key] = (repository, repository_handle)
|
repos_dict[key] = (repository, repository_handle)
|
||||||
|
|
||||||
keys = sorted(repos_dict, key = glocale.sort_key)
|
keys = sorted(repos_dict, key = SORT_KEY)
|
||||||
|
|
||||||
# RepositoryListPage Class
|
# RepositoryListPage Class
|
||||||
self.RepositoryListPage(self.report, title, repos_dict, keys)
|
self.RepositoryListPage(self.report, title, repos_dict, keys)
|
||||||
@ -7519,20 +7529,6 @@ class NavWebReport(Report):
|
|||||||
fname = CSS["DropDown-Menus"]["filename"]
|
fname = CSS["DropDown-Menus"]["filename"]
|
||||||
self.copy_file(fname, "narrative-menus.css", "css")
|
self.copy_file(fname, "narrative-menus.css", "css")
|
||||||
|
|
||||||
# copy Animated Citations Drop Down Layout if being used, copy its style sheet
|
|
||||||
# and its associated javascript file?
|
|
||||||
if (self.css == _("Basic-Blue") or self.css == _("Visually Impaired")):
|
|
||||||
if self.citationreferents == "DropDown":
|
|
||||||
fname = CSS["Animated DropDown"]["javascript"]
|
|
||||||
self.copy_file(fname, "jquery-1.7.1.min.js", "scripts")
|
|
||||||
|
|
||||||
if self.citationreferents == "DropDown":
|
|
||||||
fname = CSS["Animated DropDown"]["filename"]
|
|
||||||
else:
|
|
||||||
fname = CSS["Outline"]["filename"]
|
|
||||||
self.copy_file(fname, "narrative-citations.css", "css")
|
|
||||||
|
|
||||||
|
|
||||||
# copy narrative-maps Style Sheet if Place or Family Map pages are being created?
|
# copy narrative-maps Style Sheet if Place or Family Map pages are being created?
|
||||||
if (self.placemappages or self.familymappages):
|
if (self.placemappages or self.familymappages):
|
||||||
fname = CSS["NarrativeMaps"]["filename"]
|
fname = CSS["NarrativeMaps"]["filename"]
|
||||||
@ -8480,14 +8476,12 @@ def sort_people(dbase, handle_list):
|
|||||||
|
|
||||||
sorted_lists = []
|
sorted_lists = []
|
||||||
# According to the comment in flatbasemodel: This list is sorted
|
# According to the comment in flatbasemodel: This list is sorted
|
||||||
# ascending, via localized string sort. glocale.sort_key which
|
# ascending, via localized string sort. SORT_KEY
|
||||||
# uses strxfrm, which is apparently broken in Win ?? --> they should fix
|
temp_list = sorted(sname_sub, key=SORT_KEY)
|
||||||
# base lib, we need strxfrm, fix it in the Utils module.
|
|
||||||
temp_list = sorted(sname_sub, key=glocale.sort_key)
|
|
||||||
|
|
||||||
for name in temp_list:
|
for name in temp_list:
|
||||||
slist = sorted(((sortnames[x], x) for x in sname_sub[name]),
|
slist = sorted(((sortnames[x], x) for x in sname_sub[name]),
|
||||||
key=lambda x:glocale.sort_key(x[0]))
|
key=lambda x:SORT_KEY(x[0]))
|
||||||
entries = [x[1] for x in slist]
|
entries = [x[1] for x in slist]
|
||||||
sorted_lists.append((name, entries))
|
sorted_lists.append((name, entries))
|
||||||
|
|
||||||
@ -8514,7 +8508,7 @@ def sort_event_types(dbase, event_types, event_handle_list):
|
|||||||
sort_value = event.get_date_object().get_sort_value()
|
sort_value = event.get_date_object().get_sort_value()
|
||||||
event_dict[event_type].append((sort_value, event_handle))
|
event_dict[event_type].append((sort_value, event_handle))
|
||||||
|
|
||||||
for tup_list in list(event_dict.values()):
|
for tup_list in event_dict.values():
|
||||||
tup_list.sort()
|
tup_list.sort()
|
||||||
|
|
||||||
# return a list of sorted tuples, one per event
|
# return a list of sorted tuples, one per event
|
||||||
@ -8551,20 +8545,19 @@ def first_letter(string):
|
|||||||
else:
|
else:
|
||||||
letter = cuni(' ')
|
letter = cuni(' ')
|
||||||
# See : http://www.gramps-project.org/bugs/view.php?id = 2933
|
# See : http://www.gramps-project.org/bugs/view.php?id = 2933
|
||||||
lang_country = glocale.get_translation().language()
|
if COLLATE_LANG == "sv_SE" and (letter == cuni('W') or letter == cuni('V')):
|
||||||
if lang_country == "sv" and (letter == cuni('W') or letter == cuni('V')):
|
letter = cuni('V,W')
|
||||||
letter = 'V,W'
|
|
||||||
# See : http://www.gramps-project.org/bugs/view.php?id = 4423
|
# See : http://www.gramps-project.org/bugs/view.php?id = 4423
|
||||||
elif (lang_country == "cs" or lang_country == "sk") and letter == cuni('C') and len(string) > 1:
|
elif (COLLATE_LANG == "cs_CZ" or COLLATE_LANG == "sk_SK") and letter == cuni('C') and len(string) > 1:
|
||||||
second_letter = normalize('NFKC', str(string))[1].upper()
|
second_letter = normalize('NFKC', cuni(string))[1].upper()
|
||||||
if second_letter == cuni('H'):
|
if second_letter == cuni('H'):
|
||||||
letter += cuni('h')
|
letter += cuni('h')
|
||||||
elif lang_country == "sk" and letter == cuni('D') and len(string) > 1:
|
elif COLLATE_LANG == "sk_SK" and letter == cuni('D') and len(string) > 1:
|
||||||
second_letter = normalize('NFKC', cuni(string))[1].upper()
|
second_letter = normalize('NFKC', cuni(string))[1].upper()
|
||||||
if second_letter == cuni('Z'):
|
if second_letter == cuni('Z'):
|
||||||
letter += cuni('z')
|
letter += cuni('z')
|
||||||
elif second_letter == cuni('≈Ω'):
|
elif second_letter == cuni('Ž'):
|
||||||
letter += cuni('ž')
|
letter += cuni('ž')
|
||||||
return letter
|
return letter
|
||||||
|
|
||||||
def get_first_letters(dbase, menu_set, key):
|
def get_first_letters(dbase, menu_set, key):
|
||||||
@ -8614,13 +8607,12 @@ def alphabet_navigation(menu_set):
|
|||||||
#
|
#
|
||||||
# See : http://www.gramps-project.org/bugs/view.php?id = 2933
|
# See : http://www.gramps-project.org/bugs/view.php?id = 2933
|
||||||
#
|
#
|
||||||
lang_country = glocale.get_translation().language()
|
|
||||||
|
|
||||||
for menu_item in menu_set:
|
for menu_item in menu_set:
|
||||||
sorted_set[menu_item] += 1
|
sorted_set[menu_item] += 1
|
||||||
|
|
||||||
# remove the number of each occurance of each letter
|
# remove the number of each occurance of each letter
|
||||||
sorted_alpha_index = sorted(sorted_set, key = glocale.sort_key)
|
sorted_alpha_index = sorted(sorted_set, key = SORT_KEY)
|
||||||
|
|
||||||
# if no letters, return None to its callers
|
# if no letters, return None to its callers
|
||||||
if not sorted_alpha_index:
|
if not sorted_alpha_index:
|
||||||
@ -8641,7 +8633,7 @@ def alphabet_navigation(menu_set):
|
|||||||
while (cols <= num_of_cols and index < num_ltrs):
|
while (cols <= num_of_cols and index < num_ltrs):
|
||||||
menu_item = sorted_alpha_index[index]
|
menu_item = sorted_alpha_index[index]
|
||||||
|
|
||||||
if lang_country == "sv" and menu_item == cuni('V'):
|
if COLLATE_LANG == "sv_SE" and menu_item == cuni('V'):
|
||||||
hyper = Html("a", "V,W", href = "#V,W", title = "V,W")
|
hyper = Html("a", "V,W", href = "#V,W", title = "V,W")
|
||||||
else:
|
else:
|
||||||
# adding title to hyperlink menu for screen readers and braille writers
|
# adding title to hyperlink menu for screen readers and braille writers
|
||||||
|
Loading…
Reference in New Issue
Block a user