* src/DateDisplay.py: use LC_TIME and D_FMT to determine

the locale date format
* src/DateHandler.py: en.US to en_US
* src/ReadGedcom.py: Allow user overriding of character set
* src/StartupDialog.py: remove date entry setting
* src/gedcomimport.glade: Allow user overriding of character set
* src/gramps.py: set LC_TIME based of LANG
* src/data/gramps.schemas: remove date entry setting

* src/DateDisplay.py: use unicode encodings for french months


svn: r3571
This commit is contained in:
Don Allingham 2004-09-24 22:05:46 +00:00
parent 30013bfbac
commit ac86b176a0
8 changed files with 257 additions and 107 deletions

View File

@ -1,7 +1,17 @@
2004-09-24 Don Allingham <dallingham@users.sourceforge.net>
* src/DateDisplay.py: use LC_TIME and D_FMT to determine
the locale date format
* src/DateHandler.py: en.US to en_US
* src/ReadGedcom.py: Allow user overriding of character set
* src/StartupDialog.py: remove date entry setting
* src/gedcomimport.glade: Allow user overriding of character set
* src/gramps.py: set LC_TIME based of LANG
* src/data/gramps.schemas: remove date entry setting
2004-09-23 Don Allingham <dallingham@users.sourceforge.net> 2004-09-23 Don Allingham <dallingham@users.sourceforge.net>
* src/Date.py: display calendar * src/Date.py: display calendar
* src/DateParser.py: parse based on calendars * src/DateParser.py: parse based on calendars
* src/DateDisplay.py: use unicode encodings for french monts * src/DateDisplay.py: use unicode encodings for french months
2004-09-22 Don Allingham <dallingham@users.sourceforge.net> 2004-09-22 Don Allingham <dallingham@users.sourceforge.net>
* src/EditPerson.py: change sort mechanism to new Date sort value * src/EditPerson.py: change sort mechanism to new Date sort value

View File

@ -30,6 +30,7 @@ __version__ = "$Revision$"
import Date import Date
import locale import locale
import time
class DateDisplay: class DateDisplay:
""" """
@ -37,7 +38,7 @@ class DateDisplay:
""" """
formats = ( formats = (
"YYYY-MM-DD", "MM/DD/YYYY", "Month Day, Year", "YYYY-MM-DD (ISO)", "Numerical", "Month Day, Year",
"MON DAY, YEAR", "Day Month Year", "DAY MON YEAR" "MON DAY, YEAR", "Day Month Year", "DAY MON YEAR"
) )
@ -88,6 +89,8 @@ class DateDisplay:
unicode(locale.nl_langinfo(locale.ABMON_11),_codeset), unicode(locale.nl_langinfo(locale.ABMON_11),_codeset),
unicode(locale.nl_langinfo(locale.ABMON_12),_codeset), unicode(locale.nl_langinfo(locale.ABMON_12),_codeset),
) )
_tformat = locale.nl_langinfo(locale.D_FMT)
_hebrew = ( _hebrew = (
"", "Tishri", "Heshvan", "Kislev", "Tevet", "Shevat", "", "Tishri", "Heshvan", "Kislev", "Tevet", "Shevat",
@ -127,7 +130,7 @@ class DateDisplay:
self.format = 0 self.format = 0
else: else:
self.format = format self.format = format
self.display_cal = [ self.display_cal = [
self._display_gregorian, self._display_gregorian,
self._display_julian, self._display_julian,
@ -204,14 +207,11 @@ class DateDisplay:
else: else:
return "%s-%d-%d" % (year,date_val[1],date_val[0]) return "%s-%d-%d" % (year,date_val[1],date_val[0])
elif self.format == 1: elif self.format == 1:
# MM/DD/YYYY (American numericalO) if date_val[0] == 0 and date_val[1] == 0:
if date_val[0] == 0: return str(date_val[2])
if date_val[1] == 0:
return "%d" % date_val[2]
else:
return "%d/%d" % (date_val[1],date_val[2])
else: else:
return "%d/%d/%d" % (date_val[1],date_val[0],date_val[2]) return time.strftime(self._tformat,(date_val[2],date_val[1],
date_val[0],0,0,0,0,0,0))
elif self.format == 2: elif self.format == 2:
# Month Day, Year # Month Day, Year
if date_val[0] == 0: if date_val[0] == 0:

View File

@ -16,12 +16,12 @@ _lang = os.environ.get('LANG','C')
_lang_to_parser = { _lang_to_parser = {
'C' : DateParser.DateParser, 'C' : DateParser.DateParser,
'en.US' : DateParser.DateParser, 'en_US' : DateParser.DateParser,
} }
_lang_to_display = { _lang_to_display = {
'C' : DateDisplay.DateDisplay, 'C' : DateDisplay.DateDisplay,
'en.US' : DateDisplay.DateDisplay, 'en_US' : DateDisplay.DateDisplay,
} }
def create_parser(): def create_parser():
@ -48,7 +48,6 @@ def set_format(val):
try: try:
_lang_to_display[_lang].display_format = val _lang_to_display[_lang].display_format = val
except: except:
print "not found"
pass pass
def get_format(): def get_format():

View File

@ -125,6 +125,33 @@ def importData(database, filename, cb=None):
global callback global callback
f = open(filename,"r")
ansel = False
gramps = False
for index in range(0,50):
line = f.readline().split()
if line[1] == 'CHAR' and line[2] == "ANSEL":
ansel = True
if line[1] == 'SOUR' and line[2] == "GRAMPS":
gramps = True
f.close()
if not gramps and ansel:
glade_file = "%s/gedcomimport.glade" % os.path.dirname(__file__)
top = gtk.glade.XML(glade_file,'encoding','gramps')
code = top.get_widget('codeset')
code.set_active(0)
dialog = top.get_widget('encoding')
dialog.run()
codeset = code.get_active()
dialog.destroy()
else:
codeset = None
import2(database, filename, cb, codeset)
def import2(database, filename, cb, codeset):
# add some checking here # add some checking here
glade_file = "%s/gedcomimport.glade" % os.path.dirname(__file__) glade_file = "%s/gedcomimport.glade" % os.path.dirname(__file__)
@ -143,7 +170,7 @@ def importData(database, filename, cb=None):
}) })
try: try:
g = GedcomParser(database,filename,statusTop) g = GedcomParser(database,filename,statusTop, codeset)
except IOError,msg: except IOError,msg:
Utils.destroy_passed_object(statusWindow) Utils.destroy_passed_object(statusWindow)
ErrorDialog(_("%s could not be opened\n") % filename,str(msg)) ErrorDialog(_("%s could not be opened\n") % filename,str(msg))
@ -202,7 +229,7 @@ class GedcomParser:
SyntaxError = "Syntax Error" SyntaxError = "Syntax Error"
BadFile = "Not a GEDCOM file" BadFile = "Not a GEDCOM file"
def __init__(self, dbase, file, window): def __init__(self, dbase, file, window, codeset):
self.dp = DateParser.DateParser() self.dp = DateParser.DateParser()
self.db = dbase self.db = dbase
self.person = None self.person = None
@ -230,7 +257,17 @@ class GedcomParser:
self.filename = file self.filename = file
self.index = 0 self.index = 0
self.backoff = 0 self.backoff = 0
self.cnv = nocnv self.override = codeset != None
if self.override:
if self.override == 0:
self.cnv = ansel_to_utf8
elif self.override == 1:
self.cnv = latin_utf8.latin_to_utf8
else:
self.cnv = nocnv
else:
self.cnv = nocnv
self.geddir = os.path.dirname(os.path.normpath(os.path.abspath(file))) self.geddir = os.path.dirname(os.path.normpath(os.path.abspath(file)))
@ -1554,7 +1591,7 @@ class GedcomParser:
if genby == "GRAMPS": if genby == "GRAMPS":
self.gedsource = self.gedmap.get_from_source_tag(matches[2]) self.gedsource = self.gedmap.get_from_source_tag(matches[2])
self.broken_conc = self.gedsource.get_conc() self.broken_conc = self.gedsource.get_conc()
elif matches[1] == "CHAR": elif matches[1] == "CHAR" and not self.override:
if matches[2] == "UNICODE" or matches[2] == "UTF-8" or matches[2] == "UTF8": if matches[2] == "UNICODE" or matches[2] == "UTF-8" or matches[2] == "UTF8":
self.cnv = nocnv self.cnv = nocnv
elif matches[2] == "ANSEL": elif matches[2] == "ANSEL":
@ -1564,6 +1601,8 @@ class GedcomParser:
self.ignore_sub_junk(2) self.ignore_sub_junk(2)
if self.window: if self.window:
self.update(self.encoding_obj,matches[2]) self.update(self.encoding_obj,matches[2])
else:
self.update(self.encoding_obj,_("Overridden"))
elif matches[1] == "GEDC": elif matches[1] == "GEDC":
self.ignore_sub_junk(2) self.ignore_sub_junk(2)
elif matches[1] == "_SCHEMA": elif matches[1] == "_SCHEMA":

View File

@ -52,8 +52,6 @@ class StartupDialog:
self.w.add(d) self.w.add(d)
d.add(self.build_page1()) d.add(self.build_page1())
d.add(self.build_page2()) d.add(self.build_page2())
d.add(self.build_page3())
d.add(self.build_page4())
d.add(self.build_page5()) d.add(self.build_page5())
d.add(self.build_page_last()) d.add(self.build_page_last())
@ -106,14 +104,6 @@ class StartupDialog:
GrampsCfg.save_researcher_phone(unicode(self.phone.get_text())) GrampsCfg.save_researcher_phone(unicode(self.phone.get_text()))
GrampsCfg.save_researcher_email(unicode(self.email.get_text())) GrampsCfg.save_researcher_email(unicode(self.email.get_text()))
if self.date1.get_active():
GrampsCfg.save_date_entry(0)
elif self.date2.get_active():
GrampsCfg.save_date_entry(1)
elif self.date3.get_active():
GrampsCfg.save_date_entry(2)
GrampsCfg.save_calendar(self.calendar.get_active())
GrampsCfg.save_uselds(self.lds.get_active()) GrampsCfg.save_uselds(self.lds.get_active())
GrampsCfg.save_startup(const.startup) GrampsCfg.save_startup(const.startup)
self.w.destroy() self.w.destroy()
@ -174,72 +164,6 @@ class StartupDialog:
return p return p
def build_page3(self):
p = gnome.ui.DruidPageStandard()
p.set_title(_('Numerical date formats'))
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)
p.set_logo(self.logo)
box = gtk.VBox()
box.set_spacing(12)
p.append_item("",box,"")
label = gtk.Label(_('There are three common formats for entering dates in a numerical\n'
'format. Without some type of indication, GRAMPS cannot correctly\n'
'tell what format you are using. Please indicate your preferred format\n'
'for entering numerical dates.'))
box.add(label)
align = gtk.Alignment(0.5,0)
box.add(align)
vbox = gtk.VBox()
vbox.set_spacing(6)
align.add(vbox)
self.date1 = gtk.RadioButton(label=_("MM/DD/YYYY (United States)"))
self.date2 = gtk.RadioButton(label=_("DD/MM/YYYY (European)"),group=self.date1)
self.date3 = gtk.RadioButton(label=_("YYYY-MM-DD (ISO)"),group=self.date1)
val = GrampsCfg.get_date_entry()
if val == 0:
self.date1.set_active(1)
elif val == 1:
self.date2.set_active(1)
elif val == 2:
self.date3.set_active(1)
vbox.add(self.date1)
vbox.add(self.date2)
vbox.add(self.date3)
box.show_all()
return p
def build_page4(self):
p = gnome.ui.DruidPageStandard()
p.set_title(_('Alternate calendar support'))
p.set_title_foreground(self.fg_color)
p.set_background(self.bg_color)
p.set_logo(self.logo)
box = gtk.VBox()
box.set_spacing(12)
p.append_item("",box,"")
label = gtk.Label(_('By default, all dates stored by GRAMPS use the Gregorian calendar.\n'
'This is normally sufficient for most users. Support may be enabled\n'
'for the Julian, French Republican, and Hebrew calendar. If you believe\n'
'that you will need one or more of these alternate calendars, enable\n'
'alternate calendar support\n'))
box.add(label)
align = gtk.Alignment(0.5,0)
box.add(align)
vbox = gtk.VBox()
vbox.set_spacing(6)
box.show_all()
return p
def build_page5(self): def build_page5(self):
p = gnome.ui.DruidPageStandard() p = gnome.ui.DruidPageStandard()
p.set_title(_('LDS extensions')) p.set_title(_('LDS extensions'))

View File

@ -28,20 +28,6 @@
</locale> </locale>
</schema> </schema>
<schema>
<key>/schemas/apps/gramps/preferences/date-entry</key>
<applyto>/apps/gramps/preferences/date-entry</applyto>
<owner>gramps</owner>
<type>int</type>
<default>0</default>
<locale name="C">
<short>Date entry format</short>
<long>This key determines the date entry format. O corresponds to
the MM/DD/YYYY (US format), 1 corrsponds to DD/MM/YYYY (European
format), and 2 corresponds to YYYY-MM-DD (ISO format).</long>
</locale>
</schema>
<schema> <schema>
<key>/schemas/apps/gramps/preferences/date-format</key> <key>/schemas/apps/gramps/preferences/date-format</key>
<applyto>/apps/gramps/preferences/date-format</applyto> <applyto>/apps/gramps/preferences/date-format</applyto>

View File

@ -13,6 +13,11 @@
<property name="default_height">500</property> <property name="default_height">500</property>
<property name="resizable">True</property> <property name="resizable">True</property>
<property name="destroy_with_parent">False</property> <property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<child> <child>
<widget class="GtkVBox" id="vbox5"> <widget class="GtkVBox" id="vbox5">
@ -181,6 +186,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="editable">False</property> <property name="editable">False</property>
<property name="overwrite">False</property>
<property name="accepts_tab">True</property>
<property name="justification">GTK_JUSTIFY_LEFT</property> <property name="justification">GTK_JUSTIFY_LEFT</property>
<property name="wrap_mode">GTK_WRAP_WORD</property> <property name="wrap_mode">GTK_WRAP_WORD</property>
<property name="cursor_visible">True</property> <property name="cursor_visible">True</property>
@ -265,6 +272,8 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="editable">False</property> <property name="editable">False</property>
<property name="overwrite">False</property>
<property name="accepts_tab">True</property>
<property name="justification">GTK_JUSTIFY_LEFT</property> <property name="justification">GTK_JUSTIFY_LEFT</property>
<property name="wrap_mode">GTK_WRAP_NONE</property> <property name="wrap_mode">GTK_WRAP_NONE</property>
<property name="cursor_visible">True</property> <property name="cursor_visible">True</property>
@ -486,6 +495,7 @@
<property name="label">gtk-close</property> <property name="label">gtk-close</property>
<property name="use_stock">True</property> <property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property> <property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="destroy_passed_object" object="status"/> <signal name="clicked" handler="destroy_passed_object" object="status"/>
</widget> </widget>
</child> </child>
@ -500,4 +510,185 @@
</child> </child>
</widget> </widget>
<widget class="GtkDialog" id="encoding">
<property name="width_request">400</property>
<property name="visible">True</property>
<property name="title" translatable="yes">GRAMPS - GEDCOM Encoding</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="okbutton1">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-ok</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-5</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox6">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label17">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;span size=&quot;larger&quot; weight=&quot;bold&quot;&gt;GEDCOM Encoding&lt;/span&gt;</property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">6</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label18">
<property name="visible">True</property>
<property name="label" translatable="yes">This GEDCOM file has identified itself as using ANSEL enconding. Sometimes, this is in error. If the imported data contains unusual characters, undo the import, and override the character set by selecting a different encoding below.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">True</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">6</property>
<property name="ypad">6</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<placeholder/>
</child>
<child>
<widget class="GtkHBox" id="hbox2">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkLabel" id="label19">
<property name="visible">True</property>
<property name="label" translatable="yes">Encoding: </property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkComboBox" id="codeset">
<property name="visible">True</property>
<property name="items" translatable="yes">ANSEL
ANSI (iso-8859-1)
ASCII
UNICODE</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface> </glade-interface>

View File

@ -56,6 +56,7 @@ else:
try: try:
locale.setlocale(locale.LC_ALL,'') locale.setlocale(locale.LC_ALL,'')
locale.setlocale(locale.LC_TIME,os.environ.get('LANG','C'))
except locale.Error: except locale.Error:
pass pass
except ValueError: except ValueError: