From 5c0b6dd02348b33ed50d72ad70a209028b946eea Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Tue, 18 Jun 2013 13:30:44 +0000
Subject: [PATCH 01/25] RU translation update

Translated more strings.
 filters
 graph layout
 some other utils
 load errors
 configuration gui

svn: r22515
---
 po/ru.po | 439 ++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 271 insertions(+), 168 deletions(-)

diff --git a/po/ru.po b/po/ru.po
index 942187927..497724f93 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -16,7 +16,7 @@ msgstr ""
 "Project-Id-Version: ru\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-05-09 12:49+0200\n"
-"PO-Revision-Date: 2013-06-12 01:16+0300\n"
+"PO-Revision-Date: 2013-06-18 10:28+0300\n"
 "Last-Translator: Vassilii Khachaturov <vassilii@tarunz.org>\n"
 "Language-Team: Russian <gramps-devel@lists.sf.net>\n"
 "Language: ru\n"
@@ -92,7 +92,7 @@ msgstr "ОШИБКА: Неопознанный формат для файла э
 #: ../gramps/cli/arghandler.py:405
 msgid "List of known Family Trees in your database path\n"
 msgstr ""
-"Путь к базе данных"
+"Путь к базе данных "
 "с семейным древом\n"
 
 #: ../gramps/cli/arghandler.py:410
@@ -218,6 +218,8 @@ msgstr "Неизвестное название книги."
 #, python-format
 msgid "Book name not given. Please use one of %(donottranslate)s=bookname."
 msgstr ""
+"Не задано название книги. Пожалуйста, укажите одно из %"
+"(donottranslate)s=bookname."
 
 #: ../gramps/cli/arghandler.py:706
 #, python-format
@@ -679,7 +681,7 @@ msgstr ""
 
 #: ../gramps/cli/plug/__init__.py:268
 msgid "Output file name. MANDATORY"
-msgstr ""
+msgstr "Имя файла на выходе. ОБЯЗАТЕЛЬНО"
 
 #: ../gramps/cli/plug/__init__.py:269
 msgid "=format"
@@ -699,7 +701,7 @@ msgstr "Название стиля."
 
 #: ../gramps/cli/plug/__init__.py:271
 msgid "Paper size name."
-msgstr ""
+msgstr "Формат листа бумаги."
 
 #: ../gramps/cli/plug/__init__.py:272 ../gramps/cli/plug/__init__.py:273
 #: ../gramps/cli/plug/__init__.py:275 ../gramps/cli/plug/__init__.py:277
@@ -709,7 +711,7 @@ msgstr ""
 
 #: ../gramps/cli/plug/__init__.py:272
 msgid "Paper orientation number."
-msgstr "Paper orientation number."
+msgstr "Ориентация страницы."
 
 #: ../gramps/cli/plug/__init__.py:273
 msgid "Left paper margin"
@@ -722,15 +724,15 @@ msgstr "Размер в см"
 
 #: ../gramps/cli/plug/__init__.py:275
 msgid "Right paper margin"
-msgstr ""
+msgstr "Правое поле"
 
 #: ../gramps/cli/plug/__init__.py:277
 msgid "Top paper margin"
-msgstr ""
+msgstr "Верхнее поле"
 
 #: ../gramps/cli/plug/__init__.py:279
 msgid "Bottom paper margin"
-msgstr ""
+msgstr "Нижнее поле"
 
 #: ../gramps/cli/plug/__init__.py:281
 msgid "=css filename"
@@ -738,7 +740,7 @@ msgstr ""
 
 #: ../gramps/cli/plug/__init__.py:281
 msgid "CSS filename to use, html format only"
-msgstr ""
+msgstr "Имя файла CSS, только для формата HTML"
 
 #: ../gramps/cli/plug/__init__.py:312 ../gramps/gen/plug/report/_paper.py:91
 #: ../gramps/gen/plug/report/_paper.py:113
@@ -786,7 +788,7 @@ msgstr "   Возможные параметры:"
 
 #: ../gramps/cli/plug/__init__.py:585
 msgid "(no help available)"
-msgstr ""
+msgstr "(подсказка отсутствует)"
 
 #: ../gramps/cli/plug/__init__.py:594
 msgid "   Available values are:"
@@ -805,19 +807,19 @@ msgstr "Не удалось записать отчет. "
 
 #: ../gramps/gen/config.py:285
 msgid "Imported %Y/%m/%d %H:%M:%S"
-msgstr ""
+msgstr "Импортировано %Y/%m/%d %H:%M:%S"
 
 #: ../gramps/gen/config.py:294
 msgid "Missing Given Name"
-msgstr "Отсутствующее имя"
+msgstr "Имя отсутствует"
 
 #: ../gramps/gen/config.py:295
 msgid "Missing Record"
-msgstr "Отсутствующая информация"
+msgstr "Запись отсутствует"
 
 #: ../gramps/gen/config.py:296
 msgid "Missing Surname"
-msgstr "Отсутствующая Фамилия"
+msgstr "Фамилия отсутствует"
 
 #: ../gramps/gen/config.py:303 ../gramps/gen/config.py:305
 msgid "Living"
@@ -900,6 +902,15 @@ msgid ""
 "computer with that software that created the Family Tree, export it to XML "
 "and load that XML into the version of Gramps you intend to use."
 msgstr ""
+"Gramps хранит свои данные в базе данных Беркли. Семейное древо, "
+"которое Вы пытаетесь загрузить, было записано в формате СУБД Беркли "
+"версии %(env_version)s. Текущая же версия Gramps version использкет "
+"СУБД Беркли версии %(bdb_version)s. Таким образом, Вы пытаетесь "
+"загрузить данные записанные в более новом формате в устаревшую "
+"сборку программы, это, скорее всего, не удастся. Правильные способ "
+"для решения этой проблемы — использовать экспорт и импорт в формате "
+"XML. Попытайтесь открыть это древо на том компьютере, где оно было "
+"создано, экспортируйте его в XML, а затем импортируйте его здесь."
 
 #: ../gramps/gen/db/exceptions.py:128
 #, python-format
@@ -916,6 +927,17 @@ msgid ""
 "If you have made a backup, then you can get Gramps to try to open the tree "
 "and upgrade it"
 msgstr ""
+"Версию BSDDB древа, которое Вы пытаетесь открыть, надо обновить "
+"с %(env_version)s на %(bdb_version)s.\n"
+"\n"
+"Скорее всего это значит, что это древо было создано в более старой версии "
+"Gramps. Открытие его в настоящей версии Gramps может безвозвратно "
+"повредить Ваше древо. Настоятельно рекомендуется сделать резервную "
+"копию Ваших данных, см.: \n"
+"http://www.gramps-project.org/wiki/index.php?title=How_to_make_a_backup\n"
+"\n"
+"Если Вы уже сделали резервную копию, то Вы можете попробовать открыть "
+"это древо, при этом произойдёт обновление версии BSDDB."
 
 #: ../gramps/gen/db/exceptions.py:151
 msgid ""
@@ -956,6 +978,19 @@ msgid ""
 "See: \n"
 "http://www.gramps-project.org/wiki/index.php?title=How_to_make_a_backup"
 msgstr ""
+"Структура данных семейного древа, которую использует Gramps, изменилась "
+"с тех пор, как данное дерево было создано.\n"
+"\n"
+"По этой причине, для открытия этого древа необходимо произвести обновление "
+"формата структуры данных.\n"
+"После обновления использовать предыдущие версии Gramps будет невозможно, "
+"даже если делать экспорт в формат .gramps xml!\n"
+"\n"
+"Обновление — сложная процедура, которую нельзя прерывать, иначе данные "
+"могут быть безвозвратно повреждены. Поэтому, перед началом обновления, "
+"сделайте резервную копию. "
+"См.: \n"
+"http://www.gramps-project.org/wiki/index.php?title=How_to_make_a_backup"
 
 #: ../gramps/gen/db/undoredo.py:249 ../gramps/gen/db/undoredo.py:286
 #: ../gramps/gen/db/write.py:2026
@@ -1015,7 +1050,7 @@ msgstr ""
 # statistics over import results
 #: ../gramps/gen/db/upgrade.py:530
 msgid "Upgrade Statistics"
-msgstr ""
+msgstr "Итоги обновления:"
 
 #: ../gramps/gen/db/write.py:1023
 #, python-format
@@ -1035,6 +1070,8 @@ msgid ""
 "A second transaction is started while there is still a transaction, \"%s\", "
 "active in the database."
 msgstr ""
+"Начата вторая транзакция с базой данных, хотя текущая транзакция, «%s», ещё "
+"не завершилась."
 
 #: ../gramps/gen/display/name.py:331
 msgid "Default format (defined by Gramps preferences)"
@@ -1163,11 +1200,11 @@ msgstr "семпрозвище"
 #: ../gramps/gen/display/name.py:1067
 #, python-format
 msgid "Wrong name format string %s"
-msgstr ""
+msgstr "Неверная строка формата имени «%s»"
 
 #: ../gramps/gen/display/name.py:1071
 msgid "ERROR, Edit Name format in Preferences"
-msgstr ""
+msgstr "ОШИБКА, Установите строку формата в меню «Настройки»"
 
 #: ../gramps/gen/filters/_filterparser.py:120
 #, python-format
@@ -1267,7 +1304,7 @@ msgstr "Общие фильтры"
 
 #: ../gramps/gen/filters/rules/_changedsincebase.py:82
 msgid "Wrong format of date-time"
-msgstr ""
+msgstr "Неверный формат даты/времени"
 
 #: ../gramps/gen/filters/rules/_changedsincebase.py:83
 #, python-format
@@ -1275,6 +1312,8 @@ msgid ""
 "Only date-times in the iso format of yyyy-mm-dd hh:mm:ss, where the time "
 "part is optional, are accepted. %s does not satisfy."
 msgstr ""
+"Допускаются только дата/время в формате вида ГГГГ-ММ-ДД ЧЧ:ММ:СС или только "
+"ГГГГ-ММ-ДД. «%s» не годится."
 
 #: ../gramps/gen/filters/rules/_hascitationbase.py:51
 #: ../gramps/gen/filters/rules/citation/_hascitation.py:50
@@ -1325,7 +1364,7 @@ msgstr "Цитаты, удовлетворяющие параметрам"
 #: ../gramps/gen/filters/rules/_hascitationbase.py:55
 #: ../gramps/gen/filters/rules/citation/_hascitation.py:55
 msgid "Matches citations with particular parameters"
-msgstr "Выбирает цитаты с определёнными параметрами"
+msgstr "Выбирает цитаты с данными параметрами"
 
 #: ../gramps/gen/filters/rules/_hascitationbase.py:56
 #: ../gramps/gen/filters/rules/_hassourcebase.py:54
@@ -1339,7 +1378,7 @@ msgstr "Выбирает цитаты с определёнными параме
 #: ../gramps/gen/filters/rules/person/_hassourceof.py:49
 #: ../gramps/gen/filters/rules/place/_hassourceof.py:49
 msgid "Citation/source filters"
-msgstr ""
+msgstr "Фильтры цитат/источников"
 
 #: ../gramps/gen/filters/rules/_haseventbase.py:57
 #: ../gramps/gen/filters/rules/person/_familywithincompleteevent.py:47
@@ -1447,7 +1486,7 @@ msgstr "Название:"
 #: ../gramps/gen/filters/rules/_matchesfilterbase.py:72
 #, python-format
 msgid "Can't find filter %s in the defined custom filters"
-msgstr ""
+msgstr "Не могу найти фильтр «%s» среди заданных фильтров пользователя."
 
 #: ../gramps/gen/filters/rules/_matchessourcefilterbase.py:49
 #: ../gramps/gen/filters/rules/citation/_matchessourcefilter.py:50
@@ -1542,7 +1581,7 @@ msgstr "Цитаты с <числом> документов"
 
 #: ../gramps/gen/filters/rules/citation/_hasgallery.py:48
 msgid "Matches citations with a certain number of items in the gallery"
-msgstr "Выбирает цитаты с определенным числом документов в галерее"
+msgstr "Выбирает цитаты с данным числом документов в галерее"
 
 #: ../gramps/gen/filters/rules/citation/_hasidof.py:47
 msgid "Citation with <Id>"
@@ -1558,7 +1597,7 @@ msgstr "Цитаты с <числом> заметок"
 
 #: ../gramps/gen/filters/rules/citation/_hasnote.py:49
 msgid "Matches citations having a certain number of notes"
-msgstr "Выбирает цитаты с определённым числом заметок"
+msgstr "Выбирает цитаты с данным числом заметок"
 
 #: ../gramps/gen/filters/rules/citation/_hasnotematchingsubstringof.py:45
 msgid "Citations having notes containing <substring>"
@@ -1587,7 +1626,7 @@ msgstr "Цитаты с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/citation/_hasreferencecountof.py:46
 msgid "Matches citations with a certain reference count"
-msgstr ""
+msgstr "Выбирает цитаты с данным счётчиком ссылок"
 
 #: ../gramps/gen/filters/rules/citation/_hassource.py:50
 #: ../gramps/gen/filters/rules/media/_hasmedia.py:48
@@ -1633,7 +1672,7 @@ msgstr "Источники, удовлетворяющие параметрам"
 
 #: ../gramps/gen/filters/rules/citation/_hassource.py:55
 msgid "Matches citations with a source of a particular value"
-msgstr ""
+msgstr "Выбирает цитаты из данного источника"
 
 #: ../gramps/gen/filters/rules/citation/_hassource.py:57
 msgid "Source filters"
@@ -1674,6 +1713,8 @@ msgid ""
 "Matches citations with sources with a repository reference that match a "
 "certain repository filter"
 msgstr ""
+"Выбирает цитаты из источников из хранилищ, соответствующих указанному фильтру "
+"хранилищ"
 
 #: ../gramps/gen/filters/rules/citation/_matchessourcefilter.py:51
 msgid "Citations with source matching the <source filter>"
@@ -1739,7 +1780,7 @@ msgstr "События с <атрибутом>"
 
 #: ../gramps/gen/filters/rules/event/_hasattribute.py:48
 msgid "Matches events with the event attribute of a particular value"
-msgstr "Выбирает события с определённым значением атрибута"
+msgstr "Выбирает события с данным значением атрибута"
 
 #: ../gramps/gen/filters/rules/event/_hascitation.py:53
 msgid "Event with the <citation>"
@@ -1747,7 +1788,7 @@ msgstr "События с <цитатой>"
 
 #: ../gramps/gen/filters/rules/event/_hascitation.py:54
 msgid "Matches events with a citation of a particular value"
-msgstr "Выбирает события с определённым значением цитаты"
+msgstr "Выбирает события с данным значением цитаты"
 
 #: ../gramps/gen/filters/rules/event/_hasdata.py:48
 #: ../gramps/gen/filters/rules/event/_hastype.py:47
@@ -1785,7 +1826,7 @@ msgstr "События с <данными>"
 
 #: ../gramps/gen/filters/rules/event/_hasdata.py:51
 msgid "Matches events with data of a particular value"
-msgstr ""
+msgstr "Выбирает события с указанным значением в поле данных"
 
 #: ../gramps/gen/filters/rules/event/_hasgallery.py:47
 msgid "Events with <count> media"
@@ -1809,7 +1850,7 @@ msgstr "События с <числом> заметок"
 
 #: ../gramps/gen/filters/rules/event/_hasnote.py:48
 msgid "Matches events having a certain number of notes"
-msgstr "Выбирает события с определённым числом заметок"
+msgstr "Выбирает события с данным числом заметок"
 
 #: ../gramps/gen/filters/rules/event/_hasnotematchingsubstringof.py:44
 msgid "Events having notes containing <substring>"
@@ -1836,7 +1877,7 @@ msgstr "События с <числом> ссылок"
 
 #: ../gramps/gen/filters/rules/event/_hasreferencecountof.py:45
 msgid "Matches events with a certain reference count"
-msgstr "Выбирает события с определённым числом ссылок на них"
+msgstr "Выбирает события с данным числом ссылок на них"
 
 #: ../gramps/gen/filters/rules/event/_hassourcecount.py:46
 msgid "Events with <count> sources"
@@ -1844,7 +1885,7 @@ msgstr "События с <числом> источников"
 
 #: ../gramps/gen/filters/rules/event/_hassourcecount.py:47
 msgid "Matches events with a certain number of sources connected to it"
-msgstr "Выбирает события с определённым числом источников"
+msgstr "Выбирает события с данным числом источников"
 
 #: ../gramps/gen/filters/rules/event/_hastype.py:48
 msgid "Events with the particular type"
@@ -1882,11 +1923,11 @@ msgstr "Выбирает события людей, соответствующи
 
 #: ../gramps/gen/filters/rules/event/_matchessourceconfidence.py:47
 msgid "Events with at least one direct source >= <confidence level>"
-msgstr ""
+msgstr "События с хоть одним источником >= <достоверность>"
 
 #: ../gramps/gen/filters/rules/event/_matchessourceconfidence.py:48
 msgid "Matches events with at least one direct source with confidence level(s)"
-msgstr ""
+msgstr "Выбирает события с хотя бы одним достоверным источником."
 
 #: ../gramps/gen/filters/rules/event/_matchessourcefilter.py:51
 msgid "Events with source matching the <source filter>"
@@ -1999,7 +2040,7 @@ msgstr "Семьи с семейным <атрибутом>"
 
 #: ../gramps/gen/filters/rules/family/_hasattribute.py:48
 msgid "Matches families with the family attribute of a particular value"
-msgstr "Выбирает семьи с определённым значением атрибута"
+msgstr "Выбирает семьи с данным значением атрибута"
 
 #: ../gramps/gen/filters/rules/family/_hascitation.py:53
 msgid "Family with the <citation>"
@@ -2007,7 +2048,7 @@ msgstr "Семьи с <цитатой>"
 
 #: ../gramps/gen/filters/rules/family/_hascitation.py:54
 msgid "Matches families with a citation of a particular value"
-msgstr ""
+msgstr "Выбирает семьи с цитатами с указанным значением в поле данных"
 
 #: ../gramps/gen/filters/rules/family/_hasevent.py:49
 #: ../gramps/gen/filters/rules/person/_hasfamilyevent.py:49
@@ -2028,7 +2069,7 @@ msgstr "Семьи с <событием>"
 
 #: ../gramps/gen/filters/rules/family/_hasevent.py:55
 msgid "Matches families with an event of a particular value"
-msgstr "Выбирает семьи с определённым событием"
+msgstr "Выбирает семьи с данным событием"
 
 #: ../gramps/gen/filters/rules/family/_hasgallery.py:47
 msgid "Families with <count> media"
@@ -2052,7 +2093,7 @@ msgstr "Семьи с <числом> событий СПД"
 
 #: ../gramps/gen/filters/rules/family/_haslds.py:51
 msgid "Matches families with a certain number of LDS events"
-msgstr "Выбирает семьи с определённым числом числом событий церкви СПД"
+msgstr "Выбирает семьи с данным числом числом событий церкви СПД"
 
 #: ../gramps/gen/filters/rules/family/_hasnote.py:47
 msgid "Families having <count> notes"
@@ -2060,7 +2101,7 @@ msgstr "Семьи с <числом> заметок"
 
 #: ../gramps/gen/filters/rules/family/_hasnote.py:48
 msgid "Matches families having a certain number notes"
-msgstr "Выбирает семьи с определённым количеством заметок"
+msgstr "Выбирает семьи с данным количеством заметок"
 
 #: ../gramps/gen/filters/rules/family/_hasnotematchingsubstringof.py:44
 msgid "Families having notes containing <substring>"
@@ -2088,7 +2129,7 @@ msgstr "Семьи с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/family/_hasreferencecountof.py:45
 msgid "Matches family objects with a certain reference count"
-msgstr "Выбирает семьи с определённым числом ссылок на них"
+msgstr "Выбирает семьи с данным числом ссылок на них"
 
 #: ../gramps/gen/filters/rules/family/_hasreltype.py:47
 #: ../gramps/gen/filters/rules/person/_hasrelationship.py:48
@@ -2102,7 +2143,7 @@ msgstr "Семьи с типом отношений"
 
 #: ../gramps/gen/filters/rules/family/_hasreltype.py:49
 msgid "Matches families with the relationship type of a particular value"
-msgstr "Выбирает семьи с определённым типом отношений"
+msgstr "Выбирает семьи с данным типом отношений"
 
 #: ../gramps/gen/filters/rules/family/_hassourcecount.py:47
 msgid "Families with <count> sources"
@@ -2110,7 +2151,7 @@ msgstr "Семьи с <числом> источников"
 
 #: ../gramps/gen/filters/rules/family/_hassourcecount.py:48
 msgid "Matches families with a certain number of sources connected to it"
-msgstr "Выбирает семьи с определённым числом источников"
+msgstr "Выбирает семьи с данным числом источников"
 
 #: ../gramps/gen/filters/rules/family/_hassourceof.py:48
 msgid "Families with the <source>"
@@ -2118,7 +2159,7 @@ msgstr "Семьи с <источником>"
 
 #: ../gramps/gen/filters/rules/family/_hassourceof.py:50
 msgid "Matches families who have a particular source"
-msgstr ""
+msgstr "Выбирает семьи с указанным источником"
 
 #: ../gramps/gen/filters/rules/family/_hastag.py:49
 #: ../gramps/gen/filters/rules/media/_hastag.py:49
@@ -2134,15 +2175,15 @@ msgstr "Семьи с <пометкой>"
 
 #: ../gramps/gen/filters/rules/family/_hastag.py:51
 msgid "Matches families with the particular tag"
-msgstr ""
+msgstr "Выбирает семьи с указанной меткой"
 
 #: ../gramps/gen/filters/rules/family/_hastwins.py:47
 msgid "Families with twins"
-msgstr ""
+msgstr "Семьи с близнецами"
 
 #: ../gramps/gen/filters/rules/family/_hastwins.py:48
 msgid "Matches families with twins"
-msgstr ""
+msgstr "Выбирает семьи с близнецами"
 
 #: ../gramps/gen/filters/rules/family/_isbookmarked.py:46
 msgid "Bookmarked families"
@@ -2162,12 +2203,12 @@ msgstr "Выбирает семьи, соответствующие фильтр
 
 #: ../gramps/gen/filters/rules/family/_matchessourceconfidence.py:46
 msgid "Families with at least one direct source >= <confidence level>"
-msgstr ""
+msgstr "Семьи с хоть одним источником >= <достоверность>"
 
 #: ../gramps/gen/filters/rules/family/_matchessourceconfidence.py:47
 msgid ""
 "Matches families with at least one direct source with confidence level(s)"
-msgstr ""
+msgstr "Выбирает семьи с хоть одним достоверным источником."
 
 #: ../gramps/gen/filters/rules/family/_motherhasidof.py:48
 msgid "Families with mother with the <Id>"
@@ -2284,7 +2325,7 @@ msgstr "Документ с <атрибутом>"
 
 #: ../gramps/gen/filters/rules/media/_hasattribute.py:48
 msgid "Matches media objects with the attribute of a particular value"
-msgstr "Выбирает документы с определённым значением атрибута"
+msgstr "Выбирает документы с данным значением атрибута"
 
 #: ../gramps/gen/filters/rules/media/_hascitation.py:52
 msgid "Media with the <citation>"
@@ -2292,7 +2333,7 @@ msgstr "Документы с <цитатой>"
 
 #: ../gramps/gen/filters/rules/media/_hascitation.py:53
 msgid "Matches media with a citation of a particular value"
-msgstr "Выбирает документы с определённым значением цитаты"
+msgstr "Выбирает документы с данным значением цитаты"
 
 #: ../gramps/gen/filters/rules/media/_hasidof.py:46
 msgid "Media object with <Id>"
@@ -2326,7 +2367,7 @@ msgstr "Документ, удовлетворяющий параметрам"
 
 #: ../gramps/gen/filters/rules/media/_hasmedia.py:54
 msgid "Matches media objects with particular parameters"
-msgstr "Выбирает документы с определёнными параметрами"
+msgstr "Выбирает документы с данными параметрами"
 
 #: ../gramps/gen/filters/rules/media/_hasnotematchingsubstringof.py:44
 msgid "Media objects having notes containing <substring>"
@@ -2355,7 +2396,7 @@ msgstr "Документы с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/media/_hasreferencecountof.py:45
 msgid "Matches media objects with a certain reference count"
-msgstr "Выбирает документы с определёнными количеством ссылок на них"
+msgstr "Выбирает документы с данными количеством ссылок на них"
 
 #: ../gramps/gen/filters/rules/media/_hassourcecount.py:47
 msgid "Media with <count> sources"
@@ -2363,7 +2404,7 @@ msgstr "Документы с <числом> источников"
 
 #: ../gramps/gen/filters/rules/media/_hassourcecount.py:48
 msgid "Matches media with a certain number of sources connected to it"
-msgstr "Выбирает документы с определённым числом источников"
+msgstr "Выбирает документы с данным числом источников"
 
 #: ../gramps/gen/filters/rules/media/_hassourceof.py:48
 msgid "Media with the <source>"
@@ -2379,7 +2420,7 @@ msgstr "Документы с <пометкой>"
 
 #: ../gramps/gen/filters/rules/media/_hastag.py:51
 msgid "Matches media objects with the particular tag"
-msgstr ""
+msgstr "Выбирает документы с указанной меткой"
 
 #: ../gramps/gen/filters/rules/media/_matchesfilter.py:46
 msgid "Media objects matching the <filter>"
@@ -2460,7 +2501,7 @@ msgstr "Заметки, удовлетворяющие параметрам"
 
 #: ../gramps/gen/filters/rules/note/_hasnote.py:52
 msgid "Matches Notes with particular parameters"
-msgstr "Выбирает заметки с определёнными параметрами"
+msgstr "Выбирает заметки с данными параметрами"
 
 # !!!FIXME!!!
 #: ../gramps/gen/filters/rules/note/_hasreferencecountof.py:44
@@ -2469,7 +2510,7 @@ msgstr "Заметки с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/note/_hasreferencecountof.py:45
 msgid "Matches notes with a certain reference count"
-msgstr "Выбирает заметки с определённым количеством ссылок на них"
+msgstr "Выбирает заметки с данным количеством ссылок на них"
 
 #: ../gramps/gen/filters/rules/note/_hastag.py:50
 msgid "Notes with the <tag>"
@@ -2481,11 +2522,11 @@ msgstr "Заметки с определенной пометкой"
 
 #: ../gramps/gen/filters/rules/note/_hastype.py:48
 msgid "Notes with the particular type"
-msgstr ""
+msgstr "Заметки указанного типа"
 
 #: ../gramps/gen/filters/rules/note/_hastype.py:49
 msgid "Matches notes with the particular type "
-msgstr ""
+msgstr "Выбирает заметки определённого типа "
 
 #: ../gramps/gen/filters/rules/note/_matchesfilter.py:46
 msgid "Notes matching the <filter>"
@@ -2570,6 +2611,12 @@ msgid ""
 "between the specified person and the target people.  Each path is not "
 "necessarily the shortest path."
 msgstr ""
+"Поиск по базе данных, начиная от указанного лица, выбирает всех родственников "
+"между этим лицом и множеством людей, заданным с помощью фильтра. Результат "
+"представляет из себя набор цепей родства (как кровного, так и через брак), "
+"между "
+"указанным лицом и заданным множеством людей. Каждая цепь не обязательно "
+"будет кратчайшей."
 
 #: ../gramps/gen/filters/rules/person/_deeprelationshippathbetween.py:137
 msgid "Finding relationship paths"
@@ -2613,7 +2660,7 @@ msgstr "Люди с <числом> адресов"
 
 #: ../gramps/gen/filters/rules/person/_hasaddress.py:52
 msgid "Matches people with a certain number of personal addresses"
-msgstr "Выбирает людей с определённым количеством личных адресов"
+msgstr "Выбирает людей с данным количеством личных адресов"
 
 #: ../gramps/gen/filters/rules/person/_hasalternatename.py:47
 msgid "People with an alternate name"
@@ -2629,7 +2676,7 @@ msgstr "Выбирает лиц с <количеством> связей"
 
 #: ../gramps/gen/filters/rules/person/_hasassociation.py:52
 msgid "Matches people with a certain number of associations"
-msgstr "Выбирает лиц с определённым количеством связей"
+msgstr "Выбирает лиц с данным количеством связей"
 
 #: ../gramps/gen/filters/rules/person/_hasattribute.py:46
 #: ../gramps/gui/editors/filtereditor.py:100
@@ -2642,7 +2689,7 @@ msgstr "Люди с личным <атрибутом>"
 
 #: ../gramps/gen/filters/rules/person/_hasattribute.py:48
 msgid "Matches people with the personal attribute of a particular value"
-msgstr "Выбирает людей с определённым значением личного атрибута"
+msgstr "Выбирает людей с данным значением личного атрибута"
 
 #: ../gramps/gen/filters/rules/person/_hasbirth.py:50
 msgid "People with the <birth data>"
@@ -2658,7 +2705,7 @@ msgstr "Люди с <цитатой>"
 
 #: ../gramps/gen/filters/rules/person/_hascitation.py:53
 msgid "Matches people with a citation of a particular value"
-msgstr ""
+msgstr "Выбирает людей с цитатами с указанным значением"
 
 #: ../gramps/gen/filters/rules/person/_hascommonancestorwith.py:48
 msgid "People with a common ancestor with <person>"
@@ -2709,7 +2756,7 @@ msgstr "Люди с личными <событиями>"
 
 #: ../gramps/gen/filters/rules/person/_hasevent.py:56
 msgid "Matches people with a personal event of a particular value"
-msgstr "Выбирает людей с определённым личным событием"
+msgstr "Выбирает людей с данным личным событием"
 
 #: ../gramps/gen/filters/rules/person/_hasfamilyattribute.py:47
 msgid "People with the family <attribute>"
@@ -2717,7 +2764,7 @@ msgstr "Люди с семейным <атрибутом>"
 
 #: ../gramps/gen/filters/rules/person/_hasfamilyattribute.py:48
 msgid "Matches people with the family attribute of a particular value"
-msgstr "Выбирает объекты с определённым значением семейного атрибута"
+msgstr "Выбирает объекты с данным значением семейного атрибута"
 
 #: ../gramps/gen/filters/rules/person/_hasfamilyevent.py:53
 msgid "People with the family <event>"
@@ -2725,7 +2772,7 @@ msgstr "Люди с семейными <событиями>"
 
 #: ../gramps/gen/filters/rules/person/_hasfamilyevent.py:54
 msgid "Matches people with a family event of a particular value"
-msgstr "Выбирает людей с определённым семейным событием"
+msgstr "Выбирает людей с данным семейным событием"
 
 #: ../gramps/gen/filters/rules/person/_hasgallery.py:44
 msgid "People with <count> media"
@@ -2751,7 +2798,7 @@ msgstr "Лица с <числом> событий СПД"
 
 #: ../gramps/gen/filters/rules/person/_haslds.py:51
 msgid "Matches people with a certain number of LDS events"
-msgstr "Выбирает людей с определённым числом числом событий церкви СПД"
+msgstr "Выбирает людей с данным числом числом событий церкви СПД"
 
 #: ../gramps/gen/filters/rules/person/_hasnameof.py:49
 msgid "Given name:"
@@ -2910,7 +2957,7 @@ msgstr "Лица с <числом> источников"
 
 #: ../gramps/gen/filters/rules/person/_hassourcecount.py:48
 msgid "Matches people with a certain number of sources connected to it"
-msgstr ""
+msgstr "Выбирает людей, для которых задано указанное количество источников."
 
 #: ../gramps/gen/filters/rules/person/_hassourceof.py:48
 msgid "People with the <source>"
@@ -2926,7 +2973,7 @@ msgstr "Люди с <пометкой>"
 
 #: ../gramps/gen/filters/rules/person/_hastag.py:51
 msgid "Matches people with the particular tag"
-msgstr ""
+msgstr "Выбирает людей с указанной меткой"
 
 #: ../gramps/gen/filters/rules/person/_hastextmatchingsubstringof.py:49
 #: ../gramps/gui/editors/filtereditor.py:540
@@ -3042,13 +3089,14 @@ msgstr "Выбирает потомков и супругов потомков 
 
 #: ../gramps/gen/filters/rules/person/_isdescendantfamilyoffiltermatch.py:49
 msgid "Descendant family members of <filter> match"
-msgstr ""
+msgstr "Члены семьи потомков тех, кого выбрал <фильтр>"
 
 #: ../gramps/gen/filters/rules/person/_isdescendantfamilyoffiltermatch.py:51
 msgid ""
 "Matches people that are descendants or the spouse of anybody matched by a "
 "filter"
 msgstr ""
+"Выбирает потомков и супругов потомков лиц, выбранных указанным фильтром"
 
 #: ../gramps/gen/filters/rules/person/_isdescendantof.py:48
 msgid "Descendants of <person>"
@@ -3191,11 +3239,11 @@ msgstr "Выбирает предков соответствующих филь
 
 #: ../gramps/gen/filters/rules/person/_isrelatedwith.py:47
 msgid "People related to <Person>"
-msgstr ""
+msgstr "Родственники <лица>"
 
 #: ../gramps/gen/filters/rules/person/_isrelatedwith.py:49
 msgid "Matches people related to a specified person"
-msgstr ""
+msgstr "Выбирает людей, находящихся в родстве с указанным лицом"
 
 #: ../gramps/gen/filters/rules/person/_issiblingoffiltermatch.py:48
 msgid "Siblings of <filter> match"
@@ -3251,7 +3299,7 @@ msgstr "Лица с хоть одним источником >= <достове
 #: ../gramps/gen/filters/rules/person/_matchessourceconfidence.py:47
 msgid ""
 "Matches persons with at least one direct source with confidence level(s)"
-msgstr ""
+msgstr "Выбирает людей с хотя бы одним источником указанной достоверности"
 
 #: ../gramps/gen/filters/rules/person/_missingparent.py:45
 msgid "People missing parents"
@@ -3405,11 +3453,11 @@ msgstr ""
 
 #: ../gramps/gen/filters/rules/place/_hascitation.py:53
 msgid "Place with the <citation>"
-msgstr ""
+msgstr "Местоположение с <цитатой>"
 
 #: ../gramps/gen/filters/rules/place/_hascitation.py:54
 msgid "Matches places with a citation of a particular value"
-msgstr ""
+msgstr "Выбирает местоположения с цитатой с указанным значением"
 
 #: ../gramps/gen/filters/rules/place/_hasgallery.py:47
 msgid "Places with <count> media"
@@ -3446,7 +3494,7 @@ msgstr "Места, имеющие <число> заметок"
 
 #: ../gramps/gen/filters/rules/place/_hasnote.py:48
 msgid "Matches places having a certain number of notes"
-msgstr "Выбирает места с определённым числом заметок"
+msgstr "Выбирает места с данным числом заметок"
 
 #: ../gramps/gen/filters/rules/place/_hasnotematchingsubstringof.py:44
 msgid "Places having notes containing <substring>"
@@ -3517,7 +3565,7 @@ msgstr "Места, соответствующие параметрам"
 
 #: ../gramps/gen/filters/rules/place/_hasplace.py:61
 msgid "Matches places with particular parameters"
-msgstr "Выбирает места с определёнными параметрами"
+msgstr "Выбирает места с данными параметрами"
 
 # !!!FIXME!!!
 #: ../gramps/gen/filters/rules/place/_hasreferencecountof.py:44
@@ -3526,23 +3574,23 @@ msgstr "Места с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/place/_hasreferencecountof.py:45
 msgid "Matches places with a certain reference count"
-msgstr "Выбирает места с определённым числом ссылок на них"
+msgstr "Выбирает места с данным числом ссылок на них"
 
 #: ../gramps/gen/filters/rules/place/_hassourcecount.py:47
 msgid "Place with <count> sources"
-msgstr ""
+msgstr "Местоположение с <числом> источников"
 
 #: ../gramps/gen/filters/rules/place/_hassourcecount.py:48
 msgid "Matches places with a certain number of sources connected to it"
-msgstr ""
+msgstr "Выбирает местоположения с указанным числом источников"
 
 #: ../gramps/gen/filters/rules/place/_hassourceof.py:48
 msgid "Places with the <source>"
-msgstr ""
+msgstr "Местоположения с <источником>"
 
 #: ../gramps/gen/filters/rules/place/_hassourceof.py:50
 msgid "Matches places who have a particular source"
-msgstr ""
+msgstr "Выбирает местоположения с указанным источником"
 
 #: ../gramps/gen/filters/rules/place/_inlatlonneighborhood.py:51
 #: ../gramps/gui/glade/mergeplace.glade:259
@@ -3599,11 +3647,11 @@ msgstr "Выбирает места, соответствующие фильтр
 
 #: ../gramps/gen/filters/rules/place/_matchessourceconfidence.py:46
 msgid "Place with a direct source >= <confidence level>"
-msgstr ""
+msgstr "Местоположение с источником >= <достоверность>"
 
 #: ../gramps/gen/filters/rules/place/_matchessourceconfidence.py:47
 msgid "Matches places with at least one direct source with confidence level(s)"
-msgstr ""
+msgstr "Выбирает места с хоть одним достоверным источником"
 
 #: ../gramps/gen/filters/rules/place/_placeprivate.py:44
 msgid "Places marked private"
@@ -3678,7 +3726,7 @@ msgstr "Хранилища с количеством ссылок <count>"
 
 #: ../gramps/gen/filters/rules/repository/_hasreferencecountof.py:45
 msgid "Matches repositories with a certain reference count"
-msgstr "Выбирает хранилища с определённым количеством ссылок на них"
+msgstr "Выбирает хранилища с данным количеством ссылок на них"
 
 #: ../gramps/gen/filters/rules/repository/_hasrepo.py:50
 msgid "Address:"
@@ -3694,7 +3742,7 @@ msgstr "Хранилище, удовлетворяющее параметрам"
 
 #: ../gramps/gen/filters/rules/repository/_hasrepo.py:54
 msgid "Matches Repositories with particular parameters"
-msgstr "Выбирает хранилища с определёнными параметрами"
+msgstr "Выбирает хранилища с данными параметрами"
 
 #: ../gramps/gen/filters/rules/repository/_matchesfilter.py:46
 msgid "Repositories matching the <filter>"
@@ -3801,7 +3849,7 @@ msgstr "Источники с числом ссылок <число>"
 
 #: ../gramps/gen/filters/rules/source/_hasreferencecountof.py:45
 msgid "Matches sources with a certain reference count"
-msgstr "Выбирает источники с определённым числом ссылок на них"
+msgstr "Выбирает источники с данным числом ссылок на них"
 
 #: ../gramps/gen/filters/rules/source/_hasrepository.py:49
 msgid "Sources with <count> Repository references"
@@ -3815,12 +3863,15 @@ msgstr "Выбирает источники с определенным числ
 msgid ""
 "Sources with repository reference containing <substring> in \"Call Number\""
 msgstr ""
+"Источники со ссылкой на хранилища с указанной <подстрокой> в поле «Номер»"
 
 #: ../gramps/gen/filters/rules/source/_hasrepositorycallnumberref.py:47
 msgid ""
 "Matches sources with a repository reference\n"
 "containing a substring in \"Call Number\""
 msgstr ""
+"Выбирает источники со ссылкой на хранилища,\n"
+"с данной подстрокой в поле «Номер»"
 
 #: ../gramps/gen/filters/rules/source/_matchesfilter.py:46
 msgid "Sources matching the <filter>"
@@ -3832,17 +3883,19 @@ msgstr "Выбирает источники, соответствующие фи
 
 #: ../gramps/gen/filters/rules/source/_matchesrepositoryfilter.py:46
 msgid "Sources with repository reference matching the <repository filter>"
-msgstr ""
+msgstr "Источники со ссылкой на хранилища, соответствующие <фильтру хранилищ>"
 
 #: ../gramps/gen/filters/rules/source/_matchesrepositoryfilter.py:47
 msgid ""
 "Matches sources with a repository reference that match a certain\n"
 "repository filter"
 msgstr ""
+"Выбирает источники со ссылкой на хранилища, которые\n"
+"соответствуют указанному фильтру хранилищ"
 
 #: ../gramps/gen/filters/rules/source/_matchestitlesubstringof.py:45
 msgid "Sources title containing <substring>"
-msgstr ""
+msgstr "Название источника содержит <подстроку>"
 
 #: ../gramps/gen/filters/rules/source/_matchestitlesubstringof.py:46
 msgid "Matches sources whose title contains a certain substring"
@@ -4984,11 +5037,11 @@ msgstr "Цвет шрифта"
 
 #: ../gramps/gen/lib/styledtexttagtype.py:72
 msgid "Highlight"
-msgstr ""
+msgstr "Выделение"
 
 #: ../gramps/gen/lib/styledtexttagtype.py:73
 msgid "Superscript"
-msgstr ""
+msgstr "Верхний индекс"
 
 #: ../gramps/gen/lib/styledtexttagtype.py:74
 #: ../gramps/gui/widgets/styledtextbuffer.py:565
@@ -5110,6 +5163,8 @@ msgid ""
 "Option '%(opt_name)s' is present in %(file)s\n"
 "  but is not known to the module.  Ignoring..."
 msgstr ""
+"Настройка «%(opt_name)s» задана в %(file)s,\n"
+"  но не поддерживается данным модулем. Игнорирую..."
 
 #: ../gramps/gen/plug/_pluginreg.py:62
 msgid "Stable"
@@ -5183,6 +5238,8 @@ msgid ""
 "WARNING: Plugin %(plugin_name)s has no translation for any of your "
 "configured languages, using US English instead"
 msgstr ""
+"ВНИМАНИЕ: Модуль %(plugin_name)s не переведён ни на один из языков, "
+"которые указаны у Вас в настройках, будет использован английский язык"
 
 #: ../gramps/gen/plug/_pluginreg.py:1108 ../gramps/gen/plug/_pluginreg.py:1113
 #, python-format
@@ -5334,7 +5391,7 @@ msgstr "Влево, вверх"
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:89
 msgid "Compress to minimal size"
-msgstr ""
+msgstr "Сжать до минимального размера"
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:90
 msgid "Fill the given area"
@@ -5342,7 +5399,7 @@ msgstr "Заполнить данную площадь"
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:91
 msgid "Expand uniformly"
-msgstr ""
+msgstr "Равномерно растянуть"
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:93
 msgid "Top"
@@ -5451,6 +5508,19 @@ msgid ""
 "the node spacing.\n"
 "  Expand will shrink the graph uniformly to fit the print area."
 msgstr ""
+"Влияет на размещение узлов и масштабирование графа.\n"
+"Если граф меньше, чем область для печати:\n"
+"  «Сжать» не изменит расстояние между узлами. \n"
+"  «Заполнить» увеличит расстояние между узлами, \n"
+"заполняя область для печати и по горизонтали, и по вертикали.\n"
+"  «Растянуть» равномерно увеличит расстояние между узлами,\n"
+"сохраняя пропорции между сторонами.\n"
+"Если граф больше, чем область для печати:\n"
+"  «Сжать» упакует граф в более плотную форму, пожертвовав симметрией\n"
+"  «Заполнить» сожмёт граф до размера области для печати,\n"
+"предварительно увеличив расстояние между узлами\n"
+"  «Растянуть» равномерно сожмёт граф до размера области\n"
+"для печати, сохраняя пропорции между сторонами.\n"
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:219
 msgid "DPI"
@@ -5782,7 +5852,7 @@ msgstr "'%s' НЕ для этой версии Gramps."
 #: ../gramps/gen/plug/utils.py:256
 #, python-format
 msgid "It is for version %(v1)d.%(v2)d"
-msgstr ""
+msgstr "Предназначен для версии %(v1)d.%(v2)d"
 
 #: ../gramps/gen/plug/utils.py:266
 #, python-format
@@ -5969,6 +6039,8 @@ msgid ""
 "Family relationship translator not available for language '%s'. Using "
 "'english' instead."
 msgstr ""
+"Перевод терминологии родственных отношений для языка «%s» не осуществлён. "
+"Будет использована английская терминология."
 
 #: ../gramps/gen/utils/alive.py:114
 msgid "death event without date"
@@ -6018,7 +6090,7 @@ msgstr "дата, связанная с рождением супруга/-и, "
 
 #: ../gramps/gen/utils/alive.py:245 ../gramps/gen/utils/alive.py:256
 msgid "a spouse's death-related date, "
-msgstr ""
+msgstr "дата, связанная со смертью супруга/-и, "
 
 #: ../gramps/gen/utils/alive.py:274
 msgid "event with spouse"
@@ -6231,7 +6303,7 @@ msgstr "семья"
 
 #: ../gramps/gen/utils/grampslocale.py:865
 msgid "the place"
-msgstr ""
+msgstr "местоположение"
 
 #: ../gramps/gen/utils/grampslocale.py:867
 msgid "the event"
@@ -6243,20 +6315,20 @@ msgstr "хранилище"
 
 #: ../gramps/gen/utils/grampslocale.py:871
 msgid "the note"
-msgstr ""
+msgstr "заметка"
 
 # !!!FIXME!!!
 #: ../gramps/gen/utils/grampslocale.py:873
 msgid "the media"
-msgstr ""
+msgstr "документ"
 
 #: ../gramps/gen/utils/grampslocale.py:875
 msgid "the source"
-msgstr ""
+msgstr "источник"
 
 #: ../gramps/gen/utils/grampslocale.py:877
 msgid "the filter"
-msgstr ""
+msgstr "фильтр"
 
 #: ../gramps/gen/utils/grampslocale.py:879
 msgid "See details"
@@ -6550,6 +6622,8 @@ msgstr ""
 #, python-format
 msgid "Objects referenced by this note were missing in a file imported on %s."
 msgstr ""
+"Объекты, на которые ссылалась эта заметка, отсутствовали в файле, "
+"импортированном %s."
 
 #: ../gramps/grampsapp.py:137
 #, python-format
@@ -6572,6 +6646,11 @@ msgid ""
 "\n"
 "Gramps will terminate now."
 msgstr ""
+"\n"
+"У Вас не установлен пакет python bsddb3. Он требуется для запуска "
+"Gramps.\n"
+"\n"
+"Сейчас Gramps завершит выполнение."
 
 #: ../gramps/grampsapp.py:377 ../gramps/grampsapp.py:384
 #: ../gramps/grampsapp.py:432
@@ -6788,7 +6867,7 @@ msgstr "ссылка на лицо"
 
 #: ../gramps/gui/clipboard.py:690
 msgid "Child ref"
-msgstr ""
+msgstr "Ссылка на ребёнка"
 
 #: ../gramps/gui/clipboard.py:699
 #, python-format
@@ -6965,7 +7044,7 @@ msgstr "Буфер обмена"
 #: ../gramps/gui/clipboard.py:1484 ../gramps/gui/plug/quick/_quicktable.py:131
 #, python-format
 msgid "the object|See %s details"
-msgstr ""
+msgstr "См. детали для %s"
 
 #: ../gramps/gui/clipboard.py:1490 ../gramps/gui/plug/quick/_quicktable.py:141
 #, python-format
@@ -7097,6 +7176,9 @@ msgid ""
 "Enter your information so people can contact you when you distribute your "
 "Family Tree"
 msgstr ""
+"Введите информацию о себе, чтобы люди могли с Вами связаться, если Вы "
+"опубликуете "
+"информацию из Вашего древа"
 
 #: ../gramps/gui/configure.py:509
 #: ../gramps/gui/editors/displaytabs/addrembedlist.py:75
@@ -7178,59 +7260,59 @@ msgstr "Форматы ID"
 
 #: ../gramps/gui/configure.py:551
 msgid "Set the colors used for boxes in the graphical views"
-msgstr ""
+msgstr "Настройки цветов, используемых в видах с графическими отображениями"
 
 #: ../gramps/gui/configure.py:553
 msgid "Gender Male Alive"
-msgstr ""
+msgstr "Живые мужского пола"
 
 #: ../gramps/gui/configure.py:555
 msgid "Border Male Alive"
-msgstr ""
+msgstr "Граница для живых мужского пола"
 
 #: ../gramps/gui/configure.py:557
 msgid "Gender Male Death"
-msgstr ""
+msgstr "Умершие мужского пола"
 
 #: ../gramps/gui/configure.py:559
 msgid "Border Male Death"
-msgstr ""
+msgstr "Граница для умерших мужского пола"
 
 #: ../gramps/gui/configure.py:561
 msgid "Gender Female Alive"
-msgstr ""
+msgstr "Живые женского пола"
 
 #: ../gramps/gui/configure.py:563
 msgid "Border Female Alive"
-msgstr ""
+msgstr "Граница для живых женского пола"
 
 #: ../gramps/gui/configure.py:565
 msgid "Gender Female Death"
-msgstr ""
+msgstr "Умершие женского пола"
 
 #: ../gramps/gui/configure.py:567
 msgid "Border Female Death"
-msgstr ""
+msgstr "Граница для умерших женского пола"
 
 #: ../gramps/gui/configure.py:577
 msgid "Gender Unknown Alive"
-msgstr ""
+msgstr "Живые неизвестного пола"
 
 #: ../gramps/gui/configure.py:579
 msgid "Border Unknown Alive"
-msgstr ""
+msgstr "Граница для живых неизвестного пола"
 
 #: ../gramps/gui/configure.py:581
 msgid "Gender Unknown Death"
-msgstr ""
+msgstr "Умершие неизвестного пола"
 
 #: ../gramps/gui/configure.py:583
 msgid "Border Unknown Death"
-msgstr ""
+msgstr "Граница для умерших неизвестного пола"
 
 #: ../gramps/gui/configure.py:585
 msgid "Colors"
-msgstr ""
+msgstr "Цвета"
 
 #: ../gramps/gui/configure.py:593
 msgid "Suppress warning when adding parents to a child."
@@ -7299,7 +7381,7 @@ msgstr "Редактировать"
 
 #: ../gramps/gui/configure.py:981
 msgid "Consider single pa/matronymic as surname"
-msgstr ""
+msgstr "Использовать одиночное отчество/матроним как фамилию"
 
 #: ../gramps/gui/configure.py:995
 msgid "Date format"
@@ -7307,19 +7389,19 @@ msgstr "Формат дат"
 
 #: ../gramps/gui/configure.py:1003
 msgid "Years"
-msgstr ""
+msgstr "Года"
 
 #: ../gramps/gui/configure.py:1004
 msgid "Years, Months"
-msgstr ""
+msgstr "Года, месяцы"
 
 #: ../gramps/gui/configure.py:1005
 msgid "Years, Months, Days"
-msgstr ""
+msgstr "Года, месяцы, дни"
 
 #: ../gramps/gui/configure.py:1017
 msgid "Age display precision (requires restart)"
-msgstr ""
+msgstr "Точность при отображении возраста (требуется перезапуск)"
 
 #: ../gramps/gui/configure.py:1030
 msgid "Calendar on reports"
@@ -7356,7 +7438,7 @@ msgstr "Показывать текст на кнопках боковой па
 
 #: ../gramps/gui/configure.py:1093
 msgid "Show close button in gramplet bar tabs"
-msgstr ""
+msgstr "Показывать кнопку для закрытия панели грамплетов"
 
 #: ../gramps/gui/configure.py:1105
 msgid "Missing surname"
@@ -7422,7 +7504,7 @@ msgstr "Среднее количество лет между поколения
 
 #: ../gramps/gui/configure.py:1191
 msgid "Markup for invalid date format"
-msgstr "Пометка для индивидуальных форматов имен"
+msgstr "Разметка для индивидуальных форматов имен"
 
 #: ../gramps/gui/configure.py:1194
 #, python-format
@@ -7441,6 +7523,19 @@ msgid ""
 "For example: &lt;u&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/u&gt;\n"
 "will display <u><b>Underlined bold date</b></u>.\n"
 msgstr ""
+"Возможная разметка:\n"
+"<b>&lt;b&gt;Жирный шрифт&lt;/b&gt;</b>\n"
+"<big>&lt;big&gt;Увеличенный шрифт&lt;/big&gt;</big>\n"
+"<i>&lt;i&gt;Курсив&lt;/i&gt;</i>\n"
+"<s>&lt;s&gt;Зачёркнутый текст&lt;/s&gt;</s>\n"
+"<sub>&lt;sub&gt;Нижний индекс&lt;/sub&gt;</sub>\n"
+"<sup>&lt;sup&gt;Верхний индекс&lt;/sup&gt;</sup>\n"
+"<small>&lt;small&gt;Уменьшенный шрифт&lt;/small&gt;</small>\n"
+"<tt>&lt;tt&gt;Моноширинный шрифт&lt;/tt&gt;</tt>\n"
+"<u>&lt;u&gt;Подчёркнутый текст&lt;/u&gt;</u>\n"
+"\n"
+"Например: &lt;u&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/u&gt;\n"
+"отобразит <u><b>подчёркнутую дату жирным шрифтом</b></u>.\n"
 
 #: ../gramps/gui/configure.py:1208
 msgid "Dates"
@@ -7448,11 +7543,11 @@ msgstr "Даты"
 
 #: ../gramps/gui/configure.py:1218
 msgid "Add default source on GEDCOM import"
-msgstr ""
+msgstr "Добавлять источник по умолчанию при импорте из GEDCOM"
 
 #: ../gramps/gui/configure.py:1222
 msgid "Add tag on import"
-msgstr ""
+msgstr "Добавлять метку при импорте"
 
 #: ../gramps/gui/configure.py:1233
 msgid "Enable spelling checker"
@@ -7569,7 +7664,7 @@ msgstr "С_топ"
 
 #: ../gramps/gui/dbloader.py:138
 msgid "Gramps: Import Family Tree"
-msgstr ""
+msgstr "Gramps: Импортировать древо"
 
 #: ../gramps/gui/dbloader.py:143 ../gramps/gui/grampsgui.py:203
 msgid "Import"
@@ -7639,7 +7734,7 @@ msgstr "Необходимо обновить базу данных BSDDB!"
 
 #: ../gramps/gui/dbloader.py:332
 msgid "I have made a backup, please upgrade my tree"
-msgstr ""
+msgstr "У меня есть резерная копия, моё древо можно обновить"
 
 #: ../gramps/gui/dbloader.py:394
 msgid "All files"
@@ -8197,7 +8292,7 @@ msgstr ""
 
 #: ../gramps/gui/editors/displaytabs/backreflist.py:183
 msgid "Cannot open new citation editor"
-msgstr ""
+msgstr "Не могу редактировать цитату"
 
 #: ../gramps/gui/editors/displaytabs/backrefmodel.py:52
 #, python-format
@@ -8291,7 +8386,7 @@ msgstr "Страница"
 
 #: ../gramps/gui/editors/displaytabs/citationembedlist.py:93
 msgid "_Source Citations"
-msgstr ""
+msgstr "Цитаты источника"
 
 #: ../gramps/gui/editors/displaytabs/citationembedlist.py:173
 #: ../gramps/gui/editors/displaytabs/citationembedlist.py:183
@@ -8894,12 +8989,12 @@ msgstr "Редактирование Источника (%s)"
 #: ../gramps/gui/editors/editcitation.py:462
 #, python-format
 msgid "Add Citation (%s)"
-msgstr ""
+msgstr "Добавить цитату (%s)"
 
 #: ../gramps/gui/editors/editcitation.py:468
 #, python-format
 msgid "Edit Citation (%s)"
-msgstr ""
+msgstr "Редактировать цитату (%s)"
 
 #: ../gramps/gui/editors/editcitation.py:546
 #, python-format
@@ -8953,7 +9048,7 @@ msgstr "Выбор даты"
 
 #: ../gramps/gui/editors/editevent.py:65
 msgid "manual|Editing_Information_About_Events"
-msgstr ""
+msgstr "Редактирование информации о событиях"
 
 #: ../gramps/gui/editors/editevent.py:99
 #: ../gramps/gui/editors/editeventref.py:241
@@ -9777,7 +9872,7 @@ msgstr "Удалить Источник (%s)"
 
 #: ../gramps/gui/editors/edittaglist.py:50 ../gramps/gui/views/tags.py:88
 msgid "manual|Tags"
-msgstr ""
+msgstr "Метки"
 
 #: ../gramps/gui/editors/edittaglist.py:70
 #: ../gramps/gui/editors/edittaglist.py:128
@@ -9838,7 +9933,7 @@ msgstr "Фильтры источников"
 
 #: ../gramps/gui/editors/filtereditor.py:90
 msgid "Media Filters"
-msgstr ""
+msgstr "Фильтры документов"
 
 #: ../gramps/gui/editors/filtereditor.py:91
 msgid "Repository Filters"
@@ -10113,7 +10208,7 @@ msgstr "Том/Страница"
 
 #: ../gramps/gui/filters/sidebar/_citationsidebarfilter.py:107
 msgid "Minimum Confidence|Min. Conf."
-msgstr ""
+msgstr "Мин. достов."
 
 #: ../gramps/gui/filters/sidebar/_citationsidebarfilter.py:110
 #: ../gramps/gui/filters/sidebar/_eventsidebarfilter.py:110
@@ -10319,7 +10414,7 @@ msgstr "Веерная карта"
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:135
 #: ../gramps/plugins/view/fanchartdescview.py:74
 msgid "Descendant Fan Chart"
-msgstr ""
+msgstr "Веерная карта потомков"
 
 #: ../gramps/gui/grampsgui.py:158
 msgid "Font"
@@ -10799,19 +10894,19 @@ msgstr "Объединить цитаты"
 
 #: ../gramps/gui/merge/mergeevent.py:48
 msgid "manual|Merge_Events"
-msgstr ""
+msgstr "Объединение событий"
 
 #: ../gramps/gui/merge/mergeevent.py:70
 msgid "Merge Events"
-msgstr "Объединение событий"
+msgstr "Объединить события"
 
 #: ../gramps/gui/merge/mergefamily.py:49
 msgid "manual|Merge_Families"
-msgstr ""
+msgstr "Объединение семей"
 
 #: ../gramps/gui/merge/mergefamily.py:71
 msgid "Merge Families"
-msgstr "Объединение семей"
+msgstr "Объединить семьи"
 
 #: ../gramps/gui/merge/mergefamily.py:225
 #: ../gramps/gui/merge/mergeperson.py:340
@@ -10821,11 +10916,11 @@ msgstr "Ошибка объединения людей"
 
 #: ../gramps/gui/merge/mergemedia.py:47
 msgid "manual|Merge_Media_Objects"
-msgstr ""
+msgstr "Объединение документов"
 
 #: ../gramps/gui/merge/mergenote.py:47
 msgid "manual|Merge_Notes"
-msgstr ""
+msgstr "Объединение заметок"
 
 #: ../gramps/gui/merge/mergenote.py:96
 msgid "flowed"
@@ -10889,7 +10984,7 @@ msgstr "Объединение мест"
 
 #: ../gramps/gui/merge/mergerepository.py:46
 msgid "manual|Merge_Repositories"
-msgstr ""
+msgstr "Объединение хранилищ"
 
 #: ../gramps/gui/merge/mergesource.py:48
 msgid "manual|Merge_Sources"
@@ -11302,7 +11397,7 @@ msgstr ""
 
 #: ../gramps/gui/plug/export/_exportassistant.py:600
 msgid "Error exporting your Family Tree"
-msgstr ""
+msgstr "Ошибка при экспорте древа"
 
 #: ../gramps/gui/plug/export/_exportoptions.py:57
 msgid "Selecting Preview Data"
@@ -11495,7 +11590,7 @@ msgstr "Запустить"
 
 #: ../gramps/gui/plug/report/_bookdialog.py:352
 msgid "Name of the book. MANDATORY"
-msgstr ""
+msgstr "Название книги. ОБЯЗАТЕЛЬНО"
 
 #: ../gramps/gui/plug/report/_bookdialog.py:412
 msgid "New Book"
@@ -11545,11 +11640,11 @@ msgstr ""
 
 #: ../gramps/gui/plug/report/_bookdialog.py:584
 msgid "No selected book item"
-msgstr ""
+msgstr "Не выбран элемент книги"
 
 #: ../gramps/gui/plug/report/_bookdialog.py:585
 msgid "Please select a book item to configure."
-msgstr ""
+msgstr "Выберите элемент книги для настройки."
 
 #: ../gramps/gui/plug/report/_bookdialog.py:648
 msgid "Setup"
@@ -11565,11 +11660,11 @@ msgstr "Доступные элементы"
 
 #: ../gramps/gui/plug/report/_bookdialog.py:699
 msgid "No items"
-msgstr ""
+msgstr "Нет элементов"
 
 #: ../gramps/gui/plug/report/_bookdialog.py:699
 msgid "This book has no items."
-msgstr ""
+msgstr "В этой книге нет элементов."
 
 #: ../gramps/gui/plug/report/_bookdialog.py:710
 msgid "No book name"
@@ -11891,6 +11986,9 @@ msgid ""
 "To build it for Gramps see http://www.gramps-project.org/wiki/index.php?"
 "title=GEPS_029:_GTK3-GObject_introspection_Conversion#Spell_Check_Install"
 msgstr ""
+"Не загружен GtkSpell. Проверка правописания недоступна.\n"
+"Для сборки GtkSpell см. http://www.gramps-project.org/wiki/index.php?"
+"title=GEPS_029:_GTK3-GObject_introspection_Conversion#Spell_Check_Install"
 
 #: ../gramps/gui/spell.py:96
 msgid "Off"
@@ -12264,6 +12362,8 @@ msgstr ""
 #: ../gramps/gui/viewmanager.py:1221
 msgid "View failed to load. Check error output."
 msgstr ""
+"Не удалось загрузить вид. Проверьте сообщения об ошибках в окне, из которого "
+"запущен Gramps."
 
 # statistics over import results
 #: ../gramps/gui/viewmanager.py:1360
@@ -12733,7 +12833,7 @@ msgstr "Безымянный грамплет"
 
 #: ../gramps/gui/widgets/grampletbar.py:342
 msgid "Gramplet Bar"
-msgstr ""
+msgstr "Панель грамплетов"
 
 #: ../gramps/gui/widgets/grampletbar.py:344
 msgid ""
@@ -13033,11 +13133,11 @@ msgstr "Указатель"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:343
 msgid "SVG background color"
-msgstr ""
+msgstr "Фон SVG"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:345
 msgid "transparent background"
-msgstr ""
+msgstr "прозрачный фон"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:346
 #: ../gramps/plugins/drawreport/fanchart.py:668
@@ -13046,7 +13146,7 @@ msgstr "белый"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:347
 msgid "black"
-msgstr ""
+msgstr "чёрный"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:348
 msgid "red"
@@ -13058,23 +13158,23 @@ msgstr "зелёный"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:350
 msgid "blue"
-msgstr ""
+msgstr "синий"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:351
 msgid "cyan"
-msgstr ""
+msgstr "голубой"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:352
 msgid "magenta"
-msgstr ""
+msgstr "фиолетовый"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:353
 msgid "yellow"
-msgstr ""
+msgstr "жёлтый"
 
 #: ../gramps/plugins/docgen/svgdrawdoc.py:354
 msgid "The color, if any, of the SVG background"
-msgstr ""
+msgstr "Цвет фона для SVG"
 
 #: ../gramps/plugins/drawreport/ancestortree.py:74
 #: ../gramps/plugins/drawreport/descendtree.py:61
@@ -13773,7 +13873,7 @@ msgstr "Древо потомков для %(father)s и %(mother)s."
 
 #: ../gramps/plugins/drawreport/descendtree.py:214
 msgid "Descendant Graph"
-msgstr ""
+msgstr "Граф потомков"
 
 #: ../gramps/plugins/drawreport/descendtree.py:326
 #, python-format
@@ -14064,7 +14164,7 @@ msgstr "Печатать радиальный текст прямо или по
 
 #: ../gramps/plugins/drawreport/fanchart.py:680
 msgid "Draw empty boxes"
-msgstr ""
+msgstr "Рисовать пустые ячейки"
 
 #: ../gramps/plugins/drawreport/fanchart.py:681
 msgid "Draw the background although there is no information"
@@ -14072,7 +14172,7 @@ msgstr ""
 
 #: ../gramps/plugins/drawreport/fanchart.py:685
 msgid "Use one font style for all generations"
-msgstr ""
+msgstr "Использовать одинаковый стиль шрифта для всех поколений"
 
 #: ../gramps/plugins/drawreport/fanchart.py:687
 msgid ""
@@ -14466,7 +14566,7 @@ msgstr ""
 
 #: ../gramps/plugins/export/export.gpr.py:41
 msgid "CSV spreadsheet options"
-msgstr ""
+msgstr "Настройки CSV"
 
 #: ../gramps/plugins/export/export.gpr.py:52
 msgid "Web Family Tree"
@@ -15423,7 +15523,7 @@ msgstr "Отображает документы для выбранного ис
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:529
 msgid "Citation Gallery"
-msgstr ""
+msgstr "Галерея цитаты"
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:530
 msgid "Gramplet showing media objects for a citation"
@@ -15527,7 +15627,7 @@ msgstr "Отображает заметки для выбранного доку
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:711
 msgid "Person Citations"
-msgstr ""
+msgstr "Цитаты для лица"
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:712
 msgid "Gramplet showing the citations for a person"
@@ -15535,7 +15635,7 @@ msgstr "Отображает все цитаты для выбранного л
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:725
 msgid "Event Citations"
-msgstr ""
+msgstr "Цитаты для события"
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:726
 msgid "Gramplet showing the citations for an event"
@@ -15551,7 +15651,7 @@ msgstr "Отображает все цитаты для выбранной се
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:753
 msgid "Place Citations"
-msgstr ""
+msgstr "Цитаты для местоположения"
 
 #: ../gramps/plugins/gramplet/gramplet.gpr.py:754
 msgid "Gramplet showing the citations for a place"
@@ -17045,7 +17145,7 @@ msgstr "причина смерти"
 #: ../gramps/plugins/webreport/narrativeweb.py:4292
 #: ../gramps/plugins/webreport/narrativeweb.py:6642
 msgid "Gramps ID"
-msgstr "Gramps ID"
+msgstr ""
 
 #: ../gramps/plugins/importer/importcsv.py:226
 msgid "Gramps id"
@@ -17360,7 +17460,7 @@ msgstr "  Заметка %(id)s с %(id2)s\n"
 #: ../gramps/plugins/importer/importxml.py:298
 #, python-format
 msgid "  Citation %(id)s with %(id2)s\n"
-msgstr ""
+msgstr "  Цитата %(id)s с %(id2)s\n"
 
 #: ../gramps/plugins/importer/importxml.py:306
 #, python-format
@@ -17448,6 +17548,9 @@ msgid ""
 "\n"
 "Objects that are candidates to be merged:\n"
 msgstr ""
+"\n"
+"\n"
+"Объекты-кандидаты на объединение:\n"
 
 #: ../gramps/plugins/importer/importxml.py:820
 #: ../gramps/plugins/importer/importxml.py:1257
@@ -24553,8 +24656,8 @@ msgstr[2] "Найдено %(quantity)d ссылок на несуществую
 msgid "%(quantity)d tag object was referenced but not found\n"
 msgid_plural "%(quantity)d tag objects were referenced but not found\n"
 msgstr[0] ""
-msgstr[1] "Найдено %(quantity)d ссылки на несуществующие комментарии\n"
-msgstr[2] "Найдено %(quantity)d ссылок на несуществующие комментарии\n"
+msgstr[1] ""
+msgstr[2] ""
 
 #: ../gramps/plugins/tool/check.py:2205
 #, python-format

From 8b37ca4119dff924ff3116c0c4161e9cd095b409 Mon Sep 17 00:00:00 2001
From: Benny Malengier <benny.malengier@gramps-project.org>
Date: Wed, 19 Jun 2013 06:56:06 +0000
Subject: [PATCH 02/25] GTK3: convert deprecated code for the indicator in
 entryfield

svn: r22518
---
 gramps/gui/widgets/monitoredwidgets.py | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/gramps/gui/widgets/monitoredwidgets.py b/gramps/gui/widgets/monitoredwidgets.py
index 059db661a..f2ab844ad 100644
--- a/gramps/gui/widgets/monitoredwidgets.py
+++ b/gramps/gui/widgets/monitoredwidgets.py
@@ -180,15 +180,17 @@ class MonitoredEntryIndicator(MonitoredEntry):
                  autolist=None, changed=None):
         MonitoredEntry.__init__(self, obj, set_val, get_val, read_only,
                                 autolist, changed)
+        self.origcolor = obj.get_style_context().get_color(Gtk.StateType.NORMAL)
         if get_val():
             self.indicatorshown = False
         else:
             self.indicatorshown = True
             self.indicator = indicator
             self.obj.set_text(indicator)
-            self.obj.modify_text(Gtk.StateType.NORMAL, 
-                                 Gdk.color_parse('grey'))
-            self.obj.modify_font(Pango.FontDescription('sans italic'))
+            rgba = Gdk.RGBA()
+            Gdk.RGBA.parse(rgba, 'grey')
+            self.obj.override_color(Gtk.StateType.NORMAL, rgba)
+            self.obj.override_font(Pango.FontDescription('sans italic'))
             self.fockey = self.obj.connect('focus-in-event', 
                                                self._obj_focus)
     
@@ -203,8 +205,8 @@ class MonitoredEntryIndicator(MonitoredEntry):
         callback for when prefix obtains focus
         """
         self.set_text('')
-        self.obj.modify_text(Gtk.StateType.NORMAL, Gdk.color_parse('black'))
-        self.obj.modify_font(Pango.FontDescription('normal'))
+        self.obj.override_color(Gtk.StateType.NORMAL, self.origcolor)
+        self.obj.override_font(Pango.FontDescription('normal'))
         self.obj.disconnect(self.fockey)
         self.indicatorshown = False
         return False

From a971eb7d666dbf48b3cc954f0d8409442eac00e4 Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Wed, 19 Jun 2013 16:07:16 +0000
Subject: [PATCH 03/25] RU translation update

fix a missing newline

svn: r22520
---
 po/ru.po | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/po/ru.po b/po/ru.po
index 497724f93..3279790f4 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -5520,7 +5520,7 @@ msgstr ""
 "  «Заполнить» сожмёт граф до размера области для печати,\n"
 "предварительно увеличив расстояние между узлами\n"
 "  «Растянуть» равномерно сожмёт граф до размера области\n"
-"для печати, сохраняя пропорции между сторонами.\n"
+"для печати, сохраняя пропорции между сторонами."
 
 #: ../gramps/gen/plug/docgen/graphdoc.py:219
 msgid "DPI"

From 8ca5d92883041c95fbf2b5e1830b100e7bb8fb74 Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Wed, 19 Jun 2013 20:29:57 +0000
Subject: [PATCH 04/25] Copied my 6812 fix port for gtk3

Integrated from gramps40 branch

svn: r22525
---
 gramps/plugins/view/pedigreeview.py | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/gramps/plugins/view/pedigreeview.py b/gramps/plugins/view/pedigreeview.py
index 05c2451ec..363f93f94 100644
--- a/gramps/plugins/view/pedigreeview.py
+++ b/gramps/plugins/view/pedigreeview.py
@@ -606,6 +606,11 @@ class PedigreeView(NavigationView):
         self.scrolledwindow.add_with_viewport(event_box)
 
         self.table = Gtk.Grid()
+        # force LTR layout of the tree, even though the text might be RTL!
+        # this way the horizontal scroll preferences will be correct always
+        if self.table.get_direction() == Gtk.TextDirection.RTL:
+            self.table.set_direction(Gtk.TextDirection.LTR)
+            self.table.set_halign(Gtk.Align.END)
         event_box.add(self.table)
         event_box.get_parent().set_shadow_type(Gtk.ShadowType.NONE)
         self.table.set_row_spacing(1)
@@ -1101,6 +1106,10 @@ class PedigreeView(NavigationView):
             elif self.tree_direction == 3:
                 child_arrow = Gtk.ArrowType.RIGHT
                 parent_arrow = Gtk.ArrowType.LEFT
+            # GTK will reverse the icons for RTL locales, but we force LTR layout of the table,
+            # so reverse the arrows back...
+            if self.tree_direction in [2,3] and self.scrolledwindow.get_direction() == Gtk.TextDirection.RTL:
+                child_arrow, parent_arrow = parent_arrow, child_arrow
 
             button = Gtk.Button()
             button.add(Gtk.Arrow.new(child_arrow, Gtk.ShadowType.IN))

From dc690b70711eff847ba93d6541456b4679ec0fa0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Thu, 20 Jun 2013 07:21:40 +0000
Subject: [PATCH 05/25] Add Ukrainian holidays (contributions by Fedir)

svn: r22529
---
 gramps/plugins/lib/holidays.xml.in | 37 ++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gramps/plugins/lib/holidays.xml.in b/gramps/plugins/lib/holidays.xml.in
index 30d57d46c..619e0291f 100644
--- a/gramps/plugins/lib/holidays.xml.in
+++ b/gramps/plugins/lib/holidays.xml.in
@@ -499,4 +499,41 @@
     <date value="*/dec/25" type="national" offset="+2" name="Christmas Day Holiday" if="dow(y, m, d) > 5"/>
     <date value="*/dec/26" type="national" offset="+2" name="Boxing Day Holiday" if="dow(y, m, d) > 5"/>
   </country> 
+  <country _name="Ukraine">
+    <date value="*/1/1" type="national" name="Новий Рік"/>
+    <date value="*/1/6" type="religious" name="Святий Вечір"/>
+    <date value="*/1/7" type="religious" name="Різдво"/>
+    <date value="*/1/13" type="religious" name="Маланка"/>
+    <date value="*/1/14" type="religious" name="Старий Новий рік, Щедрий вечір"/>
+    <date value="*/1/19" type="religious" name="Водохреща"/>
+    <date value="*/1/22" type="national" name="День Соборності України"/>
+    <date value="*/2/14" type="secular" name="День закоханих"/>
+    <date value="*/2/15" type="religious" name="Стрітення"/>
+    <date value="*/3/8" type="secular" name="Міжнародний жіночий день"/>
+    <date value="*/3/20" type="secular" name="Весняне Рівнодення"/>
+    <date value="*/4/1" type="secular" name="День сміху"/>
+    <date value="*/4/7" type="religious" name="Благовіщення"/>
+    <date value="2010/4/4" type="religious" name="Великдень"/>
+    <date value="2011/4/24" type="religious" name="Великдень"/>
+    <date value="2012/4/15" type="religious" name="Великдень"/>
+    <date value="2013/5/5" type="religious" name="Великдень"/>
+    <date value="2014/4/20" type="religious" name="Великдень"/>
+    <date value="2015/4/12" type="religious" name="Великдень"/>
+    <date value="2016/5/1" type="religious" name="Великдень"/>
+    <date value="2017/4/16" type="religious" name="Великдень"/>
+    <date value="2018/4/8" type="religious" name="Великдень"/>
+    <date value="2019/4/28" type="religious" name="Великдень"/>
+    <date value="2020/4/19" type="religious" name="Великдень"/>
+    <date value="*/5/1" type="national" name="День Праці"/>
+    <date value="*/6/21" type="secular" name="Весняне Сонцестояння"/>
+    <date value="*/6/28" type="national" name="День Конституції України"/>
+    <date value="*/7/7" type="religious" name="Івана Купала"/>
+    <date value="*/8/19" type="religious" name="Спаса"/>
+    <date value="*/8/24" type="national" name="День Незалежності України"/>
+    <date value="*/9/22" type="secular" name="Осіннє Рівнодення"/>
+    <date value="*/10/14" type="religious" name="Покрова, День Українського козацтва"/>
+    <date value="*/12/13" type="religious" name="Андрія"/>
+    <date value="*/12/19" type="religious" name="Миколая"/>
+    <date value="*/12/21" type="secular" name="Осіннє Сонцестояння"/>
+  </country>
 </calendar>

From 87499c96bcc199212962e6461f6b5c2e4dd9f728 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Thu, 20 Jun 2013 07:30:05 +0000
Subject: [PATCH 06/25] Add Ukrainian relationship calculator (contributions by
 Fedir); not yet included on 4.0.x branch

svn: r22530
---
 gramps/plugins/rel/rel_uk.py         | 908 +++++++++++++++++++++++++++
 gramps/plugins/rel/relplugins.gpr.py |  16 +
 2 files changed, 924 insertions(+)
 create mode 100644 gramps/plugins/rel/rel_uk.py

diff --git a/gramps/plugins/rel/rel_uk.py b/gramps/plugins/rel/rel_uk.py
new file mode 100644
index 000000000..586d7398f
--- /dev/null
+++ b/gramps/plugins/rel/rel_uk.py
@@ -0,0 +1,908 @@
+# -*- coding: utf-8 -*-
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2003-2005  Donald N. Allingham
+# Copyright (C) 2008       Brian G. Matherly
+# Copyright (C) 2013       Oleh Petriv <olehsbox[at]yahoo.com>
+# Copyright (C) 2013       Fedir Zinchuk <fedikw[at]gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# UA: Пояснення щодо родинних відносин див. relationship.py
+# EN: Ukrainian relationship calculator. For more information see relationship.py
+
+"""
+Ukrainian-specific definitions of relationships
+"""
+from __future__ import unicode_literals
+#-------------------------------------------------------------------------
+#
+# GRAMPS modules
+#
+#-------------------------------------------------------------------------
+
+from gramps.gen.lib import Person
+import gramps.gen.relationship
+
+#-------------------------------------------------------------------------
+
+
+# Relationship levels
+
+_level_name = [
+    "",
+    "рідний(-на)", "двоюрідний(-на)", "троюрідний(-на)",
+    "чотириюрідний(-на)", "п'ятиюрідний(-на)", "шестиюрідний(-на)",
+    "семиюрідний(-на)", "восьмиюрідний(-на)", "дев'ятиюрідний(-на)",
+    "десятиюрідний(-на)", "одинадцятиюрідний(-на)",
+    "дванадцятиюрідний(-на)", "тринадцятиюрідний(-на)",
+    "чотирнадцятиюрідний(-на)", "п'ятнадцятиюрідний(-на)",
+    "шістнадцятиюрідний(-на)", "сімнадцятиюрідний(-на)",
+    "вісімнадцятиюрідний(-на)", "дев'ятнадцятиюрідний(-на)",
+    "двадцятиюрідний(-на)"
+]
+_level_name_male = [
+    "",
+    "рідний", "двоюрідний", "троюрідний",
+    "чотириюрідний", "п'ятиюрідний", "шестиюрідний",
+    "семиюрідний", "восьмиюрідний", "дев'ятиюрідний",
+    "десятиюрідний", "одинадцятиюрідний", "дванадцятиюрідний",
+    "тринадцятиюрідний", "чотирнадцятиюрідний", "п'ятнадцятиюрідний",
+    "шістнадцятиюрідний", "сімнадцятиюрідний", "вісімнадцятиюрідний",
+    "дев'ятнадцятиюрідний", "двадцятиюрідний"
+]
+_level_name_female = [
+    "",
+    "рідна", "двоюрідна", "троюрідна",
+    "чотириюріднa", "п'ятиюрідна", "шестиюрідна",
+    "семиюрідна", "восьмиюрідна", "дев'ятиюрідна",
+    "десятиюрідна", "одинадцятиюрідна", "дванадцятиюрідна",
+    "тринадцятиюрідна", "чотирнадцятиюрідна", "п'ятнадцятиюрідна",
+    "шістнадцятиюрідна", "сімнадцятиюрідна", "вісімнадцятиюрідна",
+    "дев'ятнадцятиюрідна", "двадцятиюрідна"
+]
+
+_son_level = [
+    "",
+    "син",
+    "внук",
+    "правнук",
+    "праправнук",
+]
+
+_daughter_level = [
+    "",
+    "дочка",
+    "онука",
+    "правнучка",
+    "праправнучка",
+]
+
+_father_level = [
+    "",
+    "батько",
+    "дід",
+    "прадід",
+    "прапрадід",
+]
+
+_mother_level = [
+    "",
+    "мати",
+    "баба",
+    "прабаба",
+    "прапрабаба",
+]
+
+_uncle_level = [
+    "",
+    "брат", # not used, just for keep count
+    "дядько",
+    "дід",
+    "прадід",
+    "прапрадід",
+]
+
+_aunt_level = [
+    "",
+    "сестра", # not used, just for keep count
+    "тітка",
+    "баба",
+    "прабаба",
+    "прапрабаба",
+]
+
+
+#-------------------------------------------------------------------------
+#
+#
+#
+#-------------------------------------------------------------------------
+
+class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
+    """
+    RelationshipCalculator Class
+    """
+
+    def __init__(self):
+        gramps.gen.relationship.RelationshipCalculator.__init__(self)
+
+    def get_sword_distaff(self, level, reltocommon, gender = gen.lib.Person.UNKNOWN):
+        """
+        Generate relationships 'by male line' or 'by female line',
+        specific for Ukraine
+        """
+        if level <= 1:
+            return ""
+
+        # test the relation line
+        by_line = ''
+        for g in reltocommon:
+            if(by_line and by_line != g):
+                by_line = ''
+                break
+            by_line = g
+
+        if by_line == self.REL_FATHER and gender == gen.lib.Person.MALE:
+            # by male line
+            return " по чоловічій лінії"
+        elif by_line == self.REL_MOTHER and gender == gen.lib.Person.FEMALE:
+            # by male line
+            return " по жіночій лінії"
+        elif reltocommon[0] == self.REL_FATHER:
+            # From father's side
+            return " по батькові"
+        elif reltocommon[0] == self.REL_MOTHER:
+            # From mother's side
+            return " по матері"
+        else:
+            return ""
+
+
+    def get_son(self, level, inlaw=''):
+        """
+        Provides information how much male descendant is related to this person
+        """
+        # Define if the person is natural relative or in law
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if level >= 0 and level < len(_son_level):
+            return t_inlaw +_son_level[level]
+        else:
+            return t_inlaw + "пра(пра)внук у %d поколінні" % (level + 1)
+
+
+
+    def get_daughter(self, level, inlaw=''):
+        """
+        Provides information how much female descendant is related to this person
+        """
+        # Define if the person is natural relative or in law
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названа "
+
+        if level >= 0 and level < len(_daughter_level):
+            return t_inlaw + _daughter_level[level]
+        else:
+            return t_inlaw + "пра(пра)внучка у %d поколінні" % (level + 1)
+
+
+    def get_child_unknown(self, level, inlaw=''):
+        """
+        Provides information how much descendant of unknown gender is related to this person
+        """
+        # Define if the person is natural relative or in law
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий(на) "
+
+        if level == 1:
+            return t_inlaw + "внук(а)"
+        else:
+            return t_inlaw + "пра(пра)внук(а) у %d поколінні" % (level + 1)
+
+
+    def get_father(self, level, reltocommon, inlaw=''):
+        """
+        Provides information how much male ancestor (for example father)
+        is related to the given person
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if level >= 0 and level < len(_father_level):
+            # If you know exact name of relationship - use it
+            if level == 1:
+                # Father
+                return t_inlaw + _father_level[level]
+            else:
+                # Grandfather, Greatgrandfather, Greatgreatgrandfather
+                return t_inlaw + _father_level[level] \
+                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
+        else:
+            # For deep generations
+            return t_inlaw + "пра(пра)дід у %d поколінні" % (level + 1) \
+                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
+
+
+    def get_mother(self, level, reltocommon, inlaw=''):
+        """
+        Provides information how much female ancestor (for example mother)
+        is related to the given person
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названа "
+
+        if level >= 0 and level < len(_mother_level):
+            # If you know exact name of relationship - use it
+            if level == 1:
+                # Mother
+                return t_inlaw + _mother_level[level]
+
+            else:
+                # Grandmother, Greatgrandmother, Greatgreatgrandmother
+                return t_inlaw + _mother_level[level] \
+                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
+        else:
+            # For deep generations
+            return t_inlaw + "пра(пра)баба у %d поколінні" % (level + 1) \
+                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
+
+
+
+    def get_parent_unknown(self, level, reltocommon, inlaw=''):
+        """
+        Provides information how much an ancestor of unknown gender
+        is related to the given person (unknown sex)
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if level == 1:
+            return t_inlaw + "батько/мати"
+        else:
+            return t_inlaw + "пра(пра)- дід/баба у %d поколінні" % (level + 1) \
+                        + self.get_sword_distaff(level, reltocommon)
+
+
+    def get_uncle(self, level, reltocommon, inlaw = ''):
+        """
+        Return ancle generation name
+        """
+
+        if reltocommon[0] == self.REL_FATHER:
+            # from Father
+            if level < len(_uncle_level):
+                if level == 2:
+                    return _uncle_level[level] + " (стрийко)"
+                else:
+                    return "двоюрідний " + _uncle_level[level] \
+                        + " по батькові"
+            else:
+                return "двоюрідний пра(пра)дід в %d поколінні по батькові" % (level)
+        elif reltocommon[0] == self.REL_MOTHER:
+            # from Mother
+            if level < len(_uncle_level):
+                if level == 2:
+                    return _uncle_level[level] + " (вуйко)"
+                else:
+                    return "двоюрідний " + _uncle_level[level] \
+                        + " по матері"
+            else:
+                return "двоюрідний пра(пра)дід в %d поколінні по матері" % (level)
+        else:
+            if level == 2:
+                return "дядько (стрийко/вуйко)"
+            else:
+                return "двоюрідний пра(пра)дід в %d поколінні" % (level)
+
+
+    def get_aunt(self, level, reltocommon, inlaw = ''):
+        """
+        Return aunt generation name
+        """
+
+        if reltocommon[0] == self.REL_FATHER:
+            # from Father
+            if level < len(_aunt_level):
+                if level == 2:
+                    return _aunt_level[level] + " (стрийна)"
+                else:
+                    return "двоюрідна " + _aunt_level[level] \
+                        + " по батькові"
+            else:
+                return "двоюрідна пра(пра)баба в %d поколінні по батькові" \
+                        % (level)
+        elif reltocommon[0] == self.REL_MOTHER:
+            # from Mother
+            if level < len(_aunt_level):
+                if level == 2:
+                    return _aunt_level[level] + " (вуйна)"
+                else:
+                    return "двоюрідна " + _aunt_level[level] \
+                        + " по матері"
+            else:
+                return "двоюрідна пра(пра)баба в %d поколінні по матері" \
+                        % (level)
+        else:
+            if level == 2:
+                return "тітка (стрийна/вуйна)"
+            else:
+                return "двоюрідна пра(пра)баба в %d поколінні" % (level)
+
+
+    def get_uncle_aunt_unknown(self, level, reltocommon, inlaw = ''):
+        """
+        Return uncle/aunt generation name when gender unknown
+        """
+
+        if reltocommon[0] == self.REL_FATHER:
+            # from Father
+            if level == 2:
+                return "дядько/тітка (стрийко)"
+            else:
+                return "двоюрідний дід/баба в %d поколінні по батькові" \
+                        % (level)
+        elif reltocommon[0] == self.REL_MOTHER:
+            # from Mother
+            if level == 2:
+                return "дядько/тітка (вуйко)"
+            else:
+                return "двоюрідний дід/баба в %d поколінні по матері" \
+                        % (level)
+        else:
+            if level == 2:
+                return "дядько/тітка"
+            else:
+                return "двоюрідний дід/баба в %d поколінні" % (level)
+
+
+    def get_nephew(self, level, reltocommon, inlaw = ''):
+        """
+        Return nephew generation name
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if level == 2:
+            if reltocommon[0] == self.REL_FATHER :
+                # Brother's son
+                return t_inlaw + "небіж (братанець)"
+            elif reltocommon[0] == self.REL_MOTHER :
+                 # Sister's son
+                 return t_inlaw + "небіж (сестринець)"
+            else:
+                return t_inlaw + "небіж (братанець/сестринець)"
+        elif level >= 2 and level <=6:
+            if reltocommon[level-2] == self.REL_FATHER :
+                # Brother's son generation
+                if reltocommon[level-3] == self.REL_FATHER :
+                    # Son of brother son
+                    return self.get_son((level - 2), inlaw) \
+                                + " небожа по брату"
+                elif reltocommon[level-3] == self.REL_MOTHER :
+                    # Son of brother daughter
+                    return self.get_son((level - 2), inlaw) \
+                                + " небоги по брату"
+                else:
+                    return self.get_son((level - 2), inlaw) \
+                                + " небожа/небоги по брату"
+            elif reltocommon[level-2] == self.REL_MOTHER :
+                # Sister's son generation
+                if reltocommon[level-3] == self.REL_FATHER :
+                    # Son of sister son
+                    return self.get_son((level - 2), inlaw) \
+                                + " небожа по сестрі"
+                elif reltocommon[level-3] == self.REL_MOTHER :
+                    # Son of sister daughter
+                    return self.get_son((level - 2), inlaw) \
+                                + " небоги по сестрі"
+                else:
+                    return self.get_son((level - 2), inlaw) \
+                                + " небожа/небоги по сестрі"
+            else:
+                return self.get_son((level - 2), inlaw) + " небожа/небоги"
+        else:
+            if reltocommon[level-2] == self.REL_FATHER :
+                # Brother's son generation
+                return t_inlaw + "чоловічий нащадок у %d поколінні брата" \
+                                    % (level)
+            elif reltocommon[level-2] == self.REL_MOTHER :
+                 # Sister's son generation
+                 return t_inlaw + "чоловічий нащадок у %d поколінні сестри" \
+                                    % (level)
+            else:
+                return t_inlaw + "чоловічий нащадок у %d поколінні брата/сестри" \
+                                    % (level)
+
+
+
+    def get_niece(self, level, reltocommon, inlaw = ''):
+        """
+        Return niece generation name
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if level == 2:
+            if reltocommon[0] == self.REL_FATHER :
+                # Brother's daughter
+                return t_inlaw + "небога (братанка)"
+            elif reltocommon[0] == self.REL_MOTHER :
+                 # Sister's daughter
+                 return t_inlaw + "небога (сестрениця)"
+            else:
+                return t_inlaw + "небога (братанка/сестрениця)"
+        elif level >= 2 and level <=6:
+            if reltocommon[level-2] == self.REL_FATHER :
+                # Brother's daughter generation
+                if reltocommon[level-3] == self.REL_FATHER :
+                    # daughter of brother son
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небожа по брату"
+                elif reltocommon[level-3] == self.REL_MOTHER :
+                    # daughter of brother daughter
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небоги по брату"
+                else:
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небожа/небоги по брату"
+            elif reltocommon[level-2] == self.REL_MOTHER :
+                # Sister's daughter generation
+                if reltocommon[level-3] == self.REL_FATHER :
+                    # daughter of sister son
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небожа по сестрі"
+                elif reltocommon[level-3] == self.REL_MOTHER :
+                    # daughter of sister daughter
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небоги по сестрі"
+                else:
+                    return self.get_daughter((level - 2), inlaw) \
+                                + " небожа/небоги по сестрі"
+            else:
+                return self.get_daughter(level, inlaw) + " небожа/небоги"
+        else:
+            if reltocommon[level-2] == self.REL_FATHER :
+                # Brother's daughter generation
+                return t_inlaw + "жіночий нащадок у %d поколінні брата" \
+                                    % (level)
+            elif reltocommon[level-2] == self.REL_MOTHER :
+                 # Sister's daughter generation
+                 return t_inlaw + "жіночий нащадок у %d поколінні сестри" \
+                                    % (level)
+            else:
+                return t_inlaw + "жіночий нащадок у %d поколінні брата/сестри" \
+                                    % (level)
+
+
+    def get_nephew_niece_unknown (self, level, reltocommon, inlaw = ''):
+        """
+        Return nephew/niece generation name when gender unknown
+        """
+        if inlaw == '':
+            t_inlaw = ""
+        else:
+            t_inlaw = "названий "
+
+        if reltocommon[level-2] == self.REL_FATHER:
+            # Brother's descendant
+            return t_inlaw + "нащадок в %d поколінні брата" % (level)
+        elif (reltocommon[level-2] == self.REL_MOTHER):
+            # Sister's descendant
+            return t_inlaw + "нащадок в %d поколінні сестри" % (level)
+        else :
+            return t_inlaw + "нащадок в %d поколінні брата aбо сестри" \
+                                % (level)
+
+
+    def get_level(self, level, gender):
+        """
+        Return level name depend of gender
+        """
+        if (gender == gen.lib.Person.MALE):
+            if level < len(_level_name_male):
+                return _level_name_male[level]
+            else:
+                return "%d-юрідний" % level
+        elif (gender == gen.lib.Person.FEMALE):
+            if level < len(_level_name_female):
+                return _level_name_female[level]
+            else:
+                return "%d-юрідна" % level
+        else:
+            if level < len(_level_name):
+                return _level_name[level]
+            else:
+                return "%d-юрідний(на)" % level
+
+
+
+
+    def get_single_relationship_string(self, Ga, Gb, gender_a, gender_b,
+                                       reltocommon_a, reltocommon_b,
+                                       only_birth=True,
+                                       in_law_a=False, in_law_b=False):
+        """
+        Provide a string that describes the relationsip between a person, and
+        another person. E.g. "grandparent" or "child".
+
+        Ga: The number of generations between the main person and the
+            common ancestor. (кількість поколінь між прямими родичами особи:
+            сини, батьки, бабусі...)
+
+        Gb: The number of generations between the other person and the
+            common ancestor. (кількість поколінь між іншою особою
+            і спільним предком)
+
+        gender_a : gender of person a
+
+        gender_b : gender of person b
+
+        reltocommon_a : relation path to common ancestor or common
+                        Family for person a.
+                        Note that length = Ga
+        reltocommon_b : relation path to common ancestor or common
+                        Family for person b.
+                        Note that length = Gb
+
+        in_law_a : True if path to common ancestors is via the partner
+                          of person a
+
+        in_law_b : True if path to common ancestors is via the partner
+                          of person b
+
+        only_birth : True if relation between a and b is by birth only
+                            False otherwise
+
+        more see in relationship.py get_single_relationship_string()
+        """
+
+        if only_birth:
+            step = ''
+        else:
+            step = self.STEP
+
+        if in_law_a or in_law_b :
+            inlaw = self.INLAW
+        else:
+            inlaw = ''
+
+        t_inlaw = ""
+
+        # b is the same person as a
+        if Ga == Gb == 0:
+            rel_str = 'та сама особа'
+
+        elif Ga == 0:
+            # b is son/descendant of a
+
+            if gender_b == gen.lib.Person.MALE:
+                if inlaw and Gb == 1 and not step:
+                    rel_str = "зять"
+                else:
+                    rel_str = self.get_son(Gb, inlaw)
+
+            elif gender_b == gen.lib.Person.FEMALE:
+                if inlaw and Gb == 1 and not step:
+                    rel_str = "невістка"
+                else:
+                    rel_str = self.get_daughter(Gb, inlaw)
+
+            else:
+                rel_str = self.get_child_unknown(Gb, inlaw)
+
+
+        elif Gb == 0:
+            # b is parent/grand parent of a
+
+            if gender_b == gen.lib.Person.MALE:
+                if inlaw and Gb == 1 and not step:
+                    rel_str = "тесть"
+                else:
+                    rel_str = self.get_father(Ga, reltocommon_a, inlaw)
+
+            elif gender_b == gen.lib.Person.FEMALE:
+                if inlaw and Gb == 1 and not step:
+                    rel_str = "теща"
+                else:
+                    rel_str = self.get_mother(Ga, reltocommon_a, inlaw)
+
+            else:
+                rel_str = self.get_parent_unknown(Ga, reltocommon_a, inlaw)
+
+
+        elif Ga == Gb == 1:
+            # Family, brother/sister
+            # not used, leave it just in case
+            # because should be handled
+            # by get_sibling_relationship_string
+            # that called in parent RelationshipCalculator
+            # see Relationship.py
+
+            if gender_b == gen.lib.Person.MALE:
+                if inlaw and not step:
+                    rel_str = "рідний брат"
+                else:
+                    rel_str = "напів рідний брат"
+
+            elif gender_b == gen.lib.Person.FEMALE:
+                if inlaw and not step:
+                    rel_str = "рідна сестра"
+                else:
+                    rel_str = "напів рідна сестра"
+            else:
+                rel_str = "брат/сестра"
+
+        elif Gb == 1 and Ga > 1:
+             # b is aunt/uncle of a
+
+            if (gender_b == gen.lib.Person.MALE):
+                rel_str = self.get_uncle(Ga, reltocommon_a, inlaw)
+            elif (gender_b == gen.lib.Person.FEMALE):
+                rel_str = self.get_aunt(Ga, reltocommon_a, inlaw)
+            else:
+                rel_str = self.get_uncle_aunt_unknown(Ga, reltocommon_a, inlaw)
+
+        elif Ga  == 1 and Gb > 1:
+            # b is niece/nephew of a
+
+            if (gender_b == gen.lib.Person.MALE):
+                rel_str = self.get_nephew(Gb, reltocommon_b, inlaw)
+            elif (gender_b == gen.lib.Person.FEMALE):
+                rel_str = self.get_niece(Gb, reltocommon_b, inlaw)
+            else:
+                rel_str = self.get_nephew_niece_unknown(Gb, reltocommon_b, inlaw)
+
+
+        elif Ga > 1 and Gb > 1:
+            # b is (cousin/far aunt/far  uncle/far niece/far nephew) of a
+
+            if Ga > Gb:
+                # b is far aunt/far  uncle of a
+                level = Ga - Gb + 1
+                if level >= 3:#it is right or???
+                    level_name = self.get_level(Gb + 1, gender_b)
+                else:
+                    level_name = self.get_level(Gb, gender_b)
+
+
+                if (gender_b == gen.lib.Person.MALE):
+                     # b is far  uncle
+                    if inlaw != '':
+                        t_inlaw = "названий "
+                    if level < len(_uncle_level):
+                        rel_str = t_inlaw + "%s %s" \
+                            % (level_name, _uncle_level[level])
+                    else:
+                        rel_str = t_inlaw + "%s пра(пра)дід в %d поколінні" \
+                            % (level_name, (level))
+                elif (gender_b == gen.lib.Person.FEMALE):
+                     # b is far aunt
+                    if inlaw != '':
+                        t_inlaw = "названа "
+                    if level < len(_aunt_level):
+                        rel_str = t_inlaw + "%s %s" \
+                            % (level_name, _aunt_level[level])
+                    else:
+                        rel_str = t_inlaw + "%s пра(пра)баба в %d поколінні" \
+                            % (level_name, (level))
+                else:
+                    if inlaw != '':
+                        t_inlaw = "названий(на) "
+                    if level == 2:
+                        rel_str = t_inlaw + "%s дядько/тітка" % level_name
+                    else:
+                        rel_str = t_inlaw + "%s пра(пра)- дід/баба в %d поколінні" \
+                            % (level_name, (level))
+
+            elif Ga < Gb:
+                # b is far niece/far nephew of a
+                level_name = self.get_level(Ga, gender_b)
+                level = Gb - Ga + 1
+
+                if (gender_b == gen.lib.Person.MALE):
+                    # b is far nephew
+                    if level == 2:
+                        rel_str = "%s небіж" % level_name
+                    else:
+                        rel_str = "%s пра(пра)внук у %d поколінні" \
+                            % (level_name, level)
+                    #rel_str = "%s %s" % (level_name, self.get_nephew(level, reltocommon_b, inlaw))
+                elif (gender_b == gen.lib.Person.FEMALE):
+                    # b is far niece
+                    if level == 2:
+                        rel_str = "%s небога" % level_name
+                    else:
+                        rel_str = "%s пра(пра)внучка у %d поколінні" \
+                            % (level_name, level)
+                    #rel_str = "%s %s"  % (level_name, self.get_niece(level, reltocommon_b, inlaw))
+                else:
+                    rel_str = "%s пра(пра)внук(а) у %d поколінні" % level
+                    #rel_str = "%s %s" % (level_name, self.get_nephew_niece_unknown(level, reltocommon_b, inlaw))
+
+            else: #Gb == Ga
+                # b is cousin of a
+                level_name = self.get_level(Ga, gender_b)
+
+                if (gender_b == gen.lib.Person.MALE):
+                    if inlaw != '':
+                        t_inlaw = "названий "
+                    rel_str = t_inlaw + "%s брат" % level_name
+                elif (gender_b == gen.lib.Person.FEMALE):
+                    if inlaw != '':
+                        t_inlaw = "названа "
+                    rel_str = t_inlaw + "%s сестра" % level_name
+                else:
+                    if inlaw != '':
+                        t_inlaw = "названий(на) "
+                    rel_str = t_inlaw + "%s брат/сестра" % level_name
+
+        else:
+            # A program should never goes there, but...
+            rel_str = "невизначений ступінь спорідненості"
+
+        return rel_str
+
+    def get_plural_relationship_string(self, Ga, Gb,
+                                       reltocommon_a='', reltocommon_b='',
+                                       only_birth=True,
+                                       in_law_a=False, in_law_b=False):
+        """
+        Generate a text with information, how far away is a group of persons
+        from a main person
+        """
+
+        if Ga == Gb == 0:
+            return 'та сама особа'
+        if 0 == Ga:
+            # These are descendants
+            if 1 == Gb:
+                return 'діти'
+            if 2 == Gb:
+                return 'внуки'
+            if 3 == Gb:
+                return 'правнуки'
+            if 4 == Gb:
+                return 'праправнуки'
+            return 'прапрапра(n)внуки'
+        if 0 == Gb:
+            # These are parents/grand parents
+            if 1 == Ga:
+                return 'батьки'
+            if 2 == Ga:
+                return 'діди/баби'
+            if 3 == Ga:
+                return 'прадіди/прабаби'
+            if 4 == Ga:
+                return 'прапращури'
+            return 'прапрапра(n)щури'
+        if 1 == Ga == Gb:
+            return 'батьки'
+        if 1 == Gb and Ga > 1:
+            return 'дядьки (вуйки, стрийки) і тітки'
+        if 1 < Gb and 1 == Ga:
+            return 'небожі по братові і сестрі'
+        if 1 < Ga and 1 < Gb:
+            return 'дальня родина'
+        return 'відносини невідомі'
+
+
+
+    def get_sibling_relationship_string(self, sib_type, gender_a, gender_b,
+                                        in_law_a=False, in_law_b=False):
+
+        if in_law_a or in_law_b :
+            inlaw = self.INLAW
+        else:
+            inlaw = ''
+
+        if sib_type == self.NORM_SIB:
+            if not inlaw:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = 'рідний брат'
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = 'рідна сестра'
+                else:
+                    rel_str = 'рідний(а) брат або сестра'
+            else:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = "названий брат"
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = "названа сестра"
+                else:
+                    rel_str = "названий(а) брат або сестра"
+        elif sib_type == self.UNKNOWN_SIB:
+            if not inlaw:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = 'брат'
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = 'сестра'
+                else:
+                    rel_str = 'брат або сестра'
+            else:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = "швагро"
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = "братова"
+                else:
+                    rel_str = "швагро або братова"
+        elif sib_type == self.HALF_SIB_FATHER:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = "єдинокровний(напіврідний) брат"
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = "єдинокровна(напіврідна) сестра"
+                else:
+                    rel_str = "напіврідний(а) брат/сестра"
+        elif sib_type == self.HALF_SIB_MOTHER:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = "єдинокровний(напіврідний) брат"
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = "єдинокровна(напіврідна) сестра"
+                else:
+                    rel_str = "напіврідний(а) брат/сестра"
+        elif sib_type == self.STEP_SIB:
+                if gender_b == gen.lib.Person.MALE:
+                    rel_str = "зведений брат"
+                elif gender_b == gen.lib.Person.FEMALE:
+                    rel_str = "зведена сестра"
+                else:
+                    rel_str = "зведений брат або сестра"
+        else:
+            rel_str = "невизначена ступінь родинних відносин"
+        return rel_str
+
+
+if __name__ == "__main__":
+    # Test function. Call it as follows from the command line (so as to find
+    #        imported modules):
+    #    export PYTHONPATH=/path/to/gramps/src
+    #    python src/plugins/rel/rel_pl.py
+
+
+    """
+    TRANSLATORS, copy this if statement at the bottom of your
+    rel_xx.py module, and test your work with:
+    python src/plugins/rel/rel_xx.py
+    """
+    from gramps.gen.relationship import test
+    import signal
+    import sys
+    # If someone go out
+    def goodby(signal, frame):
+        print 'No more Drink!'
+        sys.exit(0)
+    signal.signal(signal.SIGINT, goodby)
+    # Run test
+    RC = RelationshipCalculator()
+    test(RC, True)
+
diff --git a/gramps/plugins/rel/relplugins.gpr.py b/gramps/plugins/rel/relplugins.gpr.py
index 0ac99c782..c028a59ac 100644
--- a/gramps/plugins/rel/relplugins.gpr.py
+++ b/gramps/plugins/rel/relplugins.gpr.py
@@ -295,3 +295,19 @@ plg.relcalcclass = 'RelationshipCalculator'
 plg.lang_list = ["sv", "SV", "sv_SE", "swedish", "Swedish", "sv_SE.UTF8",
                  "sv_SE@euro", "sv_SE.UTF8@euro", "svenska", "Svenska",
                  "sv_SE.UTF-8", "sv_SE.utf-8", "sv_SE.utf8", "Swedish_Sweden"]
+# uk
+plg = newplugin()
+plg.id    = 'relcalc_uk'
+plg.name  = _("Ukrainian Relationship Calculator")
+plg.description =  _("Calculates relationships between people")
+plg.version = '1.0'
+plg.gramps_target_version = '4.1'
+plg.status = STABLE
+plg.fname = 'rel_uk.py'
+plg.ptype = RELCALC
+plg.relcalcclass = 'RelationshipCalculator'
+plg.lang_list = ["uk", "UA", "uk_UA", "ukrainian",
+                 "Ukrainian", "uk_UA.utf8",
+                 "uk_UA.UTF8", "uk_UA.utf-8", "uk_UA.UTF-8", "uk_UA.iso88595",
+                 "uk_UA.iso8859-5", "uk_UA.iso-8859-5", "koi8u", "uk_koi8u",
+                 "uk_UA.koi8u","uk_UA.KOI8-U",] 

From fab092f6fd287c8c8206320461d8257f03b17b4f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Thu, 20 Jun 2013 10:07:41 +0000
Subject: [PATCH 07/25] 6817: Enhancements for testing localized Relationship
 handlers (contribution by Fedir)

svn: r22535
---
 gramps/gen/relationship.py | 696 ++++++++++++++++++++-----------------
 1 file changed, 380 insertions(+), 316 deletions(-)

diff --git a/gramps/gen/relationship.py b/gramps/gen/relationship.py
index f24477e64..2eaae264f 100644
--- a/gramps/gen/relationship.py
+++ b/gramps/gen/relationship.py
@@ -1840,7 +1840,7 @@ def get_relationship_calculator(reinit=False, clocale=glocale):
 #
 #-------------------------------------------------------------------------
 
-def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
+def _test(rc, onlybirth, inlawa, inlawb, printrelstr, testNum = None):
     """ this is a generic test suite for the singular relationship
             TRANSLATORS: do NOT translate, use __main__ !
     """
@@ -1852,7 +1852,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
             return 'f'
         else:
             return 'm'
-        
+
     def _rand_relstr(len, endstr):
         if len == 0:
             return ''
@@ -1861,295 +1861,337 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr):
             for i in range(len-1):
                 relstr += _rand_f_m()
             return relstr + endstr
-    
+
     FMT = '%+50s'
     MAX = 30
-    
-    #rc = RelationshipCalculator()
-    
-    print('\ntesting sons (Enter to start)\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel =  FMT % rc.get_single_relationship_string(0, i, 
-                                            MALE, 
-                                            MALE,
-                                            '', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, 
-                                            in_law_b=inlawb)
-        if printrelstr :
-            print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting daughters\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(0, i, 
-                                            MALE, 
-                                            FEMALE,
-                                            '', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-            print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting unknown children\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(0, i, 
-                                            MALE, 
-                                            UNKNOWN,
-                                            '', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-            print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting grandfathers\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(i, 0,
-                                            FEMALE, 
-                                            MALE,
-                                            relstr, '',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting grandmothers\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(i, 0,
-                                            FEMALE, 
-                                            FEMALE,
-                                            relstr, '',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting unknown parents\n')
-    sys.stdin.readline()
-    for i in range(MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(i, 0,
-                                            FEMALE, 
-                                            UNKNOWN,
-                                            relstr, '',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting nieces\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(1, i,
-                                            FEMALE, 
-                                            FEMALE,
-                                            'm', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting nephews\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(1, i,
-                                            FEMALE, 
-                                            MALE,
-                                            'f', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting unknown nephews/nieces\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(1, i,
-                                            FEMALE, 
-                                            UNKNOWN,
-                                            'f', relstr,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting uncles\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(i, 1,
-                                            FEMALE, 
-                                            MALE,
-                                            relstr, 'f',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting aunts\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(i, 1,
-                                            MALE, 
-                                            FEMALE,
-                                            relstr, 'f',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting unknown uncles/aunts\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstr = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(i, 1,
-                                            MALE, 
-                                            UNKNOWN,
-                                            relstr, 'm',
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstr)
-        else:
-            print(rel)
-    print('\n\ntesting male cousins same generation\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstra = _rand_relstr(i,'f')
-        relstrb = _rand_relstr(i,'f')
-        rel = FMT % rc.get_single_relationship_string(i, i,
-                                            MALE, 
-                                            MALE,
-                                            relstra, 
-                                            relstrb,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstra, relstrb)
-        else:
-            print(rel)
-    print('\n\ntesting female cousins same generation\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstra = _rand_relstr(i,'m')
-        relstrb = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(i, i,
-                                            MALE, 
-                                            FEMALE,
-                                            relstra, 
-                                            relstrb,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstra, relstrb)
-        else:
-            print(rel)
-    print('\n\ntesting unknown cousins same generation\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        relstra = _rand_relstr(i,'m')
-        relstrb = _rand_relstr(i,'m')
-        rel = FMT % rc.get_single_relationship_string(i, i,
-                                            MALE, 
-                                            UNKNOWN,
-                                            relstra, 
-                                            relstrb,
-                                            only_birth=onlybirth, 
-                                            in_law_a=inlawa, in_law_b=inlawb)
-        if printrelstr :
-                print(rel + ' |info:', relstra, relstrb)
-        else:
-            print(rel)
-    print('\n\ntesting some cousins up\n')
-    sys.stdin.readline()
-    import random
-    random.seed()
-    for i in range(1, MAX) :
-        for j in range (i, MAX) :
-            rnd = random.randint(0, 100)
-            if rnd < 10 :
-                relstra = _rand_relstr(j,'f')
-                relstrb = _rand_relstr(i,'f')
-                if rnd < 5 :
-                    rel =  (FMT + ' |info: female, Ga=%2d, Gb=%2d') % (
-                                    rc.get_single_relationship_string(j, i,
-                                    MALE, 
-                                    FEMALE,
-                                    relstra, relstrb,
-                                    only_birth=onlybirth, 
-                                    in_law_a=inlawa, in_law_b=inlawb), j, i )
-                    if printrelstr :
-                        print(rel + ' |info:', relstra, relstrb)
+
+    if testNum == None:
+        print """
+Select a test:
+  0 - all tests
+  1 - testing sons
+  2 - testing daughters
+  3 - testing unknown children
+  4 - testing grandfathers
+  5 - testing grandmothers
+  6 - testing unknown parents
+  7 - testing nieces
+  8 - testing nephews
+  9 - testing unknown nephews/nieces
+  10 - testing uncles
+  11 - testing aunts
+  12 - testing unknown uncles/aunts
+  13 - testing male cousins same generation
+  14 - testing female cousins same generation
+  15 - testing unknown cousins same generation
+  16 - testing some cousins up
+  17 - testing some cousins down
+
+Please enter a test number and press Enter for continue:
+    """
+        testNum = sys.stdin.readline().strip()
+        testNum = int(testNum)
+
+    if testNum == 0 or testNum == 1:
+        print '\ntesting sons'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel =  FMT % rc.get_single_relationship_string(0, i,
+                                                MALE,
+                                                MALE,
+                                                '', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa,
+                                                in_law_b=inlawb)
+            if printrelstr :
+                print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 2:
+        print '\ntesting daughters\n'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(0, i,
+                                                MALE,
+                                                FEMALE,
+                                                '', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 3:
+        print '\ntesting unknown children\n'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(0, i,
+                                                MALE,
+                                                UNKNOWN,
+                                                '', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 4:
+        print '\ntesting grandfathers\n'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(i, 0,
+                                                FEMALE,
+                                                MALE,
+                                                relstr, '',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 5:
+        print '\ntesting grandmothers\n'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(i, 0,
+                                                FEMALE,
+                                                FEMALE,
+                                                relstr, '',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 6:
+        print '\ntesting unknown parents\n'
+        #sys.stdin.readline()
+        for i in range(MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(i, 0,
+                                                FEMALE,
+                                                UNKNOWN,
+                                                relstr, '',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 7:
+        print '\ntesting nieces\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(1, i,
+                                                FEMALE,
+                                                FEMALE,
+                                                'm', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 8:
+        print '\ntesting nephews\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(1, i,
+                                                FEMALE,
+                                                MALE,
+                                                'f', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 9:
+        print '\ntesting unknown nephews/nieces\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(1, i,
+                                                FEMALE,
+                                                UNKNOWN,
+                                                'f', relstr,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 10:
+        print '\ntesting uncles\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(i, 1,
+                                                FEMALE,
+                                                MALE,
+                                                relstr, 'f',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 11:
+        print '\ntesting aunts\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(i, 1,
+                                                MALE,
+                                                FEMALE,
+                                                relstr, 'f',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 12:
+        print '\ntesting unknown uncles/aunts\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstr = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(i, 1,
+                                                MALE,
+                                                UNKNOWN,
+                                                relstr, 'm',
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstr
+            else:
+                print rel
+    if testNum == 0 or testNum == 13:
+        print '\ntesting male cousins same generation\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstra = _rand_relstr(i,'f')
+            relstrb = _rand_relstr(i,'f')
+            rel = FMT % rc.get_single_relationship_string(i, i,
+                                                MALE,
+                                                MALE,
+                                                relstra,
+                                                relstrb,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstra, relstrb
+            else:
+                print rel
+    if testNum == 0 or testNum == 14:
+        print '\ntesting female cousins same generation\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstra = _rand_relstr(i,'m')
+            relstrb = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(i, i,
+                                                MALE,
+                                                FEMALE,
+                                                relstra,
+                                                relstrb,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstra, relstrb
+            else:
+                print rel
+    if testNum == 0 or testNum == 15:
+        print '\ntesting unknown cousins same generation\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            relstra = _rand_relstr(i,'m')
+            relstrb = _rand_relstr(i,'m')
+            rel = FMT % rc.get_single_relationship_string(i, i,
+                                                MALE,
+                                                UNKNOWN,
+                                                relstra,
+                                                relstrb,
+                                                only_birth=onlybirth,
+                                                in_law_a=inlawa, in_law_b=inlawb)
+            if printrelstr :
+                    print rel + ' |info:', relstra, relstrb
+            else:
+                print rel
+    if testNum == 0 or testNum == 16:
+        print '\ntesting some cousins up\n'
+        #sys.stdin.readline()
+        import random
+        random.seed()
+        for i in range(1, MAX) :
+            for j in range (i, MAX) :
+                rnd = random.randint(0, 100)
+                if rnd < 10 :
+                    relstra = _rand_relstr(j,'f')
+                    relstrb = _rand_relstr(i,'f')
+                    if rnd < 5 :
+                        rel =  (FMT + ' |info: female, Ga=%2d, Gb=%2d') % (
+                                        rc.get_single_relationship_string(j, i,
+                                        MALE,
+                                        FEMALE,
+                                        relstra, relstrb,
+                                        only_birth=onlybirth,
+                                        in_law_a=inlawa, in_law_b=inlawb), j, i )
+                        if printrelstr :
+                            print rel + ' |info:', relstra, relstrb
+                        else:
+                            print rel
                     else:
-                        print(rel)
-                else:
-                    rel =  (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
-                                    rc.get_single_relationship_string(j, i,
-                                    MALE, 
-                                    MALE,
-                                    relstra, relstrb,
-                                    only_birth=onlybirth, 
-                                    in_law_a=inlawa, in_law_b=inlawb), j, i )
-                    if printrelstr :
-                        print(rel + ' |info:', relstra, relstrb)
+                        rel =  (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
+                                        rc.get_single_relationship_string(j, i,
+                                        MALE,
+                                        MALE,
+                                        relstra, relstrb,
+                                        only_birth=onlybirth,
+                                        in_law_a=inlawa, in_law_b=inlawb), j, i )
+                        if printrelstr :
+                            print rel + ' |info:', relstra, relstrb
+                        else:
+                            print rel
+    if testNum == 0 or testNum == 17:
+        print '\ntesting some cousins down\n'
+        #sys.stdin.readline()
+        for i in range(1, MAX) :
+            for j in range (i, MAX) :
+                rnd = random.randint(0, 100)
+                if rnd < 10 :
+                    relstra = _rand_relstr(i,'f')
+                    relstrb = _rand_relstr(j,'f')
+                    if rnd < 5 :
+                        rel = (FMT + ' |info: female, Ga=%2d, Gb=%2d') % (
+                                        rc.get_single_relationship_string(i, j,
+                                        MALE,
+                                        FEMALE,
+                                        relstra, relstrb,
+                                        only_birth=onlybirth,
+                                        in_law_a=inlawa, in_law_b=inlawb), i, j)
+                        if printrelstr :
+                            print rel + ' |info:', relstra, relstrb
+                        else:
+                            print rel
                     else:
-                        print(rel)
-    print('\n\ntesting some cousins down\n')
-    sys.stdin.readline()
-    for i in range(1, MAX) :
-        for j in range (i, MAX) :
-            rnd = random.randint(0, 100)
-            if rnd < 10 :
-                relstra = _rand_relstr(i,'f')
-                relstrb = _rand_relstr(j,'f')
-                if rnd < 5 :
-                    rel = (FMT + ' |info: female, Ga=%2d, Gb=%2d') % (
-                                    rc.get_single_relationship_string(i, j,
-                                    MALE, 
-                                    FEMALE,
-                                    relstra, relstrb,
-                                    only_birth=onlybirth, 
-                                    in_law_a=inlawa, in_law_b=inlawb), i, j)
-                    if printrelstr :
-                        print(rel + ' |info:', relstra, relstrb)
-                    else:
-                        print(rel)
-                else:
-                    rel = (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
-                                    rc.get_single_relationship_string(i, j,
-                                    MALE, 
-                                    MALE,
-                                    relstra, relstrb,
-                                    only_birth=onlybirth, 
-                                    in_law_a=inlawa, in_law_b=inlawb), i, j)
-                    if printrelstr :
-                        print(rel + ' |info:', relstr)
-                    else:
-                        print(rel)
+                        rel = (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
+                                        rc.get_single_relationship_string(i, j,
+                                        MALE,
+                                        MALE,
+                                        relstra, relstrb,
+                                        only_birth=onlybirth,
+                                        in_law_a=inlawa, in_law_b=inlawb), i, j)
+                        if printrelstr :
+                            print rel + ' |info:', relstra, relstrb
+                        else:
+                            print rel
 
 def _testsibling(rc):
     vals = [(rc.NORM_SIB, 'sibling'),
@@ -2162,9 +2204,9 @@ def _testsibling(rc):
                            (UNKNOWN, 'unknown')]:
         for inlaw in [False, True]:
             for sibt, str in vals:
-                print(FMT % rc.get_sibling_relationship_string(
+                print FMT % rc.get_sibling_relationship_string(
                                 sibt, MALE, gendr, 
-                                in_law_a = inlaw) + ' |info:', str, strgen)
+                                in_law_a = inlaw) + ' |info:', str, strgen
 
 def _test_spouse(rc):
     FMT = '%+50s'
@@ -2180,41 +2222,63 @@ def _test_spouse(rc):
                            (FEMALE, 'female'), 
                            (UNKNOWN, 'unknown')] :
         for spouse_type, str in vals:
-            print(FMT % rc.get_partner_relationship_string(
+            print FMT % rc.get_partner_relationship_string(
                             spouse_type, MALE, gender) + \
-                            ' |info: gender='+strgen+', rel='+str)
+                            ' |info: gender='+strgen+', rel='+str
 
 def test(rc, printrelstr):
     """ this is a generic test suite for the singular relationship
-            TRANSLATORS: do NOT translate, call this from 
+            TRANSLATORS: do NOT translate, call this from
                          __main__ in the rel_xx.py module.
     """
     import sys
-    
-    print('\nType  y   to do a test\n\n')
-    print('Test normal relations?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
-        _test(rc, True, False, False, printrelstr)
-    print('\n\nTest step relations?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
-        _test(rc, False, False, False, printrelstr)
-    print('\n\nTest in-law relations (first pers)?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
-        _test(rc, True, True, False, printrelstr)
-    print('\n\nTest step and in-law relations?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
-        _test(rc, False, True, False, printrelstr)
-    print('\n\nTest sibling types?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
+    import argparse
+
+    parser = argparse.ArgumentParser(description='Test the Relationship Calculator')
+    parser.add_argument('-r', type=int, help = 'type of the relations test')
+    parser.add_argument('-s', type=int, help = 'type of the singular relationship test')
+
+    args = parser.parse_args()
+    testNum = args.r
+
+    if testNum == None:
+        print """
+Select a test:
+  0 - all tests
+  1 - Test normal relations
+  2 - Test step relations
+  3 - Test in-law relations (first pers)
+  4 - Test step and in-law relations
+  5 - Test sibling types
+  6 - Test partner types
+
+Please enter a test number and press Enter for continue:
+    """
+        testNum = sys.stdin.readline().strip()
+        testNum = int(testNum)
+
+    if testNum == 0 or testNum == 1:
+        print '\n\n=== Test normal relations ==='
+        _test(rc, True, False, False, printrelstr, args.s)
+
+    if testNum == 0 or testNum == 2:
+        print '\n\n=== Test step relations ==='
+        _test(rc, False, False, False, printrelstr, args.s)
+
+    if testNum == 0 or testNum == 3:
+        print '\n\n=== Test in-law relations (first pers) ==='
+        _test(rc, True, True, False, printrelstr, args.s)
+
+    if testNum == 0 or testNum == 4:
+        print '\n\n=== Test step and in-law relations ==='
+        _test(rc, False, True, False, printrelstr, args.s)
+
+    if testNum == 0 or testNum == 5:
+        print '\n\n=== Test sibling types ==='
         _testsibling(rc)
-    print('\n\nTest partner types?')
-    data = sys.stdin.readline()
-    if data == 'y\n':
+
+    if testNum == 0 or testNum == 6:
+        print '\n\n=== Test partner types ==='
         _test_spouse(rc)
     
 if __name__ == "__main__":

From aa7516cbb4761b08bdb578fcddc8ef478b607648 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Thu, 20 Jun 2013 14:27:33 +0000
Subject: [PATCH 08/25] 6817: print should be now a function

svn: r22537
---
 gramps/gen/relationship.py | 142 ++++++++++++++++++-------------------
 1 file changed, 71 insertions(+), 71 deletions(-)

diff --git a/gramps/gen/relationship.py b/gramps/gen/relationship.py
index 2eaae264f..ffd938e5a 100644
--- a/gramps/gen/relationship.py
+++ b/gramps/gen/relationship.py
@@ -900,9 +900,9 @@ class RelationshipCalculator(object):
         
         if depth > self.__max_depth:
             self.__maxDepthReached = True
-            #print 'Maximum ancestor generations ('+str(depth)+') reached', \
+            #print('Maximum ancestor generations ('+str(depth)+') reached', \
             #            '(' + rel_str + ').',\
-            #            'Stopping relation algorithm.'
+            #            'Stopping relation algorithm.')
             return
         depth += 1
         
@@ -1866,7 +1866,7 @@ def _test(rc, onlybirth, inlawa, inlawb, printrelstr, testNum = None):
     MAX = 30
 
     if testNum == None:
-        print """
+        print("""
 Select a test:
   0 - all tests
   1 - testing sons
@@ -1888,12 +1888,12 @@ Select a test:
   17 - testing some cousins down
 
 Please enter a test number and press Enter for continue:
-    """
+    """)
         testNum = sys.stdin.readline().strip()
         testNum = int(testNum)
 
     if testNum == 0 or testNum == 1:
-        print '\ntesting sons'
+        print('\ntesting sons')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'f')
@@ -1905,11 +1905,11 @@ Please enter a test number and press Enter for continue:
                                                 in_law_a=inlawa,
                                                 in_law_b=inlawb)
             if printrelstr :
-                print rel + ' |info:', relstr
+                print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 2:
-        print '\ntesting daughters\n'
+        print('\ntesting daughters\n')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'m')
@@ -1920,11 +1920,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                print rel + ' |info:', relstr
+                print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 3:
-        print '\ntesting unknown children\n'
+        print('\ntesting unknown children\n')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'f')
@@ -1935,11 +1935,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                print rel + ' |info:', relstr
+                print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 4:
-        print '\ntesting grandfathers\n'
+        print('\ntesting grandfathers\n')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'f')
@@ -1950,11 +1950,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 5:
-        print '\ntesting grandmothers\n'
+        print('\ntesting grandmothers\n')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'m')
@@ -1965,11 +1965,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 6:
-        print '\ntesting unknown parents\n'
+        print('\ntesting unknown parents\n')
         #sys.stdin.readline()
         for i in range(MAX) :
             relstr = _rand_relstr(i,'f')
@@ -1980,11 +1980,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 7:
-        print '\ntesting nieces\n'
+        print('\ntesting nieces\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'m')
@@ -1995,11 +1995,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 8:
-        print '\ntesting nephews\n'
+        print('\ntesting nephews\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'f')
@@ -2010,11 +2010,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 9:
-        print '\ntesting unknown nephews/nieces\n'
+        print('\ntesting unknown nephews/nieces\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'f')
@@ -2025,11 +2025,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 10:
-        print '\ntesting uncles\n'
+        print('\ntesting uncles\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'f')
@@ -2040,11 +2040,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 11:
-        print '\ntesting aunts\n'
+        print('\ntesting aunts\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'f')
@@ -2055,11 +2055,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 12:
-        print '\ntesting unknown uncles/aunts\n'
+        print('\ntesting unknown uncles/aunts\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstr = _rand_relstr(i,'m')
@@ -2070,11 +2070,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstr
+                    print(rel + ' |info:', relstr)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 13:
-        print '\ntesting male cousins same generation\n'
+        print('\ntesting male cousins same generation\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstra = _rand_relstr(i,'f')
@@ -2087,11 +2087,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstra, relstrb
+                    print(rel + ' |info:', relstra, relstrb)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 14:
-        print '\ntesting female cousins same generation\n'
+        print('\ntesting female cousins same generation\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstra = _rand_relstr(i,'m')
@@ -2104,11 +2104,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstra, relstrb
+                    print(rel + ' |info:', relstra, relstrb)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 15:
-        print '\ntesting unknown cousins same generation\n'
+        print('\ntesting unknown cousins same generation\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             relstra = _rand_relstr(i,'m')
@@ -2121,11 +2121,11 @@ Please enter a test number and press Enter for continue:
                                                 only_birth=onlybirth,
                                                 in_law_a=inlawa, in_law_b=inlawb)
             if printrelstr :
-                    print rel + ' |info:', relstra, relstrb
+                    print(rel + ' |info:', relstra, relstrb)
             else:
-                print rel
+                print(rel)
     if testNum == 0 or testNum == 16:
-        print '\ntesting some cousins up\n'
+        print('\ntesting some cousins up\n')
         #sys.stdin.readline()
         import random
         random.seed()
@@ -2144,9 +2144,9 @@ Please enter a test number and press Enter for continue:
                                         only_birth=onlybirth,
                                         in_law_a=inlawa, in_law_b=inlawb), j, i )
                         if printrelstr :
-                            print rel + ' |info:', relstra, relstrb
+                            print(rel + ' |info:', relstra, relstrb)
                         else:
-                            print rel
+                            print(rel)
                     else:
                         rel =  (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
                                         rc.get_single_relationship_string(j, i,
@@ -2156,11 +2156,11 @@ Please enter a test number and press Enter for continue:
                                         only_birth=onlybirth,
                                         in_law_a=inlawa, in_law_b=inlawb), j, i )
                         if printrelstr :
-                            print rel + ' |info:', relstra, relstrb
+                            print(rel + ' |info:', relstra, relstrb)
                         else:
-                            print rel
+                            print(rel)
     if testNum == 0 or testNum == 17:
-        print '\ntesting some cousins down\n'
+        print('\ntesting some cousins down\n')
         #sys.stdin.readline()
         for i in range(1, MAX) :
             for j in range (i, MAX) :
@@ -2177,9 +2177,9 @@ Please enter a test number and press Enter for continue:
                                         only_birth=onlybirth,
                                         in_law_a=inlawa, in_law_b=inlawb), i, j)
                         if printrelstr :
-                            print rel + ' |info:', relstra, relstrb
+                            print(rel + ' |info:', relstra, relstrb)
                         else:
-                            print rel
+                            print(rel)
                     else:
                         rel = (FMT + ' |info:   male, Ga=%2d, Gb=%2d') % (
                                         rc.get_single_relationship_string(i, j,
@@ -2189,9 +2189,9 @@ Please enter a test number and press Enter for continue:
                                         only_birth=onlybirth,
                                         in_law_a=inlawa, in_law_b=inlawb), i, j)
                         if printrelstr :
-                            print rel + ' |info:', relstra, relstrb
+                            print(rel + ' |info:', relstra, relstrb)
                         else:
-                            print rel
+                            print(rel)
 
 def _testsibling(rc):
     vals = [(rc.NORM_SIB, 'sibling'),
@@ -2204,9 +2204,9 @@ def _testsibling(rc):
                            (UNKNOWN, 'unknown')]:
         for inlaw in [False, True]:
             for sibt, str in vals:
-                print FMT % rc.get_sibling_relationship_string(
+                print(FMT % rc.get_sibling_relationship_string(
                                 sibt, MALE, gendr, 
-                                in_law_a = inlaw) + ' |info:', str, strgen
+                                in_law_a = inlaw) + ' |info:', str, strgen)
 
 def _test_spouse(rc):
     FMT = '%+50s'
@@ -2222,9 +2222,9 @@ def _test_spouse(rc):
                            (FEMALE, 'female'), 
                            (UNKNOWN, 'unknown')] :
         for spouse_type, str in vals:
-            print FMT % rc.get_partner_relationship_string(
+            print(FMT % rc.get_partner_relationship_string(
                             spouse_type, MALE, gender) + \
-                            ' |info: gender='+strgen+', rel='+str
+                            ' |info: gender='+strgen+', rel='+str)
 
 def test(rc, printrelstr):
     """ this is a generic test suite for the singular relationship
@@ -2242,7 +2242,7 @@ def test(rc, printrelstr):
     testNum = args.r
 
     if testNum == None:
-        print """
+        print("""
 Select a test:
   0 - all tests
   1 - Test normal relations
@@ -2253,32 +2253,32 @@ Select a test:
   6 - Test partner types
 
 Please enter a test number and press Enter for continue:
-    """
+    """)
         testNum = sys.stdin.readline().strip()
         testNum = int(testNum)
 
     if testNum == 0 or testNum == 1:
-        print '\n\n=== Test normal relations ==='
+        print('\n\n=== Test normal relations ===')
         _test(rc, True, False, False, printrelstr, args.s)
 
     if testNum == 0 or testNum == 2:
-        print '\n\n=== Test step relations ==='
+        print('\n\n=== Test step relations ===')
         _test(rc, False, False, False, printrelstr, args.s)
 
     if testNum == 0 or testNum == 3:
-        print '\n\n=== Test in-law relations (first pers) ==='
+        print('\n\n=== Test in-law relations (first pers) ===')
         _test(rc, True, True, False, printrelstr, args.s)
 
     if testNum == 0 or testNum == 4:
-        print '\n\n=== Test step and in-law relations ==='
+        print('\n\n=== Test step and in-law relations ===')
         _test(rc, False, True, False, printrelstr, args.s)
 
     if testNum == 0 or testNum == 5:
-        print '\n\n=== Test sibling types ==='
+        print('\n\n=== Test sibling types ===')
         _testsibling(rc)
 
     if testNum == 0 or testNum == 6:
-        print '\n\n=== Test partner types ==='
+        print('\n\n=== Test partner types ===')
         _test_spouse(rc)
     
 if __name__ == "__main__":

From f3fc5c525755dee1c0b0e5c37a9bf3e6dbf24a58 Mon Sep 17 00:00:00 2001
From: Paul Franklin <pf98052@gmail.com>
Date: Thu, 20 Jun 2013 16:34:22 +0000
Subject: [PATCH 09/25] 6821: CLI asks forever when trying to overwrite while
 exporting

svn: r22542
---
 gramps/cli/arghandler.py | 31 ++++++++++++++-----------------
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/gramps/cli/arghandler.py b/gramps/cli/arghandler.py
index 0ceb74e77..eac93953a 100644
--- a/gramps/cli/arghandler.py
+++ b/gramps/cli/arghandler.py
@@ -8,7 +8,7 @@
 # Copyright (C) 2008       Brian G. Matherly
 # Copyright (C) 2010       Jakim Friant
 # Copyright (C) 2012       Doug Blank
-# Copyright (C) 2012       Paul Franklin
+# Copyright (C) 2012-2013  Paul Franklin
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -286,23 +286,20 @@ class ArgHandler(object):
                 self.__error(_("WARNING: Output file already exists!\n"
                                "WARNING: It will be overwritten:\n   %s") % 
                                fullpath)
-                answer = None
-                while not answer:
-                    try:
-                        if sys.version_info[0] < 3:
-                            ask = raw_input
-                        else:
-                            ask = input
-                        ans = ask(_('OK to overwrite? (yes/no) '))
-                    except EOFError:
-                        print()
-                        sys.exit(0)
-                    if ans.upper() in ('Y', 'YES', _('YES').upper()):
-                        self.__error(_("Will overwrite the existing file: %s") 
-                                          % fullpath)
-                        answer = "ok"
+                try:
+                    if sys.version_info[0] < 3:
+                        ask = raw_input
                     else:
-                        sys.exit(0)
+                        ask = input
+                    answer = ask(_('OK to overwrite? (yes/no) '))
+                except EOFError:
+                    print()
+                    sys.exit(0)
+                if answer.upper() in ('Y', 'YES', _('YES').upper()):
+                    self.__error(_("Will overwrite the existing file: %s") 
+                                   % fullpath)
+                else:
+                    sys.exit(0)
 
         if family_tree_format is None:
             # Guess the file format based on the file extension.

From 4ba97726a25746c33ec782066d496944b8cd9ec5 Mon Sep 17 00:00:00 2001
From: Tim G L Lyons <tim.g.lyons@gmail.com>
Date: Thu, 20 Jun 2013 16:43:43 +0000
Subject: [PATCH 10/25] 0006352: Bookmarking a source in the citation tree
 creates a blank bookmark. Disallow bookmarking a source in the Citation Tree
 View, and do not add sources to the history in the Citation Tree View.

svn: r22545
---
 gramps/gui/views/bookmarks.py           | 23 +++++++++++++++++++++++
 gramps/plugins/view/citationtreeview.py | 11 +++++++++++
 2 files changed, 34 insertions(+)

diff --git a/gramps/gui/views/bookmarks.py b/gramps/gui/views/bookmarks.py
index fad945ce7..1d9daa200 100644
--- a/gramps/gui/views/bookmarks.py
+++ b/gramps/gui/views/bookmarks.py
@@ -394,6 +394,29 @@ class CitationBookmarks(ListBookmarks) :
     def make_label(self, handle):
         return navigation_label(self.dbstate.db, 'Citation', handle)
 
+    # Override add from ListBookmarks, so that when self.bookmarks.add is called
+    # from ListView.add_bookmark, it will not add a Source bookmark to a
+    # Citation view.
+    def add(self, handle):
+        """Append the citation to the bottom of the bookmarks."""
+        if self.dbstate.db.get_citation_from_handle(handle):
+            ListBookmarks.add(self, handle)
+        else:
+            # Probably trying to bookmark a source when the navigation type is
+            # citation. This can occur when in the Citation Tree View and we
+            # bookmark a source.
+            
+            # FIXME: See http://www.gramps-project.org/bugs/view.php?id=6352 a
+            # more comprehensive solution is needed in the long term. See also
+            # change_active in CitatinTreeView
+            from gramps.gui.dialog import WarningDialog
+            WarningDialog(_("Cannot bookmark this reference"),
+                          "Only Citations can be bookmarked in this view. "
+                          "You are probably trying to bookmark a Source in the "
+                          "Citation Tree View. In this view, only Citations "
+                          "can be bookmarked. To bookmark a Source, switch to "
+                          "the Source View")
+
     def connect_signals(self):
         self.dbstate.db.connect('citation-delete', self.remove_handles)
 
diff --git a/gramps/plugins/view/citationtreeview.py b/gramps/plugins/view/citationtreeview.py
index 43717959d..a6dc6b1ed 100644
--- a/gramps/plugins/view/citationtreeview.py
+++ b/gramps/plugins/view/citationtreeview.py
@@ -156,6 +156,17 @@ class CitationTreeView(ListView):
 
         self.additional_uis.append(self.additional_ui())
 
+    # Override change_active from NavigationView, so that only Citations can be
+    # put in the history list for the CitationTreeView
+    def change_active(self, handle):
+        if self.dbstate.db.get_citation_from_handle(handle):
+            super(CitationTreeView, self).change_active(handle)
+        else:
+            # FIXME: See http://www.gramps-project.org/bugs/view.php?id=6352 a
+            # more comprehensive solution is needed in the long term. See also
+            # add in Bookmarks.CitationBookmarks
+            pass
+    
     def setup_filter(self):
         """
         Override the setup of the default Search Bar in listview, so that only

From face94275ccaa096277664d66f41da18d0694356 Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Fri, 21 Jun 2013 14:13:40 +0000
Subject: [PATCH 11/25] 4571: RTL support in fan chart

gramps/gui/utilscairo.py:
new file, currently holds just the warpPath() function,
taken from /usr/share/doc/python-cairo/examples/warpedtext.py,
with explanatory docs added.

gramps/gui/widgets/fanchart.py, class FanChartBaseWidget:
draw_text() method:
previous logic using cairo toy text API didn't support CTL text.
It has been removed, and replaced with a call to a new
method, draw_arc_text().

Flagged a subtle Unicode issue in the remaining old code,
for radial-oriented text, with a FIXME, I'll probably fix it
later as a separate issue.

create_map_rect_to_sector() static method:
create a transform to use with gui.utilscairo.warpPath(),
currently used in draw_arc_text().

Following Benny's code review I have annotated the algorithm
and made it hopefully clear, but I guess it could be reworked
into a better form if re-expressed with stacked transforms /
complex numbers / matrices for easier later maintenance.
Meanwhile I have used the same approach as the older code
in the file, good enough for a patch under this feature request.

The only issue remaining from the code review is whether
the create_map_rect_to_sector() function should be moved
to gui.utilscairo; see the bug thread.

svn: r22548
---
 gramps/gui/utilscairo.py       |  87 +++++++++++++++++++
 gramps/gui/widgets/fanchart.py | 147 +++++++++++++++++++++------------
 2 files changed, 182 insertions(+), 52 deletions(-)
 create mode 100644 gramps/gui/utilscairo.py

diff --git a/gramps/gui/utilscairo.py b/gramps/gui/utilscairo.py
new file mode 100644
index 000000000..a2dc276c0
--- /dev/null
+++ b/gramps/gui/utilscairo.py
@@ -0,0 +1,87 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2001-2007  Donald N. Allingham, Martin Hawlisch
+# Copyright (C) 2009 Douglas S. Blank
+# Copyright (C) 2012 Benny Malengier
+# Copyright (C) 2013 Vassilii Khachaturov
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, 
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# $Id$
+
+from __future__ import division
+
+#-------------------------------------------------------------------------
+#
+# Python modules
+#
+#-------------------------------------------------------------------------
+#from gi.repository import Pango
+#from gi.repository import GObject
+#from gi.repository import Gdk
+#from gi.repository import Gtk
+#from gi.repository import PangoCairo
+import cairo
+#import math
+#import colorsys
+#import sys
+#if sys.version_info[0] < 3:
+#    import cPickle as pickle
+#else:
+#    import pickle
+
+#-------------------------------------------------------------------------
+#
+# Functions
+#
+#-------------------------------------------------------------------------
+def warpPath(ctx, function):
+    """Transform a path given a 2D transformation function.
+
+    ctx -- a cairo.Context, on which the path is set
+    function -- a 2D transform (x,y) |-> (x_new,y_new)
+
+    The transformed path replaces the original one on the context.
+
+    Taken from /usr/share/doc/python-cairo/examples/warpedtext.py
+    According to /usr/share/doc/python-cairo/copyright, licensed
+    under MOZILLA PUBLIC LICENSE 1.1, see that file for more detail.
+    """
+
+    first = True
+
+    for type, points in ctx.copy_path():
+        if type == cairo.PATH_MOVE_TO:
+            if first:
+                ctx.new_path()
+                first = False
+            x, y = function(*points)
+            ctx.move_to(x, y)
+
+        elif type == cairo.PATH_LINE_TO:
+            x, y = function(*points)
+            ctx.line_to(x, y)
+
+        elif type == cairo.PATH_CURVE_TO:
+            x1, y1, x2, y2, x3, y3 = points
+            x1, y1 = function(x1, y1)
+            x2, y2 = function(x2, y2)
+            x3, y3 = function(x3, y3)
+            ctx.curve_to(x1, y1, x2, y2, x3, y3)
+
+        elif type == cairo.PATH_CLOSE_PATH:
+            ctx.close_path()
diff --git a/gramps/gui/widgets/fanchart.py b/gramps/gui/widgets/fanchart.py
index 14e7dbf78..bbade751d 100644
--- a/gramps/gui/widgets/fanchart.py
+++ b/gramps/gui/widgets/fanchart.py
@@ -4,6 +4,7 @@
 # Copyright (C) 2001-2007  Donald N. Allingham, Martin Hawlisch
 # Copyright (C) 2009 Douglas S. Blank
 # Copyright (C) 2012 Benny Malengier
+# Copyright (C) 2013 Vassilii Khachaturov
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -72,6 +73,7 @@ from gramps.gen.utils.db import (find_children, find_parents, find_witnessed_peo
                                  get_age, get_timeperiod, preset_name)
 from gramps.gen.const import GRAMPS_LOCALE as glocale
 _ = glocale.translation.gettext
+from gramps.gui.utilscairo import warpPath
 
 #-------------------------------------------------------------------------
 #
@@ -601,6 +603,10 @@ class FanChartBaseWidget(Gtk.DrawingArea):
                 txlen = int(w/height * txlen)
             cont = True
             while cont:
+                # FIXME this can make an invalid Unicode truncation
+                # if it comes in between CTL text. Should use the approach
+                # similar to draw_arc_text() and use layout wrapping logic
+                # instead, and then reset to proper length.
                 layout = self.create_pango_layout(text[:txlen])
                 layout.set_font_description(font)
                 w, h = layout.get_size()
@@ -629,60 +635,97 @@ class FanChartBaseWidget(Gtk.DrawingArea):
             PangoCairo.show_layout(cr, layout)
             cr.restore()
         else:
-            # center text:
-            #  1. determine degrees of the text we can draw
-            degpadding = PAD_TEXT / radius * (180 / math.pi) # degrees for padding
-            degneed = degpadding
-            maxlen = len(text)
-            hoffset = 0
-            for i in range(len(text)):
-                layout = self.create_pango_layout(text[i])
-                layout.set_font_description(font)
-                w, h = layout.get_size()
-                w = w / Pango.SCALE + 2 # 2 pixel padding after letter
-                h = h / Pango.SCALE + 2 # 2 pixel padding
-                if h/2 > hoffset:
-                    hoffset = h/2
-                degneed += w / radius * (180 / math.pi)
-                if degneed > stop - start - degpadding:
-                    #outside of the box
-                    maxlen = i
-                    break
-            #  2. determine degrees over we can distribute before and after
-            if degneed > stop - start - degpadding:
-                degover = 0
-            else:
-                degover = stop - start - degneed - degpadding
-            #  3. now draw this text, letter per letter
-            text = text[:maxlen]
-            
-            # offset for cairo-font system is 90, padding used is 5:
-            pos = start + 90 + degpadding + degover / 2
-            # Create a PangoLayout, set the font and text 
-            # Draw the layout N_WORDS times in a circle 
-            for i in range(len(text)):
-                layout = self.create_pango_layout(text[i])
-                layout.set_font_description(font)
-                w, h = layout.get_size()
-                w = w / Pango.SCALE + 2 # 4 pixel padding after word
-                h = h / Pango.SCALE + 2 # 4 pixel padding
-                degneed = w / radius * (180 / math.pi)
-                if pos+degneed > stop + 90:
-                    #failsafe, outside of the box, redo
-                    break
-
-                cr.save()
-                cr.rotate(pos * math.pi / 180)
-                pos = pos + degneed
-                # Inform Pango to re-layout the text with the new transformation
-                layout.context_changed()
-                #width, height = layout.get_size()
-                #r.move_to(- (width / Pango.SCALE) / 2.0, - radius)
-                cr.move_to(0, - radius - hoffset)
-                PangoCairo.show_layout(cr, layout)
-                cr.restore()
+            self.draw_arc_text(cr, text, radius, start, stop, font)
         cr.restore()
 
+    def draw_arc_text(self, cr, text, radius, start, stop, font):
+        """
+        Display text at a particular radius, between start and stop
+        degrees, setting it up along the arc, center-justified.
+
+        Text not fitting a single line will be word-wrapped away.
+        """
+
+        # 1. determine the spread of text we can draw, in radians
+        degpadding = PAD_TEXT / radius * (180 / math.pi) # degrees for padding
+        # offset for cairo-font system is 90, padding used is 5:
+        pos = start + 90 + degpadding/2
+        cr.save()
+        cr.rotate(math.radians(pos))
+        cr.new_path()
+        cr.move_to(0, -radius)
+        rad_spread = math.radians(stop - start - degpadding)
+
+        # 2. use Pango.Layout to set up the text for us, and do
+        # the hard work in CTL text handling and line wrapping.
+        layout = self.create_pango_layout(text)
+        layout.set_font_description(font)
+        layout.set_width(Pango.SCALE * radius * rad_spread)
+        layout.set_wrap(Pango.WrapMode.WORD)
+
+        # 3. clip to the top line only so the text looks nice
+        # all around the circle at the same radius.
+        # NOTE: one may not truncate the text var here,
+        # because the truncation can create invalid Unicode.
+        if layout.get_line_count() > 1:
+            layout.set_text(text, layout.get_line(0).length)
+
+        # 4. Use the layout to provide us the metrics of the text box
+        PangoCairo.layout_path(cr, layout)
+        w, h = layout.get_pixel_size()
+        #le = layout.get_line(0).get_pixel_extents()[0]
+        pe = cr.path_extents()
+        arc_used_ratio = w / (radius * rad_spread)
+        rad_mid = math.radians(pos) + rad_spread/2
+
+        # 5. The moment of truth: map the text box onto the sector, and render!
+        warpPath(cr, \
+            self.create_map_rect_to_sector(radius, pe, \
+                arc_used_ratio, rad_mid - rad_spread/2, rad_mid + rad_spread/2))
+        cr.fill()
+        cr.restore()
+
+    @staticmethod
+    def create_map_rect_to_sector(radius, rect, arc_used_ratio, start_rad, stop_rad):
+        """Create a 2D-transform, mapping a rectangle onto a circle sector.
+
+        radius -- average radius of the target sector
+        rect -- (x1, y1, x2, y2)
+        arc_used_ratio -- From 0.0 to 1.0. Rather than stretching onto the
+            whole sector, only the middle arc_used_ratio part will be mapped onto.
+        start_rad -- start radial angle of the sector, in radians
+        stop_rad -- stop radial angle of the sector, in radians
+
+        Returns a lambda (x,y)|->(xNew,yNew) to feed to warpPath.
+        """
+
+        x0, y0, w, h = rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1]
+
+        radiusin = radius - h/2
+        radiusout = radius + h/2
+        drho = h
+        dphi = (stop_rad - start_rad)
+
+        # There has to be a clearer way to express this transform,
+        # by stacking a set of transforms on cr around using this function
+        # and doing a mapping between unit squares of rectangular and polar
+        # coordinates.
+
+        def phi(x):
+            return (x - x0) * dphi * arc_used_ratio / w \
+                   + (1 - arc_used_ratio) * dphi / 2 \
+                   - math.pi/2 
+        def rho(y):
+            return (y - y0) * (radiusin - radiusout)/h + radiusout
+
+        # In (user coordinates units - pixels):
+        # x from x0 to x0 + w
+        # y from y0 to y0 + h
+        # Out:
+        # (x, y) within the arc_used_ratio of a box like drawn by draw_radbox
+        return lambda x, y: \
+            (rho(y) * math.cos(phi(x)), rho(y) * math.sin(phi(x)))
+
     def draw_gradient(self, cr, widget, halfdist):
         gradwidth = 10
         gradheight = 10

From 1dc1f6c0c2e55e089f3535ba4cf31d52e566a5b2 Mon Sep 17 00:00:00 2001
From: Paul Franklin <pf98052@gmail.com>
Date: Fri, 21 Jun 2013 20:28:39 +0000
Subject: [PATCH 12/25] added SVN Id property, and SVN Id line if needed

svn: r22552
---
 gramps/plugins/rel/rel_uk.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gramps/plugins/rel/rel_uk.py b/gramps/plugins/rel/rel_uk.py
index 586d7398f..353337ea0 100644
--- a/gramps/plugins/rel/rel_uk.py
+++ b/gramps/plugins/rel/rel_uk.py
@@ -21,6 +21,9 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 #
+# gramps/plugins/rel/rel_uk.py
+# $Id$
+#
 # UA: Пояснення щодо родинних відносин див. relationship.py
 # EN: Ukrainian relationship calculator. For more information see relationship.py
 

From d03fc191889da0962b1192132dc89356aee3bcb6 Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Sat, 22 Jun 2013 15:23:06 +0000
Subject: [PATCH 13/25] Fix minor ugliness due to precision loss.

Change an integer division into a floating one,
now the rendered text looks better.

svn: r22553
---
 gramps/gui/widgets/fanchart.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gramps/gui/widgets/fanchart.py b/gramps/gui/widgets/fanchart.py
index bbade751d..7b049c6f1 100644
--- a/gramps/gui/widgets/fanchart.py
+++ b/gramps/gui/widgets/fanchart.py
@@ -701,8 +701,8 @@ class FanChartBaseWidget(Gtk.DrawingArea):
 
         x0, y0, w, h = rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1]
 
-        radiusin = radius - h/2
-        radiusout = radius + h/2
+        radiusin = radius - h/2.0
+        radiusout = radius + h/2.0
         drho = h
         dphi = (stop_rad - start_rad)
 

From d30ade0488ae100ec47340c51db163c44a3c1578 Mon Sep 17 00:00:00 2001
From: Nick Hall <nick__hall@hotmail.com>
Date: Sat, 22 Jun 2013 21:01:04 +0000
Subject: [PATCH 14/25] 6814: Fix gramplet positioning when using RTL locale

svn: r22557
---
 gramps/gui/widgets/grampletpane.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/gramps/gui/widgets/grampletpane.py b/gramps/gui/widgets/grampletpane.py
index 6e2f1567a..d80c10797 100644
--- a/gramps/gui/widgets/grampletpane.py
+++ b/gramps/gui/widgets/grampletpane.py
@@ -1272,6 +1272,9 @@ class GrampletPane(Gtk.ScrolledWindow):
             mainframe = mframe.get_parent() # actually a vbox
         rect = source.get_allocation()
         sx, sy = rect.width, rect.height
+        # Convert to LTR co-ordinates when using RTL locale
+        if source.get_direction() == Gtk.TextDirection.RTL:
+            x = sx - x
         # first, find column:
         col = 0
         for i in range(len(self.columns)):

From 8bbbae41aa61c256954756631c5fa4d296e4383b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Sun, 23 Jun 2013 09:15:33 +0000
Subject: [PATCH 15/25] support Arabic on installation and lang_map (reports)

svn: r22565
---
 gramps/gen/utils/grampslocale.py | 1 +
 setup.py                         | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/gramps/gen/utils/grampslocale.py b/gramps/gen/utils/grampslocale.py
index 5d6da0c77..afedd396d 100644
--- a/gramps/gen/utils/grampslocale.py
+++ b/gramps/gen/utils/grampslocale.py
@@ -601,6 +601,7 @@ class GrampsLocale(object):
         _ = self.translation.gettext
         if not self._lang_map:
             self._lang_map = {
+                "ar" : _("Arabic"),
                 "bg" : _("Bulgarian"),
                 "ca" : _("Catalan"),
                 "cs" : _("Czech"),
diff --git a/setup.py b/setup.py
index caa819f1c..6c03cb958 100644
--- a/setup.py
+++ b/setup.py
@@ -49,8 +49,8 @@ from stat import ST_MODE
 import io
 from gramps.version import VERSION
 
-ALL_LINGUAS = ('bg', 'ca', 'cs', 'da', 'de', 'el', 'en_GB', 'es', 'fi', 'fr', 'he',
-               'hr', 'hu', 'it', 'ja', 'lt', 'nb', 'nl', 'nn', 'pl', 'pt_BR',
+ALL_LINGUAS = ('ar', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'en_GB', 'es', 'fi', 'fr',
+               'he', 'hr', 'hu', 'it', 'ja', 'lt', 'nb', 'nl', 'nn', 'pl', 'pt_BR',
                'pt_PT', 'ru', 'sk', 'sl', 'sq', 'sv', 'uk', 'vi', 'zh_CN')
 INTLTOOL_FILES = ('data/tips.xml', 'gramps/plugins/lib/holidays.xml')
 

From a4558b3cccfeb1fb568faf73d26e0a271d8ead66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Sun, 23 Jun 2013 09:16:54 +0000
Subject: [PATCH 16/25] enable Ukrainian date handler (by Fedir)

svn: r22566
---
 gramps/gen/datehandler/__init__.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gramps/gen/datehandler/__init__.py b/gramps/gen/datehandler/__init__.py
index 74338a496..9ef1cd442 100644
--- a/gramps/gen/datehandler/__init__.py
+++ b/gramps/gen/datehandler/__init__.py
@@ -58,6 +58,7 @@ from . import _date_sk
 from . import _date_sl
 from . import _date_sr
 from . import _date_sv
+from . import _date_uk
 
 # Initialize global parser
 try:

From 32172f1168a65accfb53fe85d4959280e8bb88a3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Sun, 23 Jun 2013 09:18:57 +0000
Subject: [PATCH 17/25] do not limit family's actors to mother and father, no
 relation between age of the person and child

svn: r22567
---
 po/fr.po | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/po/fr.po b/po/fr.po
index 5b450108c..68d2f90c2 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -3880,11 +3880,11 @@ msgstr "Âge"
 
 #: ../gramps/gen/lib/attrtype.py:75
 msgid "Father's Age"
-msgstr "Âge du père"
+msgstr "Âge du mari / compagnon"
 
 #: ../gramps/gen/lib/attrtype.py:76
 msgid "Mother's Age"
-msgstr "Âge de la mère"
+msgstr "Âge de la femme / compagne"
 
 #: ../gramps/gen/lib/attrtype.py:77
 #: ../gramps/gen/lib/eventroletype.py:66
@@ -31137,7 +31137,7 @@ msgstr "<b>Organisation des vues</b><br/>Quelques vues peuvent représenter vos
 
 #: ../gramps/data/tips.xml.in.h:23
 msgid "<b>Navigating Back and Forward</b><br/>Gramps maintains a list of previous active objects such as People, Events and . You can move forward and backward through the list using &quot;Go &gt; Forward&quot; and &quot;Go &gt; Back&quot; or the arrow buttons."
-msgstr "<b>Navigation Précédent et Suivant</b><br/>Gramps conserve une liste des objets actifs tels que les individus, événements lorsque vous naviguez dans votre base de données. Vous pouvez avancer et reculer dans la liste à l'aide de « Aller à &gt; Suivant&quot; et &quot;Aller à  &gt; Précédent »."
+msgstr "<b>Navigation Précédent et Suivant</b><br/>Gramps conserve une liste des objets actifs tels que les individus, événements lorsque vous naviguez dans votre base de données. Vous pouvez avancer et reculer dans la liste à l'aide de « Aller à &gt; Suivant&quot; et &quot;Aller à &gt; Précédent »."
 
 #: ../gramps/data/tips.xml.in.h:24
 msgid "<b>Keyboard Shortcuts</b><br/>Tired of having to take your hand off the keyboard to use the mouse? Many functions in Gramps have keyboard shortcuts. If one exists for a function it is displayed on the right side of the menu."

From 8af57bcf0708776add4bef6946bac3c85853d6bb Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Sun, 23 Jun 2013 11:12:13 +0000
Subject: [PATCH 18/25] 4571: RTL support in fanchart: cleanup older code

Use math.degrees() / math.radians() where able

Follow-up to CR by Benny:
    Removed redundant forced conversion to float, the
    	from future import division
    handles that already. See PEP-238 for details.

draw_text:
Remove manual layout wrapping, use pango Layout logic.
Refactored wrap_truncate_layout from draw_arc_text,
and it's now reused in draw_text, here with CHAR
wrapping mode as opposed to WORD in draw_arc_text.
This replaces the (Unicode-wrong) implementation of
manual char-by-char code with text truncation.

svn: r22569
---
 gramps/gui/widgets/fanchart.py | 101 +++++++++++++++------------------
 1 file changed, 45 insertions(+), 56 deletions(-)

diff --git a/gramps/gui/widgets/fanchart.py b/gramps/gui/widgets/fanchart.py
index 7b049c6f1..0a2025a86 100644
--- a/gramps/gui/widgets/fanchart.py
+++ b/gramps/gui/widgets/fanchart.py
@@ -555,6 +555,22 @@ class FanChartBaseWidget(Gtk.DrawingArea):
         cr.set_source_rgba(r/255., g/255., b/255., a) 
         cr.fill()
 
+    def wrap_truncate_layout(self, layout, font, width_pixels):
+        """Uses the layout to wrap and truncate its text to given width
+        
+        Returns: (w,h) as returned by layout.get_pixel_size()
+        """
+
+        layout.set_font_description(font)
+        layout.set_width(Pango.SCALE * width_pixels)
+
+        # NOTE: one may not truncate the text to just the 1st line's text,
+        # because the truncation can create invalid Unicode.
+        if layout.get_line_count() > 1:
+            layout.set_text(layout.get_text(), layout.get_line(0).length)
+
+        return layout.get_pixel_size()
+
     def draw_text(self, cr, text, radius, start, stop,
                   height=PIXELS_PER_GENERATION, radial=False,
                   fontcolor=(0, 0, 0), bold=False):
@@ -568,29 +584,31 @@ class FanChartBaseWidget(Gtk.DrawingArea):
         font.set_size(fontsize * Pango.SCALE)
         if bold:
             font.set_weight(Pango.Weight.BOLD)
-        cr.set_source_rgb(fontcolor[0], fontcolor[1], fontcolor[2])
+        cr.set_source_rgb(*fontcolor)
         if radial and self.radialtext:
             cr.save()
             layout = self.create_pango_layout(text)
             layout.set_font_description(font)
-            w, h = layout.get_size()
-            w = w / Pango.SCALE + 5 # 5 pixel padding
-            h = h / Pango.SCALE + 4 # 4 pixel padding
+            layout.set_wrap(Pango.WrapMode.CHAR)
+
+            # NOTE: for radial text, the sector radius height is the text width 
+            w, h = self.wrap_truncate_layout(layout, font, height - 2*PAD_TEXT)
+
+            w = w + 5 # 5 pixel padding
+            h = h + 4 # 4 pixel padding
             #first we check if height is ok
-            degneedheight = h / radius * (180 / math.pi)
+            degneedheight = math.degrees(h / radius)
             degavailheight = stop-start
             degoffsetheight = 0
             if degneedheight > degavailheight:
                 #reduce height
                 fontsize = degavailheight / degneedheight * fontsize / 2
                 font.set_size(fontsize * Pango.SCALE)
-                layout = self.create_pango_layout(text)
-                layout.set_font_description(font)
-                w, h = layout.get_size()
-                w = w / Pango.SCALE + 5 # 5 pixel padding
-                h = h / Pango.SCALE + 4 # 4 pixel padding
+                w, h = self.wrap_truncate_layout(layout, font, height - 2*PAD_TEXT)
+                w = w + 5 # 5 pixel padding
+                h = h + 4 # 4 pixel padding
                 #first we check if height is ok
-                degneedheight = h / radius * (180 / math.pi)
+                degneedheight = math.degrees(h / radius)
                 degavailheight = stop-start
                 if degneedheight > degavailheight:
                     #we could not fix it, no text
@@ -598,35 +616,13 @@ class FanChartBaseWidget(Gtk.DrawingArea):
             if text:
                 #spread rest
                 degoffsetheight = (degavailheight - degneedheight) / 2
-            txlen = len(text)
-            if w > height - PAD_TEXT:
-                txlen = int(w/height * txlen)
-            cont = True
-            while cont:
-                # FIXME this can make an invalid Unicode truncation
-                # if it comes in between CTL text. Should use the approach
-                # similar to draw_arc_text() and use layout wrapping logic
-                # instead, and then reset to proper length.
-                layout = self.create_pango_layout(text[:txlen])
-                layout.set_font_description(font)
-                w, h = layout.get_size()
-                w = w / Pango.SCALE + 2*PAD_TEXT # padding before/after
-                h = h / Pango.SCALE + 4 # padding in height text
-                if w > height:
-                    if txlen <= 1:
-                        cont = False
-                        txlen = 0
-                    else:
-                        txlen -= 1
-                else:
-                    cont = False
             # offset for cairo-font system is 90
             rotval = self.rotate_value % 360 - 90
             if (start + rotval) % 360 > 179:
                 pos = start + degoffsetheight + 90 - 90
             else:
                 pos = stop - degoffsetheight + 180
-            cr.rotate(pos * math.pi / 180)
+            cr.rotate(math.radians(pos))
             layout.context_changed()
             if (start + rotval) % 360 > 179:
                 cr.move_to(radius + PAD_TEXT, 0)
@@ -647,7 +643,7 @@ class FanChartBaseWidget(Gtk.DrawingArea):
         """
 
         # 1. determine the spread of text we can draw, in radians
-        degpadding = PAD_TEXT / radius * (180 / math.pi) # degrees for padding
+        degpadding = math.degrees(PAD_TEXT / radius)
         # offset for cairo-font system is 90, padding used is 5:
         pos = start + 90 + degpadding/2
         cr.save()
@@ -656,29 +652,22 @@ class FanChartBaseWidget(Gtk.DrawingArea):
         cr.move_to(0, -radius)
         rad_spread = math.radians(stop - start - degpadding)
 
-        # 2. use Pango.Layout to set up the text for us, and do
+        # 2. Use Pango.Layout to set up the text for us, and do
         # the hard work in CTL text handling and line wrapping.
-        layout = self.create_pango_layout(text)
-        layout.set_font_description(font)
-        layout.set_width(Pango.SCALE * radius * rad_spread)
-        layout.set_wrap(Pango.WrapMode.WORD)
-
-        # 3. clip to the top line only so the text looks nice
+        # Clip to the top line only so the text looks nice
         # all around the circle at the same radius.
-        # NOTE: one may not truncate the text var here,
-        # because the truncation can create invalid Unicode.
-        if layout.get_line_count() > 1:
-            layout.set_text(text, layout.get_line(0).length)
+        layout = self.create_pango_layout(text)
+        layout.set_wrap(Pango.WrapMode.WORD)
+        w, h = self.wrap_truncate_layout(layout, font, radius * rad_spread)
 
-        # 4. Use the layout to provide us the metrics of the text box
+        # 3. Use the layout to provide us the metrics of the text box
         PangoCairo.layout_path(cr, layout)
-        w, h = layout.get_pixel_size()
         #le = layout.get_line(0).get_pixel_extents()[0]
         pe = cr.path_extents()
         arc_used_ratio = w / (radius * rad_spread)
         rad_mid = math.radians(pos) + rad_spread/2
 
-        # 5. The moment of truth: map the text box onto the sector, and render!
+        # 4. The moment of truth: map the text box onto the sector, and render!
         warpPath(cr, \
             self.create_map_rect_to_sector(radius, pe, \
                 arc_used_ratio, rad_mid - rad_spread/2, rad_mid + rad_spread/2))
@@ -701,8 +690,8 @@ class FanChartBaseWidget(Gtk.DrawingArea):
 
         x0, y0, w, h = rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1]
 
-        radiusin = radius - h/2.0
-        radiusout = radius + h/2.0
+        radiusin = radius - h/2
+        radiusout = radius + h/2
         drho = h
         dphi = (stop_rad - start_rad)
 
@@ -938,7 +927,7 @@ class FanChartBaseWidget(Gtk.DrawingArea):
                 end_angle = math.pi + (math.pi + end_angle)
             # now look at change in angle:
             diff_angle = (end_angle - start_angle) % (math.pi * 2.0)
-            self.rotate_value -= diff_angle * 180.0/ math.pi
+            self.rotate_value -= math.degrees(diff_angle)
             self.last_x, self.last_y = event.x, event.y
         self.queue_draw()
         return True
@@ -1270,7 +1259,7 @@ class FanChartWidget(FanChartBaseWidget):
         cr.translate(self.center_x, self.center_y)
 
         cr.save()
-        cr.rotate(self.rotate_value * math.pi/180)
+        cr.rotate(math.radians(self.rotate_value))
         for generation in range(self.generations - 1, 0, -1):
             for p in range(len(self.data[generation])):
                 (text, person, parents, child, userdata) = self.data[generation][p]
@@ -1327,8 +1316,8 @@ class FanChartWidget(FanChartBaseWidget):
         position in the chart
         """
         cr.save()
-        start_rad = start * math.pi/180
-        stop_rad = stop * math.pi/180
+        start_rad = math.radians(start)
+        stop_rad = math.radians(stop)
         r, g, b, a = self.background_box(person, generation, userdata)
         radius = generation * PIXELS_PER_GENERATION + self.CENTER
         # If max generation, and they have parents:
@@ -1382,7 +1371,7 @@ class FanChartWidget(FanChartBaseWidget):
             radial = False
             radstart = radius - PIXELS_PER_GENERATION/2
             if self.radialtext: ## and generation >= 6:
-                spacepolartext = radstart * (stop-start)*math.pi/180
+                spacepolartext = radstart * math.radians(stop-start)
                 if spacepolartext < PIXELS_PER_GENERATION * 1.1:
                     # more space to print it radial
                     radial = True

From b8a18b02b5a69c3156a8f8980cab4e570b676aa8 Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Sun, 23 Jun 2013 14:16:22 +0000
Subject: [PATCH 19/25] 6740: root cursor corruption

Use get_window() not get_root_window() to set the cursor.

svn: r22571
---
 gramps/plugins/view/pedigreeview.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gramps/plugins/view/pedigreeview.py b/gramps/plugins/view/pedigreeview.py
index 363f93f94..9a4f75f7b 100644
--- a/gramps/plugins/view/pedigreeview.py
+++ b/gramps/plugins/view/pedigreeview.py
@@ -1333,7 +1333,7 @@ class PedigreeView(NavigationView):
         or call option menu.
         """
         if event.button == 1 and event.type == Gdk.EventType.BUTTON_PRESS:
-            widget.get_root_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.FLEUR))
+            widget.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.FLEUR))
             self._last_x = event.x
             self._last_y = event.y
             self._in_move = True
@@ -1347,7 +1347,7 @@ class PedigreeView(NavigationView):
         """Exit from scroll mode when button release."""
         if event.button == 1 and event.type == Gdk.EventType.BUTTON_RELEASE:
             self.cb_bg_motion_notify_event(widget, event)
-            widget.get_root_window().set_cursor(None)
+            widget.get_window().set_cursor(None)
             self._in_move = False
             return True
         return False

From 3fd0762ae03436e7bdc8f4275003d034574427ca Mon Sep 17 00:00:00 2001
From: John Ralls <jralls@ceridwen.us>
Date: Sun, 23 Jun 2013 22:47:25 +0000
Subject: [PATCH 20/25] Move the HTML resources from gramps/plugins/webstuff to
 data and images

So that they're together with the other resources instead of in
site-package/gramps. Aside from a better source and installation
layout, this makes it easier to bundle them.



svn: r22576
---
 .../plugins/webstuff => data}/css/GeoView.css |    0
 .../webstuff => data}/css/Web_Basic-Ash.css   |    0
 .../webstuff => data}/css/Web_Basic-Blue.css  |    0
 .../css/Web_Basic-Cypress.css                 |    0
 .../webstuff => data}/css/Web_Basic-Lilac.css |    0
 .../webstuff => data}/css/Web_Basic-Peach.css |    0
 .../css/Web_Basic-Spruce.css                  |    0
 .../css/Web_Citations-Animated.css            |    0
 .../css/Web_Citations-Outline.css             |    0
 .../css/Web_DropDown-Menus.css                |    0
 .../webstuff => data}/css/Web_Fade-Menus.css  |    0
 .../css/Web_Horizontal-Menus.css              |    0
 .../webstuff => data}/css/Web_Mainz.css       |    0
 .../webstuff => data}/css/Web_Nebraska.css    |    0
 .../css/Web_Print-Default.css                 |    0
 .../css/Web_Vertical-Menus.css                |    0
 .../webstuff => data}/css/Web_Visually.css    |    0
 .../webstuff => data}/css/ancestortree.css    |    0
 .../webstuff => data}/css/behaviour.css       |    0
 .../webstuff => data}/css/jquery.flexbox.css  |    0
 .../webstuff => data}/css/narrative-maps.css  |    0
 .../images/ui-bg_diamond_10_4f4221_10x8.png   |  Bin
 .../images/ui-bg_diamond_20_372806_10x8.png   |  Bin
 .../images/ui-bg_diamond_25_675423_10x8.png   |  Bin
 .../images/ui-bg_diamond_25_d5ac5d_10x8.png   |  Bin
 .../images/ui-bg_diamond_8_261803_10x8.png    |  Bin
 .../images/ui-bg_diamond_8_443113_10x8.png    |  Bin
 .../images/ui-bg_flat_75_ddd4b0_40x100.png    |  Bin
 .../ui-bg_highlight-hard_65_fee4bd_1x100.png  |  Bin
 .../images/ui-icons_070603_256x240.png        |  Bin
 .../images/ui-icons_e8e2b5_256x240.png        |  Bin
 .../images/ui-icons_e9cd86_256x240.png        |  Bin
 .../images/ui-icons_efec9f_256x240.png        |  Bin
 .../images/ui-icons_f2ec64_256x240.png        |  Bin
 .../images/ui-icons_f9f2bd_256x240.png        |  Bin
 .../images/ui-icons_ff7519_256x240.png        |  Bin
 .../swanky-purse/jquery-ui-1.7.2.custom.css   |    0
 .../swanky-purse/jquery-ui-1.7.3.custom.css   |    0
 .../javascript/jquery-1.3.2.min.js            |    0
 .../javascript/jquery-1.7.1.js                |    0
 .../javascript/jquery-1.7.1.min.js            |    0
 .../javascript/jquery-ui-1.7.2.custom.min.js  |    0
 .../javascript/jquery.flexbox.js              |    0
 .../javascript/jquery.flexbox.min.js          |    0
 gramps/gen/const.py                           |    2 -
 gramps/plugins/docgen/htmldoc.py              |    4 +-
 gramps/plugins/webstuff/images/document.png   |  Bin 2855 -> 0 bytes
 .../webstuff/images/gramps-geo-altmap.svg     |  177 --
 .../webstuff/images/gramps-geo-birth.svg      | 1370 ----------------
 .../webstuff/images/gramps-geo-death.svg      | 1438 -----------------
 .../webstuff/images/gramps-geo-mainmap.svg    |  162 --
 .../webstuff/images/gramps-geo-marriage.svg   | 1052 ------------
 gramps/plugins/webstuff/webstuff.py           |   11 +-
 .../webstuff}/Web_Gender_Female.png           |  Bin
 .../webstuff}/Web_Gender_Male.png             |  Bin
 .../webstuff}/Web_Mainz_Bkgd.png              |  Bin
 .../webstuff}/Web_Mainz_Header.png            |  Bin
 .../webstuff}/Web_Mainz_Mid.png               |  Bin
 .../webstuff}/Web_Mainz_MidLight.png          |  Bin
 .../images => images/webstuff}/blank.gif      |  Bin
 .../images => images/webstuff}/crosshairs.png |  Bin
 .../images => images/webstuff}/favicon.ico    |  Bin
 .../images => images/webstuff}/favicon2.ico   |  Bin
 .../webstuff}/gramps-geo-altmap.png           |  Bin
 .../webstuff}/gramps-geo-birth.png            |  Bin
 .../webstuff}/gramps-geo-death.png            |  Bin
 .../webstuff}/gramps-geo-mainmap.png          |  Bin
 .../webstuff}/gramps-geo-marriage.png         |  Bin
 .../webstuff}/somerights20.gif                |  Bin
 mac/gramps.bundle                             |    4 -
 setup.py                                      |   20 +-
 71 files changed, 19 insertions(+), 4221 deletions(-)
 rename {gramps/plugins/webstuff => data}/css/GeoView.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Ash.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Blue.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Cypress.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Lilac.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Peach.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Basic-Spruce.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Citations-Animated.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Citations-Outline.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_DropDown-Menus.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Fade-Menus.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Horizontal-Menus.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Mainz.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Nebraska.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Print-Default.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Vertical-Menus.css (100%)
 rename {gramps/plugins/webstuff => data}/css/Web_Visually.css (100%)
 rename {gramps/plugins/webstuff => data}/css/ancestortree.css (100%)
 rename {gramps/plugins/webstuff => data}/css/behaviour.css (100%)
 rename {gramps/plugins/webstuff => data}/css/jquery.flexbox.css (100%)
 rename {gramps/plugins/webstuff => data}/css/narrative-maps.css (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_070603_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_e9cd86_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_efec9f_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_f2ec64_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/images/ui-icons_ff7519_256x240.png (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/jquery-ui-1.7.2.custom.css (100%)
 rename {gramps/plugins/webstuff => data}/css/swanky-purse/jquery-ui-1.7.3.custom.css (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery-1.3.2.min.js (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery-1.7.1.js (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery-1.7.1.min.js (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery-ui-1.7.2.custom.min.js (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery.flexbox.js (100%)
 rename {gramps/plugins/webstuff => data}/javascript/jquery.flexbox.min.js (100%)
 delete mode 100644 gramps/plugins/webstuff/images/document.png
 delete mode 100644 gramps/plugins/webstuff/images/gramps-geo-altmap.svg
 delete mode 100644 gramps/plugins/webstuff/images/gramps-geo-birth.svg
 delete mode 100644 gramps/plugins/webstuff/images/gramps-geo-death.svg
 delete mode 100644 gramps/plugins/webstuff/images/gramps-geo-mainmap.svg
 delete mode 100644 gramps/plugins/webstuff/images/gramps-geo-marriage.svg
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Gender_Female.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Gender_Male.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Mainz_Bkgd.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Mainz_Header.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Mainz_Mid.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/Web_Mainz_MidLight.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/blank.gif (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/crosshairs.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/favicon.ico (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/favicon2.ico (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/gramps-geo-altmap.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/gramps-geo-birth.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/gramps-geo-death.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/gramps-geo-mainmap.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/gramps-geo-marriage.png (100%)
 rename {gramps/plugins/webstuff/images => images/webstuff}/somerights20.gif (100%)

diff --git a/gramps/plugins/webstuff/css/GeoView.css b/data/css/GeoView.css
similarity index 100%
rename from gramps/plugins/webstuff/css/GeoView.css
rename to data/css/GeoView.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Ash.css b/data/css/Web_Basic-Ash.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Ash.css
rename to data/css/Web_Basic-Ash.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Blue.css b/data/css/Web_Basic-Blue.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Blue.css
rename to data/css/Web_Basic-Blue.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Cypress.css b/data/css/Web_Basic-Cypress.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Cypress.css
rename to data/css/Web_Basic-Cypress.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Lilac.css b/data/css/Web_Basic-Lilac.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Lilac.css
rename to data/css/Web_Basic-Lilac.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Peach.css b/data/css/Web_Basic-Peach.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Peach.css
rename to data/css/Web_Basic-Peach.css
diff --git a/gramps/plugins/webstuff/css/Web_Basic-Spruce.css b/data/css/Web_Basic-Spruce.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Basic-Spruce.css
rename to data/css/Web_Basic-Spruce.css
diff --git a/gramps/plugins/webstuff/css/Web_Citations-Animated.css b/data/css/Web_Citations-Animated.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Citations-Animated.css
rename to data/css/Web_Citations-Animated.css
diff --git a/gramps/plugins/webstuff/css/Web_Citations-Outline.css b/data/css/Web_Citations-Outline.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Citations-Outline.css
rename to data/css/Web_Citations-Outline.css
diff --git a/gramps/plugins/webstuff/css/Web_DropDown-Menus.css b/data/css/Web_DropDown-Menus.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_DropDown-Menus.css
rename to data/css/Web_DropDown-Menus.css
diff --git a/gramps/plugins/webstuff/css/Web_Fade-Menus.css b/data/css/Web_Fade-Menus.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Fade-Menus.css
rename to data/css/Web_Fade-Menus.css
diff --git a/gramps/plugins/webstuff/css/Web_Horizontal-Menus.css b/data/css/Web_Horizontal-Menus.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Horizontal-Menus.css
rename to data/css/Web_Horizontal-Menus.css
diff --git a/gramps/plugins/webstuff/css/Web_Mainz.css b/data/css/Web_Mainz.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Mainz.css
rename to data/css/Web_Mainz.css
diff --git a/gramps/plugins/webstuff/css/Web_Nebraska.css b/data/css/Web_Nebraska.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Nebraska.css
rename to data/css/Web_Nebraska.css
diff --git a/gramps/plugins/webstuff/css/Web_Print-Default.css b/data/css/Web_Print-Default.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Print-Default.css
rename to data/css/Web_Print-Default.css
diff --git a/gramps/plugins/webstuff/css/Web_Vertical-Menus.css b/data/css/Web_Vertical-Menus.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Vertical-Menus.css
rename to data/css/Web_Vertical-Menus.css
diff --git a/gramps/plugins/webstuff/css/Web_Visually.css b/data/css/Web_Visually.css
similarity index 100%
rename from gramps/plugins/webstuff/css/Web_Visually.css
rename to data/css/Web_Visually.css
diff --git a/gramps/plugins/webstuff/css/ancestortree.css b/data/css/ancestortree.css
similarity index 100%
rename from gramps/plugins/webstuff/css/ancestortree.css
rename to data/css/ancestortree.css
diff --git a/gramps/plugins/webstuff/css/behaviour.css b/data/css/behaviour.css
similarity index 100%
rename from gramps/plugins/webstuff/css/behaviour.css
rename to data/css/behaviour.css
diff --git a/gramps/plugins/webstuff/css/jquery.flexbox.css b/data/css/jquery.flexbox.css
similarity index 100%
rename from gramps/plugins/webstuff/css/jquery.flexbox.css
rename to data/css/jquery.flexbox.css
diff --git a/gramps/plugins/webstuff/css/narrative-maps.css b/data/css/narrative-maps.css
similarity index 100%
rename from gramps/plugins/webstuff/css/narrative-maps.css
rename to data/css/narrative-maps.css
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_10_4f4221_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_20_372806_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_25_675423_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_25_d5ac5d_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_8_261803_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png b/data/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png
rename to data/css/swanky-purse/images/ui-bg_diamond_8_443113_10x8.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png b/data/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png
rename to data/css/swanky-purse/images/ui-bg_flat_75_ddd4b0_40x100.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png b/data/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
rename to data/css/swanky-purse/images/ui-bg_highlight-hard_65_fee4bd_1x100.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_070603_256x240.png b/data/css/swanky-purse/images/ui-icons_070603_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_070603_256x240.png
rename to data/css/swanky-purse/images/ui-icons_070603_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png b/data/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png
rename to data/css/swanky-purse/images/ui-icons_e8e2b5_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_e9cd86_256x240.png b/data/css/swanky-purse/images/ui-icons_e9cd86_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_e9cd86_256x240.png
rename to data/css/swanky-purse/images/ui-icons_e9cd86_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_efec9f_256x240.png b/data/css/swanky-purse/images/ui-icons_efec9f_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_efec9f_256x240.png
rename to data/css/swanky-purse/images/ui-icons_efec9f_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_f2ec64_256x240.png b/data/css/swanky-purse/images/ui-icons_f2ec64_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_f2ec64_256x240.png
rename to data/css/swanky-purse/images/ui-icons_f2ec64_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png b/data/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png
rename to data/css/swanky-purse/images/ui-icons_f9f2bd_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_ff7519_256x240.png b/data/css/swanky-purse/images/ui-icons_ff7519_256x240.png
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/images/ui-icons_ff7519_256x240.png
rename to data/css/swanky-purse/images/ui-icons_ff7519_256x240.png
diff --git a/gramps/plugins/webstuff/css/swanky-purse/jquery-ui-1.7.2.custom.css b/data/css/swanky-purse/jquery-ui-1.7.2.custom.css
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/jquery-ui-1.7.2.custom.css
rename to data/css/swanky-purse/jquery-ui-1.7.2.custom.css
diff --git a/gramps/plugins/webstuff/css/swanky-purse/jquery-ui-1.7.3.custom.css b/data/css/swanky-purse/jquery-ui-1.7.3.custom.css
similarity index 100%
rename from gramps/plugins/webstuff/css/swanky-purse/jquery-ui-1.7.3.custom.css
rename to data/css/swanky-purse/jquery-ui-1.7.3.custom.css
diff --git a/gramps/plugins/webstuff/javascript/jquery-1.3.2.min.js b/data/javascript/jquery-1.3.2.min.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery-1.3.2.min.js
rename to data/javascript/jquery-1.3.2.min.js
diff --git a/gramps/plugins/webstuff/javascript/jquery-1.7.1.js b/data/javascript/jquery-1.7.1.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery-1.7.1.js
rename to data/javascript/jquery-1.7.1.js
diff --git a/gramps/plugins/webstuff/javascript/jquery-1.7.1.min.js b/data/javascript/jquery-1.7.1.min.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery-1.7.1.min.js
rename to data/javascript/jquery-1.7.1.min.js
diff --git a/gramps/plugins/webstuff/javascript/jquery-ui-1.7.2.custom.min.js b/data/javascript/jquery-ui-1.7.2.custom.min.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery-ui-1.7.2.custom.min.js
rename to data/javascript/jquery-ui-1.7.2.custom.min.js
diff --git a/gramps/plugins/webstuff/javascript/jquery.flexbox.js b/data/javascript/jquery.flexbox.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery.flexbox.js
rename to data/javascript/jquery.flexbox.js
diff --git a/gramps/plugins/webstuff/javascript/jquery.flexbox.min.js b/data/javascript/jquery.flexbox.min.js
similarity index 100%
rename from gramps/plugins/webstuff/javascript/jquery.flexbox.min.js
rename to data/javascript/jquery.flexbox.min.js
diff --git a/gramps/gen/const.py b/gramps/gen/const.py
index 5b67fba57..485be18b2 100644
--- a/gramps/gen/const.py
+++ b/gramps/gen/const.py
@@ -160,8 +160,6 @@ RULE_GLADE     = os.path.join(GLADE_DIR, "rule.glade")
 
 PLUGINS_DIR        = os.path.join(ROOT_DIR, "plugins")
 WEB_DIR            = os.path.join(ROOT_DIR, 'webapp')
-WEBSTUFF_DIR       = os.path.join(PLUGINS_DIR, "webstuff")
-WEBSTUFF_IMAGE_DIR = os.path.join(WEBSTUFF_DIR, "images")
 
 USE_TIPS = False
 
diff --git a/gramps/plugins/docgen/htmldoc.py b/gramps/plugins/docgen/htmldoc.py
index 2c0a9d24a..4371c52ae 100644
--- a/gramps/plugins/docgen/htmldoc.py
+++ b/gramps/plugins/docgen/htmldoc.py
@@ -48,7 +48,7 @@ import time
 from gramps.gen.const import GRAMPS_LOCALE as glocale
 _ = glocale.translation.gettext
 from gramps.gen.utils.image import resize_to_jpeg
-from gramps.gen.const import DATA_DIR, WEBSTUFF_IMAGE_DIR, PROGRAM_NAME, URL_HOMEPAGE
+from gramps.gen.const import DATA_DIR, IMAGE_DIR, PROGRAM_NAME, URL_HOMEPAGE
 from gramps.version import VERSION
 from gramps.gen.plug.docgen import BaseDoc, TextDoc, FONT_SANS_SERIF, URL_PATTERN
 from gramps.plugins.lib.libhtmlbackend import HtmlBackend, process_spaces
@@ -298,7 +298,7 @@ class HtmlDoc(BaseDoc, TextDoc):
             if os.path.exists(fullpath):
                 self.copy_file(fullpath, _HTMLSCREEN)
         #favicon
-        self.copy_file(os.path.join(WEBSTUFF_IMAGE_DIR, 'favicon.ico'), 
+        self.copy_file(os.path.join(IMAGE_DIR, 'favicon.ico'), 
                         'favicon.ico')
 
     def __reduce_list(self):
diff --git a/gramps/plugins/webstuff/images/document.png b/gramps/plugins/webstuff/images/document.png
deleted file mode 100644
index bfe4bad56cecfb2fb3dd3b1a21a0f7a79bf8f96e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2855
zcmV+?3)u9DP)<h;3K|Lk000e1NJLTq001xm001-y1^@s6%#*v300004XF*Lt006O%
z3;baP00006VoOIv0RI600RN!9r;`8x010qNS#tmY3lRVS3lRZ-WM7d0000McNliru
z(g6z%2qzp!6$JnQ3ZzLyK~#9!)tYNiROcDTf84yZ<LWMIGD#Cl)=c^(S{u<^W@74$
z)rOdWz#@$#pE5R)$}a3KyTBp};T9p+nS5zJxGIV!<}%exs?#V2+(9kYvFXGMCNwCb
ztK0&HWzX9WuxBsloL$Hyt$k<CxSVs|bDrn<|KI=fJns>p01$V=VKf@AEm*K%H;@L*
z29lV>5a-XI7k9!K9v&7Q9Ua1KHV2$q0Q?MykLo~R96NUGM>R;2q$wRfpHB=A4-2o?
zD~=vL8gL>dniKK-1Vadc5Ms*n#>U3@=9_OY7z`{~vV>1R{S=@RxC@w}W$*ti;*rP5
z$cQ+5_N@Fouh%OM95^7RPoJ)dMA#oKEiM1mh)2#BLU85E6#yhj!eB74Xwf3xd+*Qa
zbUIZeVp7QMc8C27kdcugzj()v9jf<7j)H;$Rf9tv7ed1C_sewh`~4V=Mjm?TSG@b~
zyODH?Q#kPClTRvM?D2R2Xl!i6?RMjKyGc(^=jE4Q24KgI9kOu&<6SNnZnv9_8#l6X
z<3<2{KA-Gxd3kxj<OpYAWMl-d*GqeQI~^SzeD>LAjEs!1aG{aCd-np^0ewJXV^Zj=
zufF1yS6(4GIhph4&y$yz2Ovl4#TQ@X_U+pMyzs&ccsw2+eDFc?^7456@yF$eFJHb~
z4nV+Qw|i$Okz|Kndg&#qs;Ve0Eupcok*caH-g)O8;^N`}{s_ziW&-hX6N^}OKn;b-
z@>~7B@yKe-kgo|LxPALJadB~+K7E?r-d=`>zoWPJI$d2|axf1cJ`C_%;9tOvFbAe;
z_|)eqof*GZO#FuU_;|*~#sKK+>*Mm}P7)Fl=<o06=+R?TS62h92L1{3s8UEvRkRjg
zB$t&&2RR<PU?oYC&kHfGJbwS!#2g8oPRHWKzoxIRpH-`V$Ku6{1JmOIKN4d_?#GC7
zkmDdpN(UuLk`aKokb8tIsQ@!(%uqZvG1Q<HD^|!i2Zq^f#^>{qoNQq0)@_uRm*e$%
zdGygo$;->bY&N6Q>F|2JoH}(1gTX*<ZZ3IwdF1DB;=+ZCEL^yd<m6;3Dk>-}EX3#Y
z0r18fZ(y}r*}i?dj7o4#1cR|=%^HS=21!gzR5&270ZEc*X=&l9r=ALl$PbHhI8}li
z4_pfml9FD5bAj>27hkYu&F?vM=n!dXX#i`0b3jj`x&gt-n>K9%ASo${*I$1ffc*S?
zmM>pUUfu@s^Yak`o_OL3a&vRB+wJIdI!a4RsH>~TU@#CLA5U^}GDnUaAt@<|?b}~t
z>(*@;jYckByhwR@IX0V>B}<l&o0}UEgy>mbM!@g)laP=g>-$uq9O=ALX(W|J9Epqw
zGdlGBI^Asg`}=8aZB-x;A8NqopZ|@7goLn%SuAF@Y$=~eJZ{Wp3qrt_En5JA#bUu?
zu^>r8zE)UR$mY#|V&~4C`2Bt=Dz>tDa{&bf1qdOrd-pDEHtWRwf`S4w+qPAP^*55l
zggOZh9z4kG*|Vb~Fg7+uOG^tYSFU7i%ojDvq1S@&29XJuQ!Qkq2t<^T4?L%>t&Oy_
zXJV}Z!OE2@WrYX~i^VdbLgOk@QBi@{>t)%pR5onbKw)8#tU{+xpT=O&V>0FN{PTaH
zpuo(fOBXR37h*8zak*UBY<Bq_jg5`i?RM(x>%t5Vmr+4l+B4j|>5Yzn&*$U#@#7Ot
zjB4^fnqsIWD`g@KM>1ge_#vq(U2AI_YuB!gjX=<l;JJ#53i|s8XlQ6)*REY$x^#&x
zTgoXavf}fNVlX7*a=9>@%`97%3P5gdE=^5MoH*g(t+(Eysi}$F-1SsdRbez50cdYO
z2|z=`cJ}Pq1Hk(A>q86|5!8yILZhRjOq({1(b4Z!I3E6h0K~DCBs{{A3KJeMp{jC1
z2<Fb6$Bi4;X>UKNtwKTwjvP6{v}x02IL9FktyRQC{StXiAW0&`p<rn|t|lTvVS@K7
z=b)&oKKbNh=FXj`ihu@%Bvme}Q7pWpQYuL}I+CigDJi2Y9<@edC@og4TE)o7h$170
z7hpog8KIi|g7u7+WU3i16z_ZPxpaDadx){EA~<~bugsh|GlUXQRAi;HavLCMYTAv>
zW<!z$m6eqUA+X!+*zLs=za0o6C@wChu&{_ddzuhJ;?-BHv0ANItyY8(G&k?X>2zYV
z*$@J(RvR@nHAs@AFkT4w=%WvrKmYFNi+Ff=nB&KfvwHPvzWZ)Sl^W4{1ZC-<U5-R1
zxlp6k`iT=KJfx>*M3+$^Bv!9p&Ct+b7@QVMAs|RhOrpNNPA(NvQ<t)S{d$UutN=Xr
z*ki0)mqA6vR%XqbMNyH3H{X04y?zey@d@blb2xUag`}h;Dl4~AQ&USyN(!Bwoj4rD
zl$MsUXwf1}CX<4W>FF6<z1kfefx*E+T3g4<*1^GnC_Go5S1TvfqaPY^p}Hp23PF#@
zLq<ks>_nzUi>j(u85|s>uCA7*rag3aUZSL=1c$?k&*#Hn&{I<4#A>y%bm=1im`ph|
zH#gJX-cCb91AF&2laphjrly7m9!LS;)TzG%g1Wj|_U+pbKz4SvYQ~S&n#%|b3=E*t
z>FDq8)8uPp0jC~$H8m1ZGix{k%4gkk&o8)g<y+32IU9Wq96EH6r=L!vukV)paEHTz
z&*ww0H{f(SsIIQz)~%Z?UAmN<91~7w3A1L+;^xhpbab4-V9>K}T_!m>CTuo4moImc
zlJWq0y&i|dPFa~tF6L@$YbYyoQB_r`Nmqaa2i|Ahx-8C|IjfC8U*9cSTiZxW3pfx=
zFv><;D~V~{FEnz18k)*+;)I9H%&gcgWm;Mqw{G3kG$e8>CDI@*!<F@sR%NPAtIW(S
zy1V}!J&}!fK7T>4H-sb<wf&y(^P#m(<h5WCC&HWzubaY+4i<UAYae{@KKI^xU-VKU
zu+gNIOw{04mqRqGO0BL=jcSwKAq+!c?b>I#apQUz$DPg+s;g@e0-BqfDJdyKk|e6D
zYXCu6nTyg=7eYW;S=q$7GK!0x?Ax~=Ap~`GbvT_)oK7bI`}Vz$%T<okSptl|qrSdg
zGs|aXW%KQ~UD0Lq#*JRu+D`E7v(It;dap(Tl43?Cdf5@ZInjEq$KxR@%M`1WP>0`c
zFXoX)euK%BO>J!*LqkJ6{P4q^Jb9AT)KpBSY#a_JbLPyUxY&-v;Y6?3W4GI=uYZk{
zloYbEGACiQT7HP_tc<|*>(`h!?=E_KuSH2f+Ao>PzN%KhwC3G+-vYY2zUJJyFQav2
z@bSkVF@OGDsyoM_N)oCT%FjfEwTsbJMrf8Wp?~k+-^~5@|1x$*7VLG2p%~gpOgqwI
z(wv{l2g9(AEF&X>o}MdH+&Y}RVL#OH?Cc!6y1tIxk$w2#0q(y0o(Re)8*w%Gr}EiV
ziz-@UQWVnaQ`Iu&PaW~8jCg<x7cKyTjEqdKUhO9Ey&$l45=;Jm?1*bosJpvc9f6*n
z9tH;o>FD?ecj7pA?n}D6yBQc5P+fR;%>Ngf<go)-G4aJdA@H>?75F(YE%XcE9XJH=
zJ#Y=U0t^L=)lV3o@PFWd9~c3Kfw8!d#e63luI7jY@E^b7Pkx$QZXo~w002ovPDHLk
FV1jOyTQdLv

diff --git a/gramps/plugins/webstuff/images/gramps-geo-altmap.svg b/gramps/plugins/webstuff/images/gramps-geo-altmap.svg
deleted file mode 100644
index 1b92d4c26..000000000
--- a/gramps/plugins/webstuff/images/gramps-geo-altmap.svg
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="48px"
-   height="48px"
-   id="svg3906"
-   version="1.1"
-   inkscape:version="0.47pre0 r21549"
-   sodipodi:docname="gramps-geo-altmap.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <title
-     id="title2916">gramps-geo-altmap</title>
-  <defs
-     id="defs3908">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 24 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="48 : 24 : 1"
-       inkscape:persp3d-origin="24 : 16 : 1"
-       id="perspective3914" />
-    <inkscape:perspective
-       id="perspective3891"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3668"
-       id="linearGradient6262"
-       gradientUnits="userSpaceOnUse"
-       x1="288.36801"
-       y1="423.65311"
-       x2="359.15457"
-       y2="423.65311" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3668">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3670" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3672" />
-    </linearGradient>
-    <inkscape:perspective
-       id="perspective4035"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3668-1"
-       id="linearGradient2933"
-       gradientUnits="userSpaceOnUse"
-       x1="288.36801"
-       y1="423.65311"
-       x2="359.15457"
-       y2="423.65311" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3668-1">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3670-0" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3672-6" />
-    </linearGradient>
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="7"
-     inkscape:cx="32.471316"
-     inkscape:cy="23.449345"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1078"
-     inkscape:window-height="707"
-     inkscape:window-x="260"
-     inkscape:window-y="117"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata3911">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title>gramps-geo-altmap</dc:title>
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
-        <dc:date>2009-09-07</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Serge Noiraud</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:description>used to select the proprietary map.</dc:description>
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/publicdomain/">
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Reproduction" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Distribution" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <path
-       d="m 20.680283,39.12631 c 10.271495,2.159013 8.307555,-3.123848 8.307555,-3.123848 l 5.071932,-3.401433 c 0,0 2.637138,0.21373 4.387829,0.09533 0.999233,-0.06758 2.680145,-1.046411 2.357227,-2.201648 -1.218455,-4.359011 -7.427195,-6.950657 -11.550556,-7.138293 -2.033311,-0.09253 -2.952564,0.696822 -2.952564,0.696822 -1.539345,0.969216 0.08748,3.894222 0.08748,3.894222 l -4.049411,4.019562 c -9.725562,-0.791858 -4.950964,4.931448 -4.950964,4.931448 l -9.8557157,9.159757 c 0,0 -0.087216,1.528401 2.7064097,-0.01094 l 10.440776,-6.920977 0,-6e-6 z"
-       id="path2453-3"
-       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.17199267px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-       sodipodi:nodetypes="cccssscccccccc" />
-    <g
-       id="g2893-2"
-       style="fill:#ef2929;fill-opacity:1"
-       transform="matrix(0.17199268,0,0,0.17199268,-43.009698,-36.289865)">
-      <path
-         sodipodi:nodetypes="ccccc"
-         style="fill:#ef2929;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         id="path3225-0"
-         d="M 319.44354,366.56878 292.72208,469.6616 c -2.1317,22.81794 12.07963,3.30695 12.07963,3.30695 l 50.2167,-93.83671 -35.57487,-12.56306 z" />
-    </g>
-    <path
-       d="m 26.452623,25.877284 c -0.54896,1.377469 -2.093603,2.400406 -4.197855,2.780016 -2.10425,0.37961 -4.742193,0.111221 -7.169094,-0.729399 C 12.658773,27.087284 10.472803,25.68479 9.1448974,24.116365 7.8169918,22.547941 7.3635056,20.832901 7.912465,19.455432 c 0.5489593,-1.37747 2.496221,-2.014627 4.624013,-2.098162 2.502928,-0.09826 4.54825,0.12749 6.413449,0.75797 1.865198,0.630481 3.550276,1.665691 5.332716,3.186344 1.562225,1.33278 2.718939,3.198232 2.16998,4.5757 z"
-       id="path3227-6"
-       style="fill:#ef2929;fill-opacity:1;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       sodipodi:nodetypes="csssssssc" />
-    <path
-       d="m 14.977112,10.44911 -3.106086,10.037413 c 0.969617,3.707123 8.377748,6.060349 10.998278,3.660376 l 3.733123,-8.867937"
-       id="path3233-1"
-       style="fill:#ef2929;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.04616748999999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       sodipodi:nodetypes="cccc" />
-    <path
-       d="M 14.235182,3.0499825 12.793997,6.865199 c 0.1135,5.058298 13.043976,10.582035 18.529149,7.01257 l 1.653369,-3.9908943"
-       id="path3231-5"
-       style="fill:#ef2929;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-       sodipodi:nodetypes="cccc" />
-    <path
-       d="M 32.671194,10.721426 C 32.017559,11.57151 30.3835,12.0047 28.23049,11.898659 26.077481,11.792617 23.432054,11.148649 21.041311,10.148622 18.650568,9.1485944 16.543969,7.8048294 15.316445,6.4968233 14.08892,5.1888156 13.585133,4.0179161 14.240144,3.1684081 14.893779,2.3183239 16.698302,1.7999036 18.851311,1.905944 c 2.15301,0.1060421 4.798436,0.7500102 7.189179,1.7500375 2.390743,1.0000274 4.497342,2.3437933 5.724866,3.6517994 1.227526,1.3080077 1.560849,2.5641373 0.905838,3.4136451 z"
-       id="path3229-5"
-       style="fill:#ef2929;fill-opacity:1;stroke:#000000;stroke-width:1.03195608000000005;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-       sodipodi:nodetypes="cssscsssc" />
-  </g>
-</svg>
diff --git a/gramps/plugins/webstuff/images/gramps-geo-birth.svg b/gramps/plugins/webstuff/images/gramps-geo-birth.svg
deleted file mode 100644
index e88c5000a..000000000
--- a/gramps/plugins/webstuff/images/gramps-geo-birth.svg
+++ /dev/null
@@ -1,1370 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="30"
-   inkscape:export-xdpi="30"
-   inkscape:export-filename="/home/gramps/trunk/src/images/16x16/gramps-geo-birth.png"
-   sodipodi:docname="gramps-geo-birth.svg"
-   inkscape:version="0.47pre0 r21549"
-   sodipodi:version="0.32"
-   id="svg249"
-   height="48.000000px"
-   width="48.000000px"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="TRUE"
-   version="1.1">
-  <defs
-     id="defs3">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 24 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="48 : 24 : 1"
-       inkscape:persp3d-origin="24 : 16 : 1"
-       id="perspective83" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient23434">
-      <stop
-         style="stop-color:#2e3436"
-         offset="0"
-         id="stop23436" />
-      <stop
-         style="stop-color:#555753"
-         offset="1"
-         id="stop23438" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19914">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop19916" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop19918" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19900">
-      <stop
-         style="stop-color:#888a85"
-         offset="0"
-         id="stop19902" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop19904" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient15493">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient11102">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop11104" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop11106" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4952">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4954" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4956" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4931">
-      <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
-         offset="0"
-         id="stop4933" />
-      <stop
-         style="stop-color:#888a85"
-         offset="1"
-         id="stop4935" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4919">
-      <stop
-         style="stop-color:#429eff;stop-opacity:1;"
-         offset="0"
-         id="stop4921" />
-      <stop
-         style="stop-color:#0044a7;stop-opacity:1;"
-         offset="1"
-         id="stop4923" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2980">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop2982" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop2984" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2609"
-       inkscape:collect="always">
-      <stop
-         id="stop2611"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop2613"
-         offset="1"
-         style="stop-color:#eeeeec" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2617">
-      <stop
-         id="stop2619"
-         offset="0"
-         style="stop-color:#fbfbfa;stop-opacity:1;" />
-      <stop
-         id="stop2621"
-         offset="1"
-         style="stop-color:#d3d7cf" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2690"
-       inkscape:collect="always">
-      <stop
-         id="stop2692"
-         offset="0"
-         style="stop-color:#2e3436" />
-      <stop
-         id="stop2694"
-         offset="1"
-         style="stop-color:#555753" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2698">
-      <stop
-         id="stop2700"
-         offset="0"
-         style="stop-color:#555753" />
-      <stop
-         style="stop-color:#a3a5a2;stop-opacity:1;"
-         offset="0.70238096"
-         id="stop2706" />
-      <stop
-         id="stop2702"
-         offset="1"
-         style="stop-color:#888a85" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient1409"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.294293e-16,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient1411"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(4.928248e-11,-1.686609,1.66336,-1.770202e-15,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient1421"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient1423"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient4925"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5"
-       gradientTransform="matrix(1.459545,-9.027299e-15,-5.118666e-17,1.345339,-7.403138,-10.82184)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient4937"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient4960"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient11108"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,-1.897043e-16,1.897043e-16,0.946826,0.469351,0.499261)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient17263"
-       gradientUnits="userSpaceOnUse"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29"
-       gradientTransform="translate(2,-1)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient19906"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient19920"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient23426"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,1.362626e-15,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient23432"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,-4.196543e-16,-3.619011e-17,0.34,1.860387e-15,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient23440"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient2907"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient2909"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient2911"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient2913"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient2915"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient2917"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient2919"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient2921"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient2923"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient2925"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient2927"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient2929"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient2931"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3206"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3208"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3210"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3212"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3214"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3216"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3218"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3220"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3222"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3224"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3226"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3228"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3230"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3232"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3252"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3254"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3256"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3258"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3260"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3262"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3264"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3266"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3268"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3270"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3272"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3274"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3276"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3287"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98026983,0.19766401,0.19766401,0.98026983,38.692291,-5.5216756)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3290"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98026983,0.19766401,0.19766401,0.98026983,38.692291,-5.5216756)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3297"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3054431,-0.14503035,-0.12861137,2.0447787,64.592927,-27.574036)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3300"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3320"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3322"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3054431,-0.14503035,-0.12861137,2.0447787,64.592927,-27.574036)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3324"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3326"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3328"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3330"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98026983,0.19766401,0.19766401,0.98026983,38.692291,-5.5216756)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3332"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98026983,0.19766401,0.19766401,0.98026983,38.692291,-5.5216756)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3334"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3336"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3338"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3340"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3342"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3344"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3355"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3358"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3365"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.309533,0.04558854,0.04123214,2.0097849,58.49315,-30.714192)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3368"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3259"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3261"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.309533,0.04558854,0.04123214,2.0097849,58.49315,-30.714192)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3263"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3265"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3267"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3269"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3271"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3273"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3275"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3277"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3279"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3281"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3283"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3294"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3297"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3304"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.2840124,0.3325768,0.30212738,1.9135354,50.674567,-34.252822)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3307"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="0"
-     inkscape:window-x="178"
-     inkscape:window-height="791"
-     inkscape:window-width="929"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="false"
-     showgrid="false"
-     inkscape:current-layer="layer5"
-     inkscape:cy="23.88245"
-     inkscape:cx="32.311989"
-     inkscape:zoom="10.854545"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0"
-     borderopacity="1"
-     bordercolor="#666666"
-     pagecolor="#b6b6b6"
-     id="base"
-     inkscape:showpageshadow="false"
-     showborder="true"
-     showguides="false"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="true"
-     fill="#729fcf"
-     stroke="#2e3436"
-     inkscape:window-maximized="0">
-    <sodipodi:guide
-       orientation="horizontal"
-       position="28"
-       id="guide1415" />
-    <sodipodi:guide
-       orientation="vertical"
-       position="19"
-       id="guide1417" />
-    <inkscape:grid
-       id="GridFromPre046Settings"
-       type="xygrid"
-       originx="0px"
-       originy="0px"
-       spacingx="0.5px"
-       spacingy="0.5px"
-       color="#0000ff"
-       empcolor="#0000ff"
-       opacity="0.2"
-       empopacity="0.4"
-       empspacing="2" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title>Find</dc:title>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>document</rdf:li>
-            <rdf:li>search</rdf:li>
-            <rdf:li>find</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Lapo Calamandrei</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:source />
-        <dc:contributor>
-          <cc:Agent>
-            <dc:title>Jakub Steiner</dc:title>
-          </cc:Agent>
-        </dc:contributor>
-        <dc:date>2006-04-21</dc:date>
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Reproduction" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Distribution" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/Notice" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/ShareAlike" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/SourceCode" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:groupmode="layer"
-     id="layer6"
-     inkscape:label="Shadow" />
-  <g
-     style="display:inline"
-     inkscape:groupmode="layer"
-     inkscape:label="Base"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer5"
-     inkscape:label="Text"
-     style="display:inline">
-    <g
-       transform="translate(-12.26513,47.49999)"
-       style="display:inline"
-       inkscape:label="base"
-       id="g2637" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.04705882;color:#000000;fill:url(#radialGradient3206);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path23418"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(1.0028608,-0.02269424,0.0156831,0.69306327,3.8134156,19.801095)" />
-    <g
-       id="g3309">
-      <path
-         transform="matrix(-1.0866903,0.45131417,0.46351946,1.0064111,28.322765,-9.2459198)"
-         d="m 31,18.25 a 13.5,13.75 0 1 1 -27,0 13.5,13.75 0 1 1 27,0 z"
-         sodipodi:ry="13.75"
-         sodipodi:rx="13.5"
-         sodipodi:cy="18.25"
-         sodipodi:cx="17.5"
-         id="path1425"
-         style="opacity:0.6;color:#000000;fill:url(#radialGradient3259);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
-         sodipodi:type="arc" />
-      <path
-         sodipodi:nodetypes="cscsscsc"
-         id="path4939"
-         d="m 11.714247,2.5317397 c 7.937506,-2.9626651 16.982489,0.5191617 20.406201,7.9528563 0.962747,2.090354 0.594348,4.618103 0.389319,6.753677 C 30.780361,12.363758 28.164001,12.229439 26.932162,13.237759 23.194847,16.296935 16.228058,20.560146 6.7793575,19.965655 3.4669804,19.757248 3.3929972,23.669107 2.1522268,20.696059 -0.09127673,13.596908 3.7525247,5.8383287 11.149899,2.7661198 11.339036,2.6875692 11.523747,2.6028406 11.714247,2.5317397 z"
-         style="opacity:0.5;color:#000000;fill:url(#radialGradient3304);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible" />
-      <path
-         sodipodi:type="arc"
-         style="color:#000000;fill:none;stroke:url(#radialGradient3263);stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         id="path2607"
-         sodipodi:cx="52.5"
-         sodipodi:cy="4.5"
-         sodipodi:rx="10"
-         sodipodi:ry="10"
-         d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-         transform="matrix(-1.4670322,0.60927423,0.63733892,1.3838146,91.916076,-21.194987)" />
-      <g
-         id="g2708"
-         transform="matrix(-1.4157337,0.58796943,0.61185172,1.3284758,89.814475,-79.302861)">
-        <path
-           sodipodi:nodetypes="cczzzcc"
-           id="path2682"
-           d="m 76.796351,49.768459 0.647647,3.255175 5.181173,5.213494 c 0.192503,0.193704 0.97147,0.320302 1.942939,-0.65625 0.97147,-0.976552 0.895574,-1.70388 0.647647,-1.953105 l -5.181173,-5.208279 -3.238233,-0.651035 z"
-           style="color:#000000;fill:url(#linearGradient3265);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3267);stroke-width:0.67653471;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-        <path
-           sodipodi:nodetypes="csccc"
-           id="path2687"
-           d="m 79.567301,51.320041 c -0.003,0.0112 0.294101,0.324318 -0.245291,0.864982 -0.539399,0.540663 -1.007144,0.373988 -0.993486,0.360259 l -0.269149,-1.521577 1.507926,0.296336 z"
-           style="opacity:0.19215686;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999964;marker:none;visibility:visible;display:inline;overflow:visible" />
-      </g>
-      <path
-         style="color:#000000;fill:none;stroke:url(#linearGradient3297);stroke-width:0.97195268;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         d="m 10.873637,33.562267 0.704333,3.005757 -3.8693881,9.384635 c -0.1902944,0.46154 -0.7694377,0.544068 -1.9976635,0.092 -1.2282284,-0.45206 -1.6351962,-0.76466 -1.3958441,-1.34461 l 3.871373,-9.380322 2.6871897,-1.75746 z"
-         id="path17267"
-         sodipodi:nodetypes="cczzzcc" />
-      <path
-         sodipodi:nodetypes="cccccsssccccc"
-         id="path19908"
-         d="m 11.493817,31.463571 c 0.273091,-0.02327 0.516911,0.15628 0.558257,0.411074 l 1.059484,4.703394 c 0.01332,0.08891 4.94e-4,0.179769 -0.03712,0.262696 l -4.1068203,9.96471 C 8.7827275,47.250222 8.3304309,47.545624 7.6857263,47.684018 7.0410207,47.822412 6.1768744,47.757557 5.1152384,47.366807 4.0623656,46.979285 3.3987797,46.516966 3.0160546,46.013112 2.6333291,45.509257 2.5123532,44.952706 2.6947747,44.514502 l 4.170137,-9.94156 c 0.041413,-0.09682 0.1142759,-0.179037 0.2080896,-0.234788 l 4.1553657,-2.764339 c 0.0759,-0.05949 0.167922,-0.09771 0.265448,-0.110252 z"
-         style="opacity:0.15294118;color:#000000;fill:url(#linearGradient3294);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.67653471;marker:none;visibility:visible;display:inline;overflow:visible" />
-      <path
-         sodipodi:type="arc"
-         style="color:#000000;fill:none;stroke:url(#radialGradient3273);stroke-width:0.60606074;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         id="path2605"
-         sodipodi:cx="52.5"
-         sodipodi:cy="4.5"
-         sodipodi:rx="10"
-         sodipodi:ry="10"
-         d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-         transform="matrix(-1.5128769,0.62831404,0.65725577,1.4270588,94.233291,-22.389175)" />
-      <path
-         sodipodi:type="arc"
-         style="color:#000000;fill:none;stroke:url(#linearGradient3275);stroke-width:0.57142824;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         id="path2599"
-         sodipodi:cx="52.5"
-         sodipodi:cy="4.5"
-         sodipodi:rx="10"
-         sodipodi:ry="10"
-         d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-         transform="matrix(-1.6045665,0.6663937,0.69708944,1.5135472,98.867744,-24.777554)" />
-      <path
-         sodipodi:type="arc"
-         style="color:#000000;fill:none;stroke:url(#linearGradient3277);stroke-width:0.68814939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         id="path4927"
-         sodipodi:cx="52.5"
-         sodipodi:cy="4.5"
-         sodipodi:rx="10"
-         sodipodi:ry="10"
-         d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-         transform="matrix(-1.3324064,0.55336266,0.57885311,1.256828,85.111411,-17.688195)" />
-      <path
-         transform="matrix(-1.2147411,0.50449504,0.52773334,1.1458348,25.96978,-4.0482826)"
-         d="m 22.1875,12.9375 a 9.8125,9.8125 0 1 1 -19.625,0 9.8125,9.8125 0 1 1 19.625,0 z"
-         sodipodi:ry="9.8125"
-         sodipodi:rx="9.8125"
-         sodipodi:cy="12.9375"
-         sodipodi:cx="12.375"
-         id="path11092"
-         style="opacity:0.16078431;color:#000000;fill:url(#radialGradient3279);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-         sodipodi:type="arc" />
-      <g
-         transform="matrix(-0.99911273,9.3164654e-5,0.01345994,0.94553095,38.490539,-0.94796776)"
-         style="opacity:0.76078431"
-         id="g1399">
-        <path
-           style="color:#000000;fill:url(#linearGradient3307);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-           d="m 18.5,10.5 0,6 -6,0 0,5 6,0 0,6 5,0 0,-6 6,0 0,-5 -6,0 0,-6 -5,0 z"
-           id="rect8466"
-           sodipodi:nodetypes="ccccccccccccc" />
-        <path
-           style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-           d="m 19.5,11.5 0,6 -6,0 0,3 6,0 0,6 3,0 0,-6 6,0 0,-3 -6,0 0,-6 -3,0 z"
-           id="rect12861"
-           sodipodi:nodetypes="ccccccccccccc" />
-      </g>
-      <path
-         transform="matrix(-1.4540417,0.60387911,0.47985407,1.0418775,48.518503,-11.911116)"
-         d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-         sodipodi:ry="4.5078058"
-         sodipodi:rx="13.258252"
-         sodipodi:cy="30.145554"
-         sodipodi:cx="28.284271"
-         id="path2970"
-         style="opacity:0.072;color:#000000;fill:url(#radialGradient3283);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-         sodipodi:type="arc" />
-    </g>
-  </g>
-</svg>
diff --git a/gramps/plugins/webstuff/images/gramps-geo-death.svg b/gramps/plugins/webstuff/images/gramps-geo-death.svg
deleted file mode 100644
index 37c9fdc71..000000000
--- a/gramps/plugins/webstuff/images/gramps-geo-death.svg
+++ /dev/null
@@ -1,1438 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="90"
-   inkscape:export-xdpi="90"
-   inkscape:export-filename="/home/gramps/trunk/src/images/48x48/gramps-geo-death.png"
-   sodipodi:docname="gramps-geo-death.svg"
-   inkscape:version="0.47pre0 r21549"
-   sodipodi:version="0.32"
-   id="svg249"
-   height="48.000000px"
-   width="48.000000px"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="TRUE"
-   version="1.1">
-  <defs
-     id="defs3">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 24 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="48 : 24 : 1"
-       inkscape:persp3d-origin="24 : 16 : 1"
-       id="perspective83" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient23434">
-      <stop
-         style="stop-color:#2e3436"
-         offset="0"
-         id="stop23436" />
-      <stop
-         style="stop-color:#555753"
-         offset="1"
-         id="stop23438" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19914">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop19916" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop19918" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19900">
-      <stop
-         style="stop-color:#888a85"
-         offset="0"
-         id="stop19902" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop19904" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient15493">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient11102">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop11104" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop11106" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4952">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4954" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4956" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4931">
-      <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
-         offset="0"
-         id="stop4933" />
-      <stop
-         style="stop-color:#888a85"
-         offset="1"
-         id="stop4935" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4919">
-      <stop
-         style="stop-color:#429eff;stop-opacity:1;"
-         offset="0"
-         id="stop4921" />
-      <stop
-         style="stop-color:#0044a7;stop-opacity:1;"
-         offset="1"
-         id="stop4923" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2980">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop2982" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop2984" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2609"
-       inkscape:collect="always">
-      <stop
-         id="stop2611"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop2613"
-         offset="1"
-         style="stop-color:#eeeeec" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2617">
-      <stop
-         id="stop2619"
-         offset="0"
-         style="stop-color:#fbfbfa;stop-opacity:1;" />
-      <stop
-         id="stop2621"
-         offset="1"
-         style="stop-color:#d3d7cf" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2690"
-       inkscape:collect="always">
-      <stop
-         id="stop2692"
-         offset="0"
-         style="stop-color:#2e3436" />
-      <stop
-         id="stop2694"
-         offset="1"
-         style="stop-color:#555753" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2698">
-      <stop
-         id="stop2700"
-         offset="0"
-         style="stop-color:#555753" />
-      <stop
-         style="stop-color:#a3a5a2;stop-opacity:1;"
-         offset="0.70238096"
-         id="stop2706" />
-      <stop
-         id="stop2702"
-         offset="1"
-         style="stop-color:#888a85" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient1409"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.294293e-16,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient1411"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(4.928248e-11,-1.686609,1.66336,-1.770202e-15,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient1421"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient1423"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient4925"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5"
-       gradientTransform="matrix(1.459545,-9.027299e-15,-5.118666e-17,1.345339,-7.403138,-10.82184)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient4937"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient4960"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient11108"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,-1.897043e-16,1.897043e-16,0.946826,0.469351,0.499261)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient17263"
-       gradientUnits="userSpaceOnUse"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29"
-       gradientTransform="translate(2,-1)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient19906"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient19920"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient23426"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,1.362626e-15,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient23432"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,-4.196543e-16,-3.619011e-17,0.34,1.860387e-15,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient23440"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient2913"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98079911,0.19502081,0.19502081,0.98079911,39.379173,-5.6628154)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient2917"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98079911,0.19502081,0.19502081,0.98079911,39.379173,-5.6628154)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient2925"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3050437,-0.15124454,-0.13412295,2.0444246,65.339161,-27.645276)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient2928"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient2930"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient2932"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient2934"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient2936"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient2938"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient2940"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient2942"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient2944"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient2946"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient2948"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3389"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3391"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3050437,-0.15124454,-0.13412295,2.0444246,65.339161,-27.645276)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3393"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3395"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3397"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3399"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3401"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98079911,0.19502081,0.19502081,0.98079911,39.379173,-5.6628154)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3403"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.98079911,0.19502081,0.19502081,0.98079911,39.379173,-5.6628154)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3405"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3407"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3409"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3411"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3413"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3415"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3426"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.27426562,0.27426562,0.96165399,36.807125,-7.0700945)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3429"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.27426562,0.27426562,0.96165399,36.807125,-7.0700945)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3437"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3097037,0.03701987,0.03285533,2.048556,60.890221,-31.094126)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3440"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3460"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3462"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3097037,0.03701987,0.03285533,2.048556,60.890221,-31.094126)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3464"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3466"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3468"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3470"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.27426562,0.27426562,0.96165399,36.807125,-7.0700945)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3472"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.27426562,0.27426562,0.96165399,36.807125,-7.0700945)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3474"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3476"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3478"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3480"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3482"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3484"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3336"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.26929861,0.27426562,0.94423823,34.774193,-7.0269589)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3339"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.96165399,0.26929861,0.27426562,0.94423823,34.774193,-7.0269589)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3346"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.3097037,0.03634943,0.03285533,2.0114562,58.857289,-30.61591)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <inkscape:perspective
-       id="perspective3357"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493-0"
-       id="linearGradient3482-1"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <linearGradient
-       id="linearGradient15493-0">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495-6" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497-3" />
-    </linearGradient>
-    <inkscape:perspective
-       id="perspective3468"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919-2"
-       id="radialGradient3259"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <linearGradient
-       id="linearGradient4919-2">
-      <stop
-         style="stop-color:#429eff;stop-opacity:1;"
-         offset="0"
-         id="stop4921-0" />
-      <stop
-         style="stop-color:#0044a7;stop-opacity:1;"
-         offset="1"
-         id="stop4923-6" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952-1"
-       id="radialGradient3304"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.2840124,0.3325768,0.30212738,1.9135354,50.674567,-34.252822)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924616" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4952-1">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4954-5" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4956-5" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617-4"
-       id="radialGradient3263"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       id="linearGradient2617-4">
-      <stop
-         id="stop2619-7"
-         offset="0"
-         style="stop-color:#fbfbfa;stop-opacity:1;" />
-      <stop
-         id="stop2621-6"
-         offset="1"
-         style="stop-color:#d3d7cf" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698-5"
-       id="linearGradient3265"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       id="linearGradient2698-5">
-      <stop
-         id="stop2700-6"
-         offset="0"
-         style="stop-color:#555753" />
-      <stop
-         style="stop-color:#a3a5a2;stop-opacity:1;"
-         offset="0.70238096"
-         id="stop2706-9" />
-      <stop
-         id="stop2702-3"
-         offset="1"
-         style="stop-color:#888a85" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690-7"
-       id="linearGradient3267"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       id="linearGradient2690-7"
-       inkscape:collect="always">
-      <stop
-         id="stop2692-4"
-         offset="0"
-         style="stop-color:#2e3436" />
-      <stop
-         id="stop2694-5"
-         offset="1"
-         style="stop-color:#555753" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900-2"
-       id="linearGradient3297"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19900-2">
-      <stop
-         style="stop-color:#888a85"
-         offset="0"
-         id="stop19902-5" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop19904-4" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914-7"
-       id="linearGradient3294"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19914-7">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop19916-4" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop19918-4" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609-3"
-       id="radialGradient3273"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       id="linearGradient2609-3"
-       inkscape:collect="always">
-      <stop
-         id="stop2611-0"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop2613-7"
-         offset="1"
-         style="stop-color:#eeeeec" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434-8"
-       id="linearGradient3275"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient23434-8">
-      <stop
-         style="stop-color:#2e3436"
-         offset="0"
-         id="stop23436-6" />
-      <stop
-         style="stop-color:#555753"
-         offset="1"
-         id="stop23438-8" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931-8"
-       id="linearGradient3277"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4931-8">
-      <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
-         offset="0"
-         id="stop4933-4" />
-      <stop
-         style="stop-color:#888a85"
-         offset="1"
-         id="stop4935-3" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102-1"
-       id="radialGradient3279"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient11102-1">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop11104-4" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop11106-9" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493-2"
-       id="linearGradient3307"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <linearGradient
-       id="linearGradient15493-2">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495-0" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497-6" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980-8"
-       id="radialGradient3283"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2980-8">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop2982-9" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop2984-2" />
-    </linearGradient>
-    <radialGradient
-       r="13.258252"
-       fy="30.145554"
-       fx="28.284271"
-       cy="30.145554"
-       cx="28.284271"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient3542"
-       xlink:href="#linearGradient2980-8"
-       inkscape:collect="always" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914-7"
-       id="linearGradient3702"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,30.222013,-8.4833955)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900-2"
-       id="linearGradient3705"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,30.222013,-8.4833955)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952-1"
-       id="radialGradient3712"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.2840124,0.3325768,0.30212738,1.9135354,50.926714,-34.080091)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924616" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="0"
-     inkscape:window-x="510"
-     inkscape:window-height="791"
-     inkscape:window-width="1078"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="false"
-     showgrid="false"
-     inkscape:current-layer="layer5"
-     inkscape:cy="23.409659"
-     inkscape:cx="25.310324"
-     inkscape:zoom="11.313708"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0"
-     borderopacity="1"
-     bordercolor="#666666"
-     pagecolor="#b6b6b6"
-     id="base"
-     inkscape:showpageshadow="false"
-     showborder="true"
-     showguides="false"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="true"
-     fill="#729fcf"
-     stroke="#2e3436"
-     inkscape:window-maximized="0">
-    <sodipodi:guide
-       orientation="horizontal"
-       position="28"
-       id="guide1415" />
-    <sodipodi:guide
-       orientation="vertical"
-       position="19"
-       id="guide1417" />
-    <inkscape:grid
-       id="GridFromPre046Settings"
-       type="xygrid"
-       originx="0px"
-       originy="0px"
-       spacingx="0.5px"
-       spacingy="0.5px"
-       color="#0000ff"
-       empcolor="#0000ff"
-       opacity="0.2"
-       empopacity="0.4"
-       empspacing="2" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title>Find</dc:title>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>document</rdf:li>
-            <rdf:li>search</rdf:li>
-            <rdf:li>find</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Lapo Calamandrei</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:source />
-        <dc:contributor>
-          <cc:Agent>
-            <dc:title>Jakub Steiner</dc:title>
-          </cc:Agent>
-        </dc:contributor>
-        <dc:date>2006-04-21</dc:date>
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Reproduction" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Distribution" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/Notice" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/ShareAlike" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/SourceCode" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:groupmode="layer"
-     id="layer6"
-     inkscape:label="Shadow" />
-  <g
-     style="display:inline"
-     inkscape:groupmode="layer"
-     inkscape:label="Base"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer5"
-     inkscape:label="Text"
-     style="display:inline">
-    <g
-       transform="translate(-12.26513,47.49999)"
-       style="display:inline"
-       inkscape:label="base"
-       id="g2637" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.04705882;color:#000000;fill:url(#radialGradient3395);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path23418"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(-0.90142492,0.44008851,0.30413963,0.62296208,29.61965,13.623553)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.072;color:#000000;fill:url(#radialGradient3484);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path2970"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(-1.5250217,0.42706236,0.33039244,1.1374709,53.608655,-7.89289)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.6;color:#000000;fill:url(#radialGradient3259);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path1425"
-       sodipodi:cx="17.5"
-       sodipodi:cy="18.25"
-       sodipodi:rx="13.5"
-       sodipodi:ry="13.75"
-       d="m 31,18.25 a 13.5,13.75 0 1 1 -27,0 13.5,13.75 0 1 1 27,0 z"
-       transform="matrix(-1.0866903,0.45131417,0.46351946,1.0064111,28.574912,-9.0731886)" />
-    <path
-       style="opacity:0.5;color:#000000;fill:url(#radialGradient3712);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
-       d="m 11.966394,2.7044709 c 7.937506,-2.96266512 16.982489,0.5191617 20.406201,7.9528561 0.962747,2.090354 0.594348,4.618103 0.389319,6.753677 C 31.032508,12.536489 28.416148,12.40217 27.184309,13.41049 23.446994,16.469666 16.480205,20.732877 7.0315048,20.138386 3.7191277,19.929979 3.6451445,23.841838 2.4043741,20.86879 0.16087055,13.769639 4.004672,6.0110599 11.402046,2.938851 11.591183,2.8603004 11.775894,2.7755718 11.966394,2.7044709 z"
-       id="path4939"
-       sodipodi:nodetypes="cscsscsc" />
-    <path
-       transform="matrix(-1.4670322,0.60927423,0.63733892,1.3838146,92.168223,-21.022256)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2607"
-       style="color:#000000;fill:none;stroke:url(#radialGradient3263);stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <g
-       transform="matrix(-1.4157337,0.58796943,0.61185172,1.3284758,90.066622,-79.13013)"
-       id="g2708">
-      <path
-         style="color:#000000;fill:url(#linearGradient3265);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3267);stroke-width:0.67653471;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         d="m 76.796351,49.768459 0.647647,3.255175 5.181173,5.213494 c 0.192503,0.193704 0.97147,0.320302 1.942939,-0.65625 0.97147,-0.976552 0.895574,-1.70388 0.647647,-1.953105 l -5.181173,-5.208279 -3.238233,-0.651035 z"
-         id="path2682"
-         sodipodi:nodetypes="cczzzcc" />
-      <path
-         style="opacity:0.19215686;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999964;marker:none;visibility:visible;display:inline;overflow:visible"
-         d="m 79.567301,51.320041 c -0.003,0.0112 0.294101,0.324318 -0.245291,0.864982 -0.539399,0.540663 -1.007144,0.373988 -0.993486,0.360259 l -0.269149,-1.521577 1.507926,0.296336 z"
-         id="path2687"
-         sodipodi:nodetypes="csccc" />
-    </g>
-    <path
-       sodipodi:nodetypes="cczzzcc"
-       id="path17267"
-       d="m 11.125784,33.734998 0.704333,3.005757 -3.8693878,9.384635 C 7.7704348,46.58693 7.1912915,46.669458 5.9630657,46.21739 4.7348373,45.76533 4.3278695,45.45273 4.5672216,44.87278 l 3.871373,-9.380322 2.6871894,-1.75746 z"
-       style="color:#000000;fill:none;stroke:url(#linearGradient3705);stroke-width:0.97195268;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-    <path
-       style="opacity:0.15294118;color:#000000;fill:url(#linearGradient3702);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.67653471;marker:none;visibility:visible;display:inline;overflow:visible"
-       d="m 11.745964,31.636302 c 0.273091,-0.02327 0.516911,0.15628 0.558257,0.411074 l 1.059484,4.703394 c 0.01332,0.08891 4.94e-4,0.179769 -0.03712,0.262696 l -4.10682,9.96471 C 9.0348748,47.422953 8.5825782,47.718355 7.9378736,47.856749 7.293168,47.995143 6.4290217,47.930288 5.3673857,47.539538 4.3145129,47.152016 3.650927,46.689697 3.2682019,46.185843 2.8854764,45.681988 2.7645005,45.125437 2.946922,44.687233 l 4.170137,-9.94156 c 0.041413,-0.09682 0.1142759,-0.179037 0.2080896,-0.234788 l 4.1553654,-2.764339 c 0.0759,-0.05949 0.167922,-0.09771 0.265448,-0.110252 z"
-       id="path19908"
-       sodipodi:nodetypes="cccccsssccccc" />
-    <path
-       transform="matrix(-1.5128769,0.62831404,0.65725577,1.4270588,94.485438,-22.216444)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2605"
-       style="color:#000000;fill:none;stroke:url(#radialGradient3273);stroke-width:0.60606074;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       transform="matrix(-1.6045665,0.6663937,0.69708944,1.5135472,99.119891,-24.604823)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2599"
-       style="color:#000000;fill:none;stroke:url(#linearGradient3275);stroke-width:0.57142824;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       transform="matrix(-1.3324064,0.55336266,0.57885311,1.256828,85.363558,-17.515464)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path4927"
-       style="color:#000000;fill:none;stroke:url(#linearGradient3277);stroke-width:0.68814939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.16078431;color:#000000;fill:url(#radialGradient3279);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path11092"
-       sodipodi:cx="12.375"
-       sodipodi:cy="12.9375"
-       sodipodi:rx="9.8125"
-       sodipodi:ry="9.8125"
-       d="m 22.1875,12.9375 a 9.8125,9.8125 0 1 1 -19.625,0 9.8125,9.8125 0 1 1 19.625,0 z"
-       transform="matrix(-1.2147411,0.50449504,0.52773334,1.1458348,26.221927,-3.8755514)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.072;color:#000000;fill:url(#radialGradient3542);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path2970-9"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(-1.4540417,0.60387911,0.47985407,1.0418775,48.77065,-11.738385)" />
-    <g
-       id="g1399"
-       style="opacity:0.76078431;display:inline"
-       transform="matrix(-0.99999986,-5.5191206e-4,-5.6209166e-4,0.98188965,39.0419,-1.4034595)">
-      <path
-         sodipodi:nodetypes="ccccc"
-         id="rect8466"
-         d="m 12.5,16.5 0,5 17,0 0,-5 -17,0 z"
-         style="color:#000000;fill:url(#linearGradient3482-1);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-      <path
-         sodipodi:nodetypes="ccccc"
-         id="rect12861"
-         d="m 13.5,17.5 0,3 15,0 0,-3 -15,0 z"
-         style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-    </g>
-  </g>
-</svg>
diff --git a/gramps/plugins/webstuff/images/gramps-geo-mainmap.svg b/gramps/plugins/webstuff/images/gramps-geo-mainmap.svg
deleted file mode 100644
index 09814069c..000000000
--- a/gramps/plugins/webstuff/images/gramps-geo-mainmap.svg
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="48px"
-   height="48px"
-   id="svg2885"
-   version="1.1"
-   inkscape:version="0.47pre0 r21549"
-   sodipodi:docname="gramps-geo-mainmap.svg"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape">
-  <title
-     id="title2826">gramps-geo-mainmap</title>
-  <defs
-     id="defs2887">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 24 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="48 : 24 : 1"
-       inkscape:persp3d-origin="24 : 16 : 1"
-       id="perspective2893" />
-    <inkscape:perspective
-       id="perspective2870"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3668"
-       id="linearGradient3678"
-       x1="288.36801"
-       y1="423.65311"
-       x2="359.15457"
-       y2="423.65311"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3668">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop3670" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop3672" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3668"
-       id="linearGradient2933"
-       gradientUnits="userSpaceOnUse"
-       x1="288.36801"
-       y1="423.65311"
-       x2="359.15457"
-       y2="423.65311" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="7"
-     inkscape:cx="24"
-     inkscape:cy="35.428571"
-     inkscape:current-layer="layer1"
-     showgrid="true"
-     inkscape:grid-bbox="true"
-     inkscape:document-units="px"
-     inkscape:window-width="1078"
-     inkscape:window-height="778"
-     inkscape:window-x="49"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0" />
-  <metadata
-     id="metadata2890">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title>gramps-geo-mainmap</dc:title>
-        <dc:date>2009-09-07</dc:date>
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Serge Noiraud</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:description>used to select the openstreetmap map.</dc:description>
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/publicdomain/">
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Reproduction" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#Distribution" />
-        <cc:permits
-           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     id="layer1"
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer">
-    <g
-       id="g2924"
-       transform="matrix(0.17199268,0,0,0.17199268,22.498415,21.978915)">
-      <path
-         sodipodi:nodetypes="cccssscccccccc"
-         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-         id="path2453"
-         d="M -7.3280437,99.688239 C 52.392489,112.24117 40.973749,81.525559 40.973749,81.525559 l 29.48923,-19.77662 c 0,0 15.33285,1.24267 25.51172,0.55428 5.809741,-0.39292 15.582901,-6.08404 13.705391,-12.80082 C 102.59575,24.158229 66.496889,9.0898787 42.522839,7.9989287 c -11.82208,-0.53797 -17.1668,4.0514603 -17.1668,4.0514603 -8.95006,5.63522 0.50864,22.64179 0.50864,22.64179 L 2.3205863,58.062719 c -56.5463703,-4.60402 -28.7859003,28.67243 -28.7859003,28.67243 l -57.30311,53.256671 c 0,0 -0.50709,8.88643 15.73561,-0.0636 l 60.7047703,-40.239951 0,-3e-5 z" />
-      <g
-         transform="translate(-377.63439,-338.79656)"
-         style="fill:url(#linearGradient2933);fill-opacity:1"
-         id="g2893">
-        <path
-           d="M 319.44354,366.56878 292.72208,469.6616 c -2.1317,22.81794 12.07963,3.30695 12.07963,3.30695 l 50.2167,-93.83671 -35.57487,-12.56306 z"
-           id="path3225"
-           style="fill:#8ae234;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-           sodipodi:nodetypes="ccccc" />
-      </g>
-      <path
-         sodipodi:nodetypes="csssssssc"
-         style="fill:#8ae234;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         id="path3227"
-         d="m 26.233499,22.655739 c -3.19176,8.00888 -12.17263,13.95644 -24.4071727,16.16357 -12.2345303,2.20713 -27.5720603,0.64666 -41.6825503,-4.24087 -14.11049,-4.88752 -26.82016,-13.0419 -34.54087,-22.16104 -7.72071,-9.1191303 -10.35737,-19.0907203 -7.16561,-27.0996 3.19176,-8.008884 14.51353,-11.713444 26.88494,-12.199134 14.55253,-0.57132 26.44444,0.74125 37.28908,4.40699 10.8446403,3.665744 20.6420203,9.684664 31.005483,18.5260437 9.08309,7.74905 15.80846,18.5951603 12.6167,26.6040403 z" />
-      <path
-         sodipodi:nodetypes="cccc"
-         style="fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.08262777;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         id="path3233"
-         d="m -40.487424,-67.046765 -18.05941,58.3595337 C -52.909284,12.866729 -9.8369237,26.548859 5.3993663,12.594929 L 27.104489,-38.965035" />
-      <path
-         sodipodi:nodetypes="cccc"
-         style="fill:#8ae234;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-         id="path3231"
-         d="m -44.801154,-110.06678 -8.37934,22.182435 c 0.65991,29.40996 75.840293,61.52608 107.732193,40.77249 l 9.61302,-23.20386" />
-      <path
-         sodipodi:nodetypes="cssscsssc"
-         style="fill:#8ae234;fill-opacity:1;stroke:#000000;stroke-width:6;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
-         id="path3229"
-         d="m 62.389519,-65.463465 c -3.80036,4.94256 -13.30111,7.46121 -25.81914,6.84467 -12.51803,-0.61655 -27.8990727,-4.36071 -41.7993327,-10.17507 -13.9002603,-5.81436 -26.1484503,-13.62728 -33.2855203,-21.23229 -7.13708,-7.60502 -10.0662,-14.412865 -6.25783,-19.352075 3.80036,-4.94256 14.29222,-7.95676 26.81025,-7.34022 12.5180303,0.61655 27.8990703,4.36071 41.799333,10.17507 13.90026,5.81436 26.14845,13.627285 33.28552,21.232295 7.13708,7.60502 9.07509,14.90841 5.26672,19.84762 z" />
-    </g>
-  </g>
-</svg>
diff --git a/gramps/plugins/webstuff/images/gramps-geo-marriage.svg b/gramps/plugins/webstuff/images/gramps-geo-marriage.svg
deleted file mode 100644
index 2087e3a62..000000000
--- a/gramps/plugins/webstuff/images/gramps-geo-marriage.svg
+++ /dev/null
@@ -1,1052 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   inkscape:export-ydpi="30"
-   inkscape:export-xdpi="30"
-   inkscape:export-filename="/home/gramps/trunk/src/images/16x16/gramps-geo-marriage.png"
-   sodipodi:docname="gramps-geo-marriage.svg"
-   inkscape:version="0.47pre0 r21549"
-   sodipodi:version="0.32"
-   id="svg249"
-   height="48.000000px"
-   width="48.000000px"
-   inkscape:output_extension="org.inkscape.output.svg.inkscape"
-   sodipodi:modified="TRUE"
-   version="1.1">
-  <defs
-     id="defs3">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 24 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="48 : 24 : 1"
-       inkscape:persp3d-origin="24 : 16 : 1"
-       id="perspective83" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient23434">
-      <stop
-         style="stop-color:#2e3436"
-         offset="0"
-         id="stop23436" />
-      <stop
-         style="stop-color:#555753"
-         offset="1"
-         id="stop23438" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19914">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop19916" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop19918" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19900">
-      <stop
-         style="stop-color:#888a85"
-         offset="0"
-         id="stop19902" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop19904" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient15493">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient11102">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop11104" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop11106" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4952">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4954" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4956" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4931">
-      <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
-         offset="0"
-         id="stop4933" />
-      <stop
-         style="stop-color:#888a85"
-         offset="1"
-         id="stop4935" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient4919">
-      <stop
-         style="stop-color:#429eff;stop-opacity:1;"
-         offset="0"
-         id="stop4921" />
-      <stop
-         style="stop-color:#0044a7;stop-opacity:1;"
-         offset="1"
-         id="stop4923" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2980">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop2982" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop2984" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2609"
-       inkscape:collect="always">
-      <stop
-         id="stop2611"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop2613"
-         offset="1"
-         style="stop-color:#eeeeec" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2617">
-      <stop
-         id="stop2619"
-         offset="0"
-         style="stop-color:#fbfbfa;stop-opacity:1;" />
-      <stop
-         id="stop2621"
-         offset="1"
-         style="stop-color:#d3d7cf" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2690"
-       inkscape:collect="always">
-      <stop
-         id="stop2692"
-         offset="0"
-         style="stop-color:#2e3436" />
-      <stop
-         id="stop2694"
-         offset="1"
-         style="stop-color:#555753" />
-    </linearGradient>
-    <linearGradient
-       id="linearGradient2698">
-      <stop
-         id="stop2700"
-         offset="0"
-         style="stop-color:#555753" />
-      <stop
-         style="stop-color:#a3a5a2;stop-opacity:1;"
-         offset="0.70238096"
-         id="stop2706" />
-      <stop
-         id="stop2702"
-         offset="1"
-         style="stop-color:#888a85" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient1409"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-3.294293e-16,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient1411"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(4.928248e-11,-1.686609,1.66336,-1.770202e-15,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient1421"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient1423"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient4925"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5"
-       gradientTransform="matrix(1.459545,-9.027299e-15,-5.118666e-17,1.345339,-7.403138,-10.82184)"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient4937"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient4960"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615"
-       gradientTransform="matrix(2.231289,-0.597872,0.530253,1.979013,-30.74857,-16.49764)"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient11108"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,-1.897043e-16,1.897043e-16,0.946826,0.469351,0.499261)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient17263"
-       gradientUnits="userSpaceOnUse"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29"
-       gradientTransform="translate(2,-1)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient19906"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient19920"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(-1,0)" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient23426"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,1.362626e-15,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient23440"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989"
-       gradientUnits="userSpaceOnUse" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3206"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919"
-       id="radialGradient3320"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617"
-       id="radialGradient3324"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698"
-       id="linearGradient3326"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690"
-       id="linearGradient3328"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609"
-       id="radialGradient3334"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434"
-       id="linearGradient3336"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931"
-       id="linearGradient3338"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102"
-       id="radialGradient3340"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980"
-       id="radialGradient3344"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914"
-       id="linearGradient3355"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900"
-       id="linearGradient3358"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.9605244,0.27295083,0.27819578,0.94241516,34.508497,-7.0466694)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952"
-       id="radialGradient3365"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.309533,0.04558854,0.04123214,2.0097849,58.49315,-30.714192)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924615" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493"
-       id="linearGradient3368"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <inkscape:perspective
-       id="perspective3921"
-       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
-       inkscape:vp_z="1 : 0.5 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : 0.5 : 1"
-       sodipodi:type="inkscape:persp3d" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4919-5"
-       id="radialGradient3259"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1.459545,0,0,1.345339,-7.403138,-10.82184)"
-       cx="17.062258"
-       cy="28.851427"
-       fx="17.062258"
-       fy="28.851427"
-       r="13.5" />
-    <linearGradient
-       id="linearGradient4919-5">
-      <stop
-         style="stop-color:#429eff;stop-opacity:1;"
-         offset="0"
-         id="stop4921-0" />
-      <stop
-         style="stop-color:#0044a7;stop-opacity:1;"
-         offset="1"
-         id="stop4923-4" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952-8"
-       id="radialGradient3304"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.2840124,0.3325768,0.30212738,1.9135354,50.674567,-34.252822)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924616" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4952-8">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop4954-7" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop4956-1" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2617-7"
-       id="radialGradient3263"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,-1.686609,1.66336,0,41.65431,111.7396)"
-       cx="59.787472"
-       cy="10.901535"
-       fx="59.787472"
-       fy="10.901535"
-       r="10.55559" />
-    <linearGradient
-       id="linearGradient2617-7">
-      <stop
-         id="stop2619-2"
-         offset="0"
-         style="stop-color:#fbfbfa;stop-opacity:1;" />
-      <stop
-         id="stop2621-7"
-         offset="1"
-         style="stop-color:#d3d7cf" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2698-2"
-       id="linearGradient3265"
-       gradientUnits="userSpaceOnUse"
-       x1="81.332451"
-       y1="55.106758"
-       x2="82.919647"
-       y2="53.511261" />
-    <linearGradient
-       id="linearGradient2698-2">
-      <stop
-         id="stop2700-2"
-         offset="0"
-         style="stop-color:#555753" />
-      <stop
-         style="stop-color:#a3a5a2;stop-opacity:1;"
-         offset="0.70238096"
-         id="stop2706-6" />
-      <stop
-         id="stop2702-1"
-         offset="1"
-         style="stop-color:#888a85" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2690-0"
-       id="linearGradient3267"
-       gradientUnits="userSpaceOnUse"
-       x1="81.096306"
-       y1="57.148193"
-       x2="83.629295"
-       y2="54.615208" />
-    <linearGradient
-       id="linearGradient2690-0"
-       inkscape:collect="always">
-      <stop
-         id="stop2692-6"
-         offset="0"
-         style="stop-color:#2e3436" />
-      <stop
-         id="stop2694-1"
-         offset="1"
-         style="stop-color:#555753" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900-5"
-       id="linearGradient3297"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19900-5">
-      <stop
-         style="stop-color:#888a85"
-         offset="0"
-         id="stop19902-9" />
-      <stop
-         style="stop-color:#d3d7cf"
-         offset="1"
-         id="stop19904-4" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914-9"
-       id="linearGradient3294"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,29.969866,-8.6561267)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient19914-9">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop19916-0" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop19918-9" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2609-1"
-       id="radialGradient3273"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0,1.143443,-1.247217,-1.248581e-6,41.735,-54.25682)"
-       cx="45.094624"
-       cy="-2.6936908"
-       fx="45.094624"
-       fy="-2.6936908"
-       r="10.498367" />
-    <linearGradient
-       id="linearGradient2609-1"
-       inkscape:collect="always">
-      <stop
-         id="stop2611-7"
-         offset="0"
-         style="stop-color:#ffffff;stop-opacity:1" />
-      <stop
-         id="stop2613-7"
-         offset="1"
-         style="stop-color:#eeeeec" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient23434-1"
-       id="linearGradient3275"
-       gradientUnits="userSpaceOnUse"
-       x1="55.878288"
-       y1="12.472493"
-       x2="52.5"
-       y2="-4.6213989" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient23434-1">
-      <stop
-         style="stop-color:#2e3436"
-         offset="0"
-         id="stop23436-1" />
-      <stop
-         style="stop-color:#555753"
-         offset="1"
-         id="stop23438-5" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4931-9"
-       id="linearGradient3277"
-       gradientUnits="userSpaceOnUse"
-       x1="54.1129"
-       y1="12.846775"
-       x2="50.079948"
-       y2="-3.8813655" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient4931-9">
-      <stop
-         style="stop-color:#babdb6;stop-opacity:1;"
-         offset="0"
-         id="stop4933-7" />
-      <stop
-         style="stop-color:#888a85"
-         offset="1"
-         id="stop4935-7" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient11102-6"
-       id="radialGradient3279"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(0.946826,0,0,0.946826,0.469351,0.499261)"
-       cx="8.0402098"
-       cy="9.5280285"
-       fx="8.0402098"
-       fy="9.5280285"
-       r="9.8125" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient11102-6">
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1;"
-         offset="0"
-         id="stop11104-7" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:0;"
-         offset="1"
-         id="stop11106-3" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493-6"
-       id="linearGradient3307"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-    <linearGradient
-       id="linearGradient15493-6">
-      <stop
-         style="stop-color:#eeeeec;stop-opacity:1;"
-         offset="0"
-         id="stop15495-5" />
-      <stop
-         style="stop-color:#ffffff;stop-opacity:1"
-         offset="1"
-         id="stop15497-6" />
-    </linearGradient>
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient2980-3"
-       id="radialGradient3283"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       cx="28.284271"
-       cy="30.145554"
-       fx="28.284271"
-       fy="30.145554"
-       r="13.258252" />
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient2980-3">
-      <stop
-         style="stop-color:#000000;stop-opacity:1;"
-         offset="0"
-         id="stop2982-9" />
-      <stop
-         style="stop-color:#000000;stop-opacity:0;"
-         offset="1"
-         id="stop2984-4" />
-    </linearGradient>
-    <radialGradient
-       r="13.258252"
-       fy="30.145554"
-       fx="28.284271"
-       cy="30.145554"
-       cx="28.284271"
-       gradientTransform="matrix(1,0,0,0.34,0,19.89607)"
-       gradientUnits="userSpaceOnUse"
-       id="radialGradient3995"
-       xlink:href="#linearGradient2980-3"
-       inkscape:collect="always" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19914-9"
-       id="linearGradient4155"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,30.271522,-8.4832521)"
-       x1="33.985317"
-       y1="32.045906"
-       x2="37.211494"
-       y2="35.272079" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient19900-5"
-       id="linearGradient4158"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-0.91689513,0.3807964,0.39833682,0.86488415,30.271522,-8.4832521)"
-       x1="40.25"
-       y1="41"
-       x2="43.0625"
-       y2="38.434578" />
-    <radialGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient4952-8"
-       id="radialGradient4165"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="matrix(-2.2840124,0.3325768,0.30212738,1.9135354,50.976223,-34.079947)"
-       cx="16.829521"
-       cy="24.743624"
-       fx="16.829521"
-       fy="24.743624"
-       r="16.924616" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient15493-6"
-       id="linearGradient4168"
-       gradientUnits="userSpaceOnUse"
-       gradientTransform="translate(2,-1)"
-       x1="19"
-       y1="14.875"
-       x2="19.65625"
-       y2="29" />
-  </defs>
-  <sodipodi:namedview
-     inkscape:window-y="0"
-     inkscape:window-x="375"
-     inkscape:window-height="791"
-     inkscape:window-width="929"
-     inkscape:document-units="px"
-     inkscape:grid-bbox="false"
-     showgrid="false"
-     inkscape:current-layer="layer5"
-     inkscape:cy="22.95852"
-     inkscape:cx="32.311989"
-     inkscape:zoom="10.854545"
-     inkscape:pageshadow="2"
-     inkscape:pageopacity="0"
-     borderopacity="1"
-     bordercolor="#666666"
-     pagecolor="#b6b6b6"
-     id="base"
-     inkscape:showpageshadow="false"
-     showborder="true"
-     showguides="false"
-     inkscape:guide-bbox="true"
-     inkscape:grid-points="true"
-     fill="#729fcf"
-     stroke="#2e3436"
-     inkscape:window-maximized="0">
-    <sodipodi:guide
-       orientation="horizontal"
-       position="28"
-       id="guide1415" />
-    <sodipodi:guide
-       orientation="vertical"
-       position="19"
-       id="guide1417" />
-    <inkscape:grid
-       id="GridFromPre046Settings"
-       type="xygrid"
-       originx="0px"
-       originy="0px"
-       spacingx="0.5px"
-       spacingy="0.5px"
-       color="#0000ff"
-       empcolor="#0000ff"
-       opacity="0.2"
-       empopacity="0.4"
-       empspacing="2" />
-  </sodipodi:namedview>
-  <metadata
-     id="metadata4">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-        <dc:subject>
-          <rdf:Bag>
-            <rdf:li>document</rdf:li>
-            <rdf:li>search</rdf:li>
-            <rdf:li>find</rdf:li>
-          </rdf:Bag>
-        </dc:subject>
-        <cc:license
-           rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
-        <dc:creator>
-          <cc:Agent>
-            <dc:title>Lapo Calamandrei</dc:title>
-          </cc:Agent>
-        </dc:creator>
-        <dc:source />
-        <dc:contributor>
-          <cc:Agent>
-            <dc:title>Jakub Steiner</dc:title>
-          </cc:Agent>
-        </dc:contributor>
-        <dc:date>2006-04-21</dc:date>
-      </cc:Work>
-      <cc:License
-         rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Reproduction" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/Distribution" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/Notice" />
-        <cc:permits
-           rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/ShareAlike" />
-        <cc:requires
-           rdf:resource="http://web.resource.org/cc/SourceCode" />
-      </cc:License>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:groupmode="layer"
-     id="layer6"
-     inkscape:label="Shadow" />
-  <g
-     style="display:inline"
-     inkscape:groupmode="layer"
-     inkscape:label="Base"
-     id="layer1" />
-  <g
-     inkscape:groupmode="layer"
-     id="layer5"
-     inkscape:label="Text"
-     style="display:inline">
-    <g
-       transform="translate(-12.26513,47.49999)"
-       style="display:inline"
-       inkscape:label="base"
-       id="g2637" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.04705882;color:#000000;fill:url(#radialGradient3206);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path23418"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(1.0028608,-0.02269424,0.0156831,0.69306327,3.8134156,19.801095)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.6;color:#000000;fill:url(#radialGradient3259);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path1425"
-       sodipodi:cx="17.5"
-       sodipodi:cy="18.25"
-       sodipodi:rx="13.5"
-       sodipodi:ry="13.75"
-       d="m 31,18.25 a 13.5,13.75 0 1 1 -27,0 13.5,13.75 0 1 1 27,0 z"
-       transform="matrix(-1.0866903,0.45131417,0.46351946,1.0064111,28.624421,-9.0730452)" />
-    <path
-       style="opacity:0.5;color:#000000;fill:url(#radialGradient4165);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible"
-       d="m 12.015903,2.7046143 c 7.937506,-2.96266511 16.982489,0.5191617 20.406201,7.9528567 0.962747,2.090354 0.594348,4.618103 0.389319,6.753677 C 31.082017,12.536633 28.465657,12.402314 27.233818,13.410634 23.496503,16.46981 16.529714,20.733021 7.0810135,20.13853 3.7686364,19.930123 3.6946532,23.841982 2.4538828,20.868934 0.21037928,13.769783 4.0541807,6.0112033 11.451555,2.9389944 11.640692,2.8604438 11.825403,2.7757152 12.015903,2.7046143 z"
-       id="path4939"
-       sodipodi:nodetypes="cscsscsc" />
-    <path
-       transform="matrix(-1.4670322,0.60927423,0.63733892,1.3838146,92.217732,-21.022112)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2607"
-       style="color:#000000;fill:none;stroke:url(#radialGradient3263);stroke-width:1.87499988;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <g
-       transform="matrix(-1.4157337,0.58796943,0.61185172,1.3284758,90.116131,-79.129986)"
-       id="g2708">
-      <path
-         style="color:#000000;fill:url(#linearGradient3265);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3267);stroke-width:0.67653471;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-         d="m 76.796351,49.768459 0.647647,3.255175 5.181173,5.213494 c 0.192503,0.193704 0.97147,0.320302 1.942939,-0.65625 0.97147,-0.976552 0.895574,-1.70388 0.647647,-1.953105 l -5.181173,-5.208279 -3.238233,-0.651035 z"
-         id="path2682"
-         sodipodi:nodetypes="cczzzcc" />
-      <path
-         style="opacity:0.19215686;color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999964;marker:none;visibility:visible;display:inline;overflow:visible"
-         d="m 79.567301,51.320041 c -0.003,0.0112 0.294101,0.324318 -0.245291,0.864982 -0.539399,0.540663 -1.007144,0.373988 -0.993486,0.360259 l -0.269149,-1.521577 1.507926,0.296336 z"
-         id="path2687"
-         sodipodi:nodetypes="csccc" />
-    </g>
-    <path
-       sodipodi:nodetypes="cczzzcc"
-       id="path17267"
-       d="m 11.175293,33.735142 0.704333,3.005757 -3.8693881,9.384635 c -0.1902944,0.46154 -0.7694377,0.544068 -1.9976635,0.092 -1.2282284,-0.45206 -1.6351962,-0.76466 -1.3958441,-1.34461 l 3.871373,-9.380322 2.6871897,-1.75746 z"
-       style="color:#000000;fill:none;stroke:url(#linearGradient4158);stroke-width:0.97195268;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-    <path
-       style="opacity:0.15294118;color:#000000;fill:url(#linearGradient4155);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.67653471;marker:none;visibility:visible;display:inline;overflow:visible"
-       d="m 11.795473,31.636446 c 0.273091,-0.02327 0.516911,0.15628 0.558257,0.411074 l 1.059484,4.703394 c 0.01332,0.08891 4.94e-4,0.179769 -0.03712,0.262696 L 9.2692737,46.97832 C 9.0843835,47.423097 8.6320869,47.718499 7.9873823,47.856893 7.3426767,47.995287 6.4785304,47.930432 5.4168944,47.539682 4.3640216,47.15216 3.7004357,46.689841 3.3177106,46.185987 2.9349851,45.682132 2.8140092,45.125581 2.9964307,44.687377 l 4.170137,-9.94156 c 0.041413,-0.09682 0.1142759,-0.179037 0.2080896,-0.234788 L 11.530023,31.74669 c 0.0759,-0.05949 0.167922,-0.09771 0.265448,-0.110252 z"
-       id="path19908"
-       sodipodi:nodetypes="cccccsssccccc" />
-    <path
-       transform="matrix(-1.5128769,0.62831404,0.65725577,1.4270588,94.534947,-22.2163)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2605"
-       style="color:#000000;fill:none;stroke:url(#radialGradient3273);stroke-width:0.60606074;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       transform="matrix(-1.6045665,0.6663937,0.69708944,1.5135472,99.1694,-24.604679)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path2599"
-       style="color:#000000;fill:none;stroke:url(#linearGradient3275);stroke-width:0.57142824;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       transform="matrix(-1.3324064,0.55336266,0.57885311,1.256828,85.413067,-17.51532)"
-       d="m 62.5,4.5 a 10,10 0 1 1 -20,0 10,10 0 1 1 20,0 z"
-       sodipodi:ry="10"
-       sodipodi:rx="10"
-       sodipodi:cy="4.5"
-       sodipodi:cx="52.5"
-       id="path4927"
-       style="color:#000000;fill:none;stroke:url(#linearGradient3277);stroke-width:0.68814939;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
-       sodipodi:type="arc" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.16078431;color:#000000;fill:url(#radialGradient3279);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path11092"
-       sodipodi:cx="12.375"
-       sodipodi:cy="12.9375"
-       sodipodi:rx="9.8125"
-       sodipodi:ry="9.8125"
-       d="m 22.1875,12.9375 a 9.8125,9.8125 0 1 1 -19.625,0 9.8125,9.8125 0 1 1 19.625,0 z"
-       transform="matrix(-1.2147411,0.50449504,0.52773334,1.1458348,26.271436,-3.875408)" />
-    <path
-       sodipodi:type="arc"
-       style="opacity:0.072;color:#000000;fill:url(#radialGradient3995);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
-       id="path2970"
-       sodipodi:cx="28.284271"
-       sodipodi:cy="30.145554"
-       sodipodi:rx="13.258252"
-       sodipodi:ry="4.5078058"
-       d="m 41.542523,30.145554 a 13.258252,4.5078058 0 1 1 -26.516504,0 13.258252,4.5078058 0 1 1 26.516504,0 z"
-       transform="matrix(-1.4540417,0.60387911,0.47985407,1.0418775,48.820159,-11.738241)" />
-    <g
-       id="g1399"
-       style="opacity:0.76078431"
-       transform="matrix(-0.70467682,-0.7093291,-0.69387045,0.69388405,46.001355,18.68952)">
-      <path
-         sodipodi:nodetypes="ccccccccccccc"
-         id="rect8466"
-         d="m 18.5,10.5 0,6 -6,0 0,5 6,0 0,6 5,0 0,-6 6,0 0,-5 -6,0 0,-6 -5,0 z"
-         style="color:#000000;fill:url(#linearGradient3368);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-      <path
-         sodipodi:nodetypes="ccccccccccccc"
-         id="rect12861"
-         d="m 19.5,11.5 0,6 -6,0 0,3 6,0 0,6 3,0 0,-6 6,0 0,-3 -6,0 0,-6 -3,0 z"
-         style="color:#000000;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" />
-    </g>
-  </g>
-</svg>
diff --git a/gramps/plugins/webstuff/webstuff.py b/gramps/plugins/webstuff/webstuff.py
index 5aebfe56a..12741be46 100644
--- a/gramps/plugins/webstuff/webstuff.py
+++ b/gramps/plugins/webstuff/webstuff.py
@@ -25,7 +25,7 @@
 #    python modules
 #------------------------------------------------
 import os
-from gramps.gen.const import VERSION_DIR
+from gramps.gen.const import VERSION_DIR, IMAGE_DIR, DATA_DIR
 from gramps.gen.const import GRAMPS_LOCALE as glocale
 _ = glocale.translation.sgettext
 
@@ -47,11 +47,10 @@ def load_on_reg(dbstate, uistate, plugin):
     """
     Runs when plugin is registered.
     """
-    dir, fname = os.path.split(__file__)
     from functools import partial
-    path_css = partial(os.path.join, dir, "css")
-    path_img = partial(os.path.join, dir, "images")
-    path_js = partial(os.path.join, dir, "js")
+    path_css = partial(os.path.join, DATA_DIR, "css")
+    path_img = partial(os.path.join, IMAGE_DIR, "webstuff")
+    path_js = partial(os.path.join, DATA_DIR, "javascript")
     CSS_FILES = [
 
         # id, user selectable?, translated_name, option name, fullpath,
@@ -160,7 +159,7 @@ def load_on_reg(dbstate, uistate, plugin):
 
         # Document image
         ["Document", 0, "Document",
-         path_img("document.png"), None, [], [] ],
+         os.path.join(IMAGE_DIR, "document.png"), None, [], [] ],
 
         # blank
         ["Blank", 0, "Blank",
diff --git a/gramps/plugins/webstuff/images/Web_Gender_Female.png b/images/webstuff/Web_Gender_Female.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Gender_Female.png
rename to images/webstuff/Web_Gender_Female.png
diff --git a/gramps/plugins/webstuff/images/Web_Gender_Male.png b/images/webstuff/Web_Gender_Male.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Gender_Male.png
rename to images/webstuff/Web_Gender_Male.png
diff --git a/gramps/plugins/webstuff/images/Web_Mainz_Bkgd.png b/images/webstuff/Web_Mainz_Bkgd.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Mainz_Bkgd.png
rename to images/webstuff/Web_Mainz_Bkgd.png
diff --git a/gramps/plugins/webstuff/images/Web_Mainz_Header.png b/images/webstuff/Web_Mainz_Header.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Mainz_Header.png
rename to images/webstuff/Web_Mainz_Header.png
diff --git a/gramps/plugins/webstuff/images/Web_Mainz_Mid.png b/images/webstuff/Web_Mainz_Mid.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Mainz_Mid.png
rename to images/webstuff/Web_Mainz_Mid.png
diff --git a/gramps/plugins/webstuff/images/Web_Mainz_MidLight.png b/images/webstuff/Web_Mainz_MidLight.png
similarity index 100%
rename from gramps/plugins/webstuff/images/Web_Mainz_MidLight.png
rename to images/webstuff/Web_Mainz_MidLight.png
diff --git a/gramps/plugins/webstuff/images/blank.gif b/images/webstuff/blank.gif
similarity index 100%
rename from gramps/plugins/webstuff/images/blank.gif
rename to images/webstuff/blank.gif
diff --git a/gramps/plugins/webstuff/images/crosshairs.png b/images/webstuff/crosshairs.png
similarity index 100%
rename from gramps/plugins/webstuff/images/crosshairs.png
rename to images/webstuff/crosshairs.png
diff --git a/gramps/plugins/webstuff/images/favicon.ico b/images/webstuff/favicon.ico
similarity index 100%
rename from gramps/plugins/webstuff/images/favicon.ico
rename to images/webstuff/favicon.ico
diff --git a/gramps/plugins/webstuff/images/favicon2.ico b/images/webstuff/favicon2.ico
similarity index 100%
rename from gramps/plugins/webstuff/images/favicon2.ico
rename to images/webstuff/favicon2.ico
diff --git a/gramps/plugins/webstuff/images/gramps-geo-altmap.png b/images/webstuff/gramps-geo-altmap.png
similarity index 100%
rename from gramps/plugins/webstuff/images/gramps-geo-altmap.png
rename to images/webstuff/gramps-geo-altmap.png
diff --git a/gramps/plugins/webstuff/images/gramps-geo-birth.png b/images/webstuff/gramps-geo-birth.png
similarity index 100%
rename from gramps/plugins/webstuff/images/gramps-geo-birth.png
rename to images/webstuff/gramps-geo-birth.png
diff --git a/gramps/plugins/webstuff/images/gramps-geo-death.png b/images/webstuff/gramps-geo-death.png
similarity index 100%
rename from gramps/plugins/webstuff/images/gramps-geo-death.png
rename to images/webstuff/gramps-geo-death.png
diff --git a/gramps/plugins/webstuff/images/gramps-geo-mainmap.png b/images/webstuff/gramps-geo-mainmap.png
similarity index 100%
rename from gramps/plugins/webstuff/images/gramps-geo-mainmap.png
rename to images/webstuff/gramps-geo-mainmap.png
diff --git a/gramps/plugins/webstuff/images/gramps-geo-marriage.png b/images/webstuff/gramps-geo-marriage.png
similarity index 100%
rename from gramps/plugins/webstuff/images/gramps-geo-marriage.png
rename to images/webstuff/gramps-geo-marriage.png
diff --git a/gramps/plugins/webstuff/images/somerights20.gif b/images/webstuff/somerights20.gif
similarity index 100%
rename from gramps/plugins/webstuff/images/somerights20.gif
rename to images/webstuff/somerights20.gif
diff --git a/mac/gramps.bundle b/mac/gramps.bundle
index 8b2bc4a30..d09962cec 100644
--- a/mac/gramps.bundle
+++ b/mac/gramps.bundle
@@ -72,10 +72,6 @@
     ${prefix}/lib/enchant
   </binary>
 
-  <binary>
-     ${prefix}/lib/libgettextpo.0.dylib
-  </binary>
-
   <binary>
      ${prefix}/lib/libosmgpsmap.3.dylib
   </binary>
diff --git a/setup.py b/setup.py
index 6c03cb958..1d1802dc8 100644
--- a/setup.py
+++ b/setup.py
@@ -358,13 +358,6 @@ for (dirpath, dirnames, filenames) in os.walk(basedir):
         #we add to data_list so glade , xml, files are found, we don't need the gramps/ part
         package_data_core.append(dirpath[7:] + '/' + dirname + '/*.glade')
         package_data_core.append(dirpath[7:] + '/' + dirname + '/*.xml')
-        package_data_core.append(dirpath[7:] + '/' + dirname + '/*.png')
-        package_data_core.append(dirpath[7:] + '/' + dirname + '/*.svg')
-        package_data_core.append(dirpath[7:] + '/' + dirname + '/*.css')
-        package_data_core.append(dirpath[7:] + '/' + dirname + '/*.html')
-        package_data_core.append(dirpath[7:] + '/' + dirname + '/*.js')
-package_data_core.append('plugins/webstuff/images/*.gif')
-package_data_core.append('plugins/webstuff/images/*.ico')
 package_data_core.append('gen/utils/resource-path')
 
 package_data_gui = ['gui/glade/*.glade']
@@ -387,9 +380,20 @@ DOC_FILES = ['AUTHORS', 'COPYING', 'FAQ', 'INSTALL', 'LICENSE', 'NEWS',
              'README', 'TODO']
 GEDCOM_FILES = glob.glob(os.path.join('example', 'gedcom', '*.*'))
 GRAMPS_FILES = glob.glob(os.path.join('example', 'gramps', '*.*'))
+IMAGE_WEB = glob.glob(os.path.join('images', 'webstuff', '*.png'))
+IMAGE_WEB.extend(glob.glob(os.path.join('images', 'webstuff','*.ico')))
+IMAGE_WEB.extend(glob.glob(os.path.join('images', 'webstuff', '*.gif')))
+JS_FILES = glob.glob(os.path.join('data', 'javascript', '*.js'))
+CSS_FILES = glob.glob(os.path.join('data', 'css', '*.css'))
+SWANKY_PURSE = glob.glob(os.path.join('data', 'css', 'swanky-purse', '*.css'))
+SWANKY_IMG = glob.glob(os.path.join('data', 'css', 'swanky-purse', 'images', '*.png'))
 data_files_core.append(('share/doc/gramps', DOC_FILES))
 data_files_core.append(('share/doc/gramps/example/gedcom', GEDCOM_FILES))
-data_files_core.append(('share/doc/gramps/example/gramps', GRAMPS_FILES)) 
+data_files_core.append(('share/doc/gramps/example/gramps', GRAMPS_FILES))
+data_files_core.append(('share/gramps/images', IMAGE_WEB))
+data_files_core.append(('share/gramps/css', CSS_FILES))
+data_files_core.append(('share/gramps/css/swanky-purse', SWANKY_PURSE))
+data_files_core.append(('share/gramps/css/swanky-purse/images', SWANKY_IMG))
 
 PNG_FILES = glob.glob(os.path.join('data', '*.png'))
 SVG_FILES = glob.glob(os.path.join('data', '*.svg'))

From 1158e77e135227723cb8de9a5bc06905abbfcb96 Mon Sep 17 00:00:00 2001
From: John Ralls <jralls@ceridwen.us>
Date: Sun, 23 Jun 2013 23:24:02 +0000
Subject: [PATCH 21/25] Correctly set images/webstuff path in htmldoc.py and
 setup.py

svn: r22578
---
 gramps/plugins/docgen/htmldoc.py | 2 +-
 setup.py                         | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gramps/plugins/docgen/htmldoc.py b/gramps/plugins/docgen/htmldoc.py
index 4371c52ae..a2a460ef2 100644
--- a/gramps/plugins/docgen/htmldoc.py
+++ b/gramps/plugins/docgen/htmldoc.py
@@ -298,7 +298,7 @@ class HtmlDoc(BaseDoc, TextDoc):
             if os.path.exists(fullpath):
                 self.copy_file(fullpath, _HTMLSCREEN)
         #favicon
-        self.copy_file(os.path.join(IMAGE_DIR, 'favicon.ico'), 
+        self.copy_file(os.path.join(IMAGE_DIR, 'webstuff', 'favicon.ico'), 
                         'favicon.ico')
 
     def __reduce_list(self):
diff --git a/setup.py b/setup.py
index 1d1802dc8..ca08f5cb1 100644
--- a/setup.py
+++ b/setup.py
@@ -390,7 +390,7 @@ SWANKY_IMG = glob.glob(os.path.join('data', 'css', 'swanky-purse', 'images', '*.
 data_files_core.append(('share/doc/gramps', DOC_FILES))
 data_files_core.append(('share/doc/gramps/example/gedcom', GEDCOM_FILES))
 data_files_core.append(('share/doc/gramps/example/gramps', GRAMPS_FILES))
-data_files_core.append(('share/gramps/images', IMAGE_WEB))
+data_files_core.append(('share/gramps/images/webstuff', IMAGE_WEB))
 data_files_core.append(('share/gramps/css', CSS_FILES))
 data_files_core.append(('share/gramps/css/swanky-purse', SWANKY_PURSE))
 data_files_core.append(('share/gramps/css/swanky-purse/images', SWANKY_IMG))

From 39395150f742505f405aa2f9c0436a27818c5ea8 Mon Sep 17 00:00:00 2001
From: Paul Franklin <pf98052@gmail.com>
Date: Mon, 24 Jun 2013 01:59:25 +0000
Subject: [PATCH 22/25] make sure relationship calculator tool's relationships
 are in the UI language

svn: r22581
---
 gramps/plugins/tool/relcalc.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gramps/plugins/tool/relcalc.py b/gramps/plugins/tool/relcalc.py
index ca7fd0716..ae5a1e4dd 100644
--- a/gramps/plugins/tool/relcalc.py
+++ b/gramps/plugins/tool/relcalc.py
@@ -95,7 +95,7 @@ class RelCalc(tool.Tool, ManagedWindow):
                 self.colord.append((0, col, size))
 
         self.dbstate = dbstate
-        self.relationship = get_relationship_calculator()
+        self.relationship = get_relationship_calculator(glocale)
         self.relationship.connect_db_signals(dbstate)
 
         self.glade = Glade()

From 6d9fbe02381b2f7f51fcd4363b3bb1c3690a81dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Rapinat?= <romjerome@yahoo.fr>
Date: Mon, 24 Jun 2013 06:41:23 +0000
Subject: [PATCH 23/25] update Ukrainian relationship calculator (by Fedir)

svn: r22582
---
 gramps/plugins/rel/rel_uk.py | 78 ++++++++++++++++++------------------
 1 file changed, 39 insertions(+), 39 deletions(-)

diff --git a/gramps/plugins/rel/rel_uk.py b/gramps/plugins/rel/rel_uk.py
index 353337ea0..dd6c16a05 100644
--- a/gramps/plugins/rel/rel_uk.py
+++ b/gramps/plugins/rel/rel_uk.py
@@ -143,7 +143,7 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
     def __init__(self):
         gramps.gen.relationship.RelationshipCalculator.__init__(self)
 
-    def get_sword_distaff(self, level, reltocommon, gender = gen.lib.Person.UNKNOWN):
+    def get_sword_distaff(self, level, reltocommon, gender = Person.UNKNOWN):
         """
         Generate relationships 'by male line' or 'by female line',
         specific for Ukraine
@@ -159,10 +159,10 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                 break
             by_line = g
 
-        if by_line == self.REL_FATHER and gender == gen.lib.Person.MALE:
+        if by_line == self.REL_FATHER and gender == Person.MALE:
             # by male line
             return " по чоловічій лінії"
-        elif by_line == self.REL_MOTHER and gender == gen.lib.Person.FEMALE:
+        elif by_line == self.REL_MOTHER and gender == Person.FEMALE:
             # by male line
             return " по жіночій лінії"
         elif reltocommon[0] == self.REL_FATHER:
@@ -242,11 +242,11 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
             else:
                 # Grandfather, Greatgrandfather, Greatgreatgrandfather
                 return t_inlaw + _father_level[level] \
-                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
+                    + self.get_sword_distaff(level, reltocommon, Person.MALE)
         else:
             # For deep generations
             return t_inlaw + "пра(пра)дід у %d поколінні" % (level + 1) \
-                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.MALE)
+                    + self.get_sword_distaff(level, reltocommon, Person.MALE)
 
 
     def get_mother(self, level, reltocommon, inlaw=''):
@@ -268,11 +268,11 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
             else:
                 # Grandmother, Greatgrandmother, Greatgreatgrandmother
                 return t_inlaw + _mother_level[level] \
-                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
+                    + self.get_sword_distaff(level, reltocommon, Person.FEMALE)
         else:
             # For deep generations
             return t_inlaw + "пра(пра)баба у %d поколінні" % (level + 1) \
-                    + self.get_sword_distaff(level, reltocommon, gen.lib.Person.FEMALE)
+                    + self.get_sword_distaff(level, reltocommon, Person.FEMALE)
 
 
 
@@ -532,12 +532,12 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
         """
         Return level name depend of gender
         """
-        if (gender == gen.lib.Person.MALE):
+        if (gender == Person.MALE):
             if level < len(_level_name_male):
                 return _level_name_male[level]
             else:
                 return "%d-юрідний" % level
-        elif (gender == gen.lib.Person.FEMALE):
+        elif (gender == Person.FEMALE):
             if level < len(_level_name_female):
                 return _level_name_female[level]
             else:
@@ -609,13 +609,13 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
         elif Ga == 0:
             # b is son/descendant of a
 
-            if gender_b == gen.lib.Person.MALE:
+            if gender_b == Person.MALE:
                 if inlaw and Gb == 1 and not step:
                     rel_str = "зять"
                 else:
                     rel_str = self.get_son(Gb, inlaw)
 
-            elif gender_b == gen.lib.Person.FEMALE:
+            elif gender_b == Person.FEMALE:
                 if inlaw and Gb == 1 and not step:
                     rel_str = "невістка"
                 else:
@@ -628,13 +628,13 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
         elif Gb == 0:
             # b is parent/grand parent of a
 
-            if gender_b == gen.lib.Person.MALE:
+            if gender_b == Person.MALE:
                 if inlaw and Gb == 1 and not step:
                     rel_str = "тесть"
                 else:
                     rel_str = self.get_father(Ga, reltocommon_a, inlaw)
 
-            elif gender_b == gen.lib.Person.FEMALE:
+            elif gender_b == Person.FEMALE:
                 if inlaw and Gb == 1 and not step:
                     rel_str = "теща"
                 else:
@@ -652,13 +652,13 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
             # that called in parent RelationshipCalculator
             # see Relationship.py
 
-            if gender_b == gen.lib.Person.MALE:
+            if gender_b == Person.MALE:
                 if inlaw and not step:
                     rel_str = "рідний брат"
                 else:
                     rel_str = "напів рідний брат"
 
-            elif gender_b == gen.lib.Person.FEMALE:
+            elif gender_b == Person.FEMALE:
                 if inlaw and not step:
                     rel_str = "рідна сестра"
                 else:
@@ -669,9 +669,9 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
         elif Gb == 1 and Ga > 1:
              # b is aunt/uncle of a
 
-            if (gender_b == gen.lib.Person.MALE):
+            if (gender_b == Person.MALE):
                 rel_str = self.get_uncle(Ga, reltocommon_a, inlaw)
-            elif (gender_b == gen.lib.Person.FEMALE):
+            elif (gender_b == Person.FEMALE):
                 rel_str = self.get_aunt(Ga, reltocommon_a, inlaw)
             else:
                 rel_str = self.get_uncle_aunt_unknown(Ga, reltocommon_a, inlaw)
@@ -679,9 +679,9 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
         elif Ga  == 1 and Gb > 1:
             # b is niece/nephew of a
 
-            if (gender_b == gen.lib.Person.MALE):
+            if (gender_b == Person.MALE):
                 rel_str = self.get_nephew(Gb, reltocommon_b, inlaw)
-            elif (gender_b == gen.lib.Person.FEMALE):
+            elif (gender_b == Person.FEMALE):
                 rel_str = self.get_niece(Gb, reltocommon_b, inlaw)
             else:
                 rel_str = self.get_nephew_niece_unknown(Gb, reltocommon_b, inlaw)
@@ -699,7 +699,7 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                     level_name = self.get_level(Gb, gender_b)
 
 
-                if (gender_b == gen.lib.Person.MALE):
+                if (gender_b == Person.MALE):
                      # b is far  uncle
                     if inlaw != '':
                         t_inlaw = "названий "
@@ -709,7 +709,7 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                     else:
                         rel_str = t_inlaw + "%s пра(пра)дід в %d поколінні" \
                             % (level_name, (level))
-                elif (gender_b == gen.lib.Person.FEMALE):
+                elif (gender_b == Person.FEMALE):
                      # b is far aunt
                     if inlaw != '':
                         t_inlaw = "названа "
@@ -733,7 +733,7 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                 level_name = self.get_level(Ga, gender_b)
                 level = Gb - Ga + 1
 
-                if (gender_b == gen.lib.Person.MALE):
+                if (gender_b == Person.MALE):
                     # b is far nephew
                     if level == 2:
                         rel_str = "%s небіж" % level_name
@@ -741,7 +741,7 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                         rel_str = "%s пра(пра)внук у %d поколінні" \
                             % (level_name, level)
                     #rel_str = "%s %s" % (level_name, self.get_nephew(level, reltocommon_b, inlaw))
-                elif (gender_b == gen.lib.Person.FEMALE):
+                elif (gender_b == Person.FEMALE):
                     # b is far niece
                     if level == 2:
                         rel_str = "%s небога" % level_name
@@ -757,11 +757,11 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
                 # b is cousin of a
                 level_name = self.get_level(Ga, gender_b)
 
-                if (gender_b == gen.lib.Person.MALE):
+                if (gender_b == Person.MALE):
                     if inlaw != '':
                         t_inlaw = "названий "
                     rel_str = t_inlaw + "%s брат" % level_name
-                elif (gender_b == gen.lib.Person.FEMALE):
+                elif (gender_b == Person.FEMALE):
                     if inlaw != '':
                         t_inlaw = "названа "
                     rel_str = t_inlaw + "%s сестра" % level_name
@@ -831,52 +831,52 @@ class RelationshipCalculator(gramps.gen.relationship.RelationshipCalculator):
 
         if sib_type == self.NORM_SIB:
             if not inlaw:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = 'рідний брат'
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = 'рідна сестра'
                 else:
                     rel_str = 'рідний(а) брат або сестра'
             else:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = "названий брат"
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = "названа сестра"
                 else:
                     rel_str = "названий(а) брат або сестра"
         elif sib_type == self.UNKNOWN_SIB:
             if not inlaw:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = 'брат'
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = 'сестра'
                 else:
                     rel_str = 'брат або сестра'
             else:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = "швагро"
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = "братова"
                 else:
                     rel_str = "швагро або братова"
         elif sib_type == self.HALF_SIB_FATHER:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = "єдинокровний(напіврідний) брат"
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = "єдинокровна(напіврідна) сестра"
                 else:
                     rel_str = "напіврідний(а) брат/сестра"
         elif sib_type == self.HALF_SIB_MOTHER:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = "єдинокровний(напіврідний) брат"
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = "єдинокровна(напіврідна) сестра"
                 else:
                     rel_str = "напіврідний(а) брат/сестра"
         elif sib_type == self.STEP_SIB:
-                if gender_b == gen.lib.Person.MALE:
+                if gender_b == Person.MALE:
                     rel_str = "зведений брат"
-                elif gender_b == gen.lib.Person.FEMALE:
+                elif gender_b == Person.FEMALE:
                     rel_str = "зведена сестра"
                 else:
                     rel_str = "зведений брат або сестра"

From 242fd1372d600284ab2ee6a92fcceeeb73defade Mon Sep 17 00:00:00 2001
From: Vassilii Khachaturov <vassilii@tarunz.org>
Date: Mon, 24 Jun 2013 18:17:15 +0000
Subject: [PATCH 24/25] 6838: report cli crash ignoring unknown param

merge from gramps40 branch

svn: r22596
---
 gramps/cli/plug/__init__.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gramps/cli/plug/__init__.py b/gramps/cli/plug/__init__.py
index 979eaa675..c9aef488b 100644
--- a/gramps/cli/plug/__init__.py
+++ b/gramps/cli/plug/__init__.py
@@ -422,7 +422,7 @@ class CommandLineReport(object):
                 self.options_help[name].append(option.get_help())
             else:
                 print(_("Unknown option: %s") % option, file=sys.stderr)
-                print(_("   Valid options are:"),
+                print(_("   Valid options are:") +
                       ", ".join(list(self.options_dict.keys())),
                                                         file=sys.stderr)
                 print(_("   Use '%(donottranslate)s' to see description "

From 6e22f8078487cf16e87bca46d26005f8ec3e50db Mon Sep 17 00:00:00 2001
From: Paul Franklin <pf98052@gmail.com>
Date: Mon, 24 Jun 2013 19:31:17 +0000
Subject: [PATCH 25/25] added GPL "boilerplate", SVN properties, and SVN Id
 line as needed

svn: r22598
---
 test/GrampsDb/Cursor_Test.py                  | 23 +++++++++++++++++++
 test/GrampsDb/GrampsDbBase_Test.py            | 23 +++++++++++++++++++
 test/GrampsDb/GrampsDbTestBase.py             | 23 +++++++++++++++++++
 .../GrampsLogger/ErrorReportAssistant_Test.py | 23 +++++++++++++++++++
 test/GrampsLogger/GtkHandler_Test.py          | 23 +++++++++++++++++++
 test/GrampsLogger/RotateLogger_Test.py        | 23 +++++++++++++++++++
 test/LosHawlos_bsddbtest.py                   | 23 +++++++++++++++++++
 test/LosHawlos_dbtest.py                      | 23 +++++++++++++++++++
 test/RelLib/RelLib_Test.py                    | 23 +++++++++++++++++++
 test/dates.sh                                 |  2 +-
 10 files changed, 208 insertions(+), 1 deletion(-)

diff --git a/test/GrampsDb/Cursor_Test.py b/test/GrampsDb/Cursor_Test.py
index 7532e15c8..e2ea924e8 100644
--- a/test/GrampsDb/Cursor_Test.py
+++ b/test/GrampsDb/Cursor_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsDb/Cursor_Test.py
+# $Id$
+
 import unittest
 import logging
 import os
diff --git a/test/GrampsDb/GrampsDbBase_Test.py b/test/GrampsDb/GrampsDbBase_Test.py
index 7d2d6099d..729264aee 100644
--- a/test/GrampsDb/GrampsDbBase_Test.py
+++ b/test/GrampsDb/GrampsDbBase_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsDb/GrampsDbBase_Test.py
+# $Id$
+
 import unittest
 import logging
 import os
diff --git a/test/GrampsDb/GrampsDbTestBase.py b/test/GrampsDb/GrampsDbTestBase.py
index 58b28fee9..1be53775f 100644
--- a/test/GrampsDb/GrampsDbTestBase.py
+++ b/test/GrampsDb/GrampsDbTestBase.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsDb/GrampsDbTestBase.py
+# $Id$
+
 import unittest
 import logging
 import os
diff --git a/test/GrampsLogger/ErrorReportAssistant_Test.py b/test/GrampsLogger/ErrorReportAssistant_Test.py
index f1d1a07ad..259215bc6 100644
--- a/test/GrampsLogger/ErrorReportAssistant_Test.py
+++ b/test/GrampsLogger/ErrorReportAssistant_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsLogger/ErrorReportAssistant_Test.py
+# $Id$
+
 import unittest
 import logging
 import sys
diff --git a/test/GrampsLogger/GtkHandler_Test.py b/test/GrampsLogger/GtkHandler_Test.py
index 500390e78..f62fe2e6c 100644
--- a/test/GrampsLogger/GtkHandler_Test.py
+++ b/test/GrampsLogger/GtkHandler_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsLogger/GtkHandler_Test.py
+# $Id$
+
 import unittest
 import logging
 import sys
diff --git a/test/GrampsLogger/RotateLogger_Test.py b/test/GrampsLogger/RotateLogger_Test.py
index 2b10c077a..301998b71 100644
--- a/test/GrampsLogger/RotateLogger_Test.py
+++ b/test/GrampsLogger/RotateLogger_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/GrampsLogger/RotateLogger_Test.py
+# $Id$
+
 import unittest
 import logging
 import sys
diff --git a/test/LosHawlos_bsddbtest.py b/test/LosHawlos_bsddbtest.py
index c49401738..037021419 100644
--- a/test/LosHawlos_bsddbtest.py
+++ b/test/LosHawlos_bsddbtest.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/LosHawlos_bsddbtest.py
+# $Id$
+
 from bsddb import dbshelve, db
 import os
 import sys
diff --git a/test/LosHawlos_dbtest.py b/test/LosHawlos_dbtest.py
index c50d52dc9..5c9d53d16 100644
--- a/test/LosHawlos_dbtest.py
+++ b/test/LosHawlos_dbtest.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/LosHawlos_dbtest.py
+# $Id$
+
 import os
 import tempfile
 import shutil
diff --git a/test/RelLib/RelLib_Test.py b/test/RelLib/RelLib_Test.py
index 9f363bca3..50e795363 100644
--- a/test/RelLib/RelLib_Test.py
+++ b/test/RelLib/RelLib_Test.py
@@ -1,3 +1,26 @@
+#
+# Gramps - a GTK+/GNOME based genealogy program
+#
+# Copyright (C) 2000-2007  Donald N. Allingham
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+# test/RelLib/RelLib_Test.py
+# $Id$
+
 import unittest
 import logging
 import os
diff --git a/test/dates.sh b/test/dates.sh
index efc03ea01..8b0374866 100755
--- a/test/dates.sh
+++ b/test/dates.sh
@@ -3,7 +3,7 @@
 # Date Handler test for GRAMPS:
 #   o Run date_test.py for every available locale.
 
-# $Id: dates.sh,v 1.1.2.2 2006/04/15 20:21:03 loshawlos Exp $
+# $Id$
 
 TOP_DIR=`dirname $PWD`
 SRC_DIR=$TOP_DIR/src