From f517351802753dcee71db34264b8a0550d41d1ae Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Tue, 27 Sep 2005 03:45:19 +0000 Subject: [PATCH] * src/docgen/PSDrawDoc.py: locale independent floating point * src/DateDisplay.py: Better french republican date handling * src/DateParser.py: Better french republican date handling svn: r5242 --- gramps2/ChangeLog | 5 ++ gramps2/src/DateDisplay.py | 17 +++++- gramps2/src/DateParser.py | 31 ++++------- gramps2/src/Utils.py | 2 +- gramps2/src/docgen/PSDrawDoc.py | 97 +++++++++++++++++++-------------- 5 files changed, 87 insertions(+), 65 deletions(-) diff --git a/gramps2/ChangeLog b/gramps2/ChangeLog index 0afb57599..1bc176f36 100644 --- a/gramps2/ChangeLog +++ b/gramps2/ChangeLog @@ -1,3 +1,8 @@ +2005-09-26 Don Allingham + * src/docgen/PSDrawDoc.py: locale independent floating point + * src/DateDisplay.py: Better french republican date handling + * src/DateParser.py: Better french republican date handling + 2005-09-26 Alex Roitman * src/plugins/ChangeNames.py: Convert to the new scheme. * src/plugins/Checkpoint.py: Convert to new scheme, improve. diff --git a/gramps2/src/DateDisplay.py b/gramps2/src/DateDisplay.py index f8dc4f798..46e0c0803 100644 --- a/gramps2/src/DateDisplay.py +++ b/gramps2/src/DateDisplay.py @@ -290,9 +290,22 @@ class DateDisplay: else: return value - def _display_french(self,date_val): - return self._display_calendar(date_val,self._french) + year = abs(date_val[2]) + if self.format == 0 or self.format == 1: + return self.display_iso(date_val) + else: + if date_val[0] == 0: + if date_val[1] == 0: + value = year + else: + value = u"%s %d" % (self._french[date_val[1]],year) + else: + value = u"%d %s %s" % (date_val[0],self._french[date_val[1]],year) + if date_val[2] < 0: + return self._bce_str % value + else: + return value def _display_hebrew(self,date_val): return self._display_calendar(date_val,self._hebrew) diff --git a/gramps2/src/DateParser.py b/gramps2/src/DateParser.py index 96bc0645f..05703d7c7 100644 --- a/gramps2/src/DateParser.py +++ b/gramps2/src/DateParser.py @@ -209,6 +209,7 @@ class DateParser: self.parser = { Date.CAL_GREGORIAN : self._parse_greg_julian, Date.CAL_JULIAN : self._parse_greg_julian, + Date.CAL_FRENCH : self._parse_french, Date.CAL_PERSIAN : self._parse_persian, Date.CAL_HEBREW : self._parse_hebrew, Date.CAL_ISLAMIC : self._parse_islamic, @@ -541,6 +542,8 @@ class DateParser: """ Parses the text and sets the date according to the parsing. """ + + date.set_text_value(text) qual = Date.QUAL_NONE cal = Date.CAL_GREGORIAN @@ -555,27 +558,13 @@ class DateParser: (text,bc) = self.match_bce(text) if self.match_modifier(text,cal,qual,bc,date): return - - subdate = self._parse_subdate(text) - if subdate == Date.EMPTY: - subdate = self._parse_hebrew(text) - if subdate == Date.EMPTY: - subdate = self._parse_persian(text) - if subdate == Date.EMPTY: - subdate = self._parse_islamic(text) - if subdate == Date.EMPTY: - subdate = self._parse_french(text) - if subdate == Date.EMPTY: - date.set_as_text(text) - return - else: - cal = Date.CAL_FRENCH - else: - cal = Date.CAL_ISLAMIC - else: - cal = Date.CAL_PERSIAN - else: - cal = Date.CAL_HEBREW + + + try: + subdate = self._parse_subdate(text,self.parser[cal]) + except: + date.set_as_text(text) + return if bc: date.set(qual,Date.MOD_NONE,cal,self.invert_year(subdate)) diff --git a/gramps2/src/Utils.py b/gramps2/src/Utils.py index fcebb0eea..eaf0dca76 100644 --- a/gramps2/src/Utils.py +++ b/gramps2/src/Utils.py @@ -377,7 +377,7 @@ def gfloat(val): return 0.0 def gformat(val): - """Performs ("%.3f" % val) formatting with the resulting string always + """Performs ('%.3f' % val) formatting with the resulting string always using dot ('.') as a decimal point. Useful for writing float values into XML when under non-English locale. diff --git a/gramps2/src/docgen/PSDrawDoc.py b/gramps2/src/docgen/PSDrawDoc.py index f1ae63573..7735e4098 100644 --- a/gramps2/src/docgen/PSDrawDoc.py +++ b/gramps2/src/docgen/PSDrawDoc.py @@ -38,6 +38,14 @@ import Errors import BaseDoc from Report import run_print_dialog from ReportUtils import pt2cm, rgb_color +from Utils import gformat + +def lrgb(grp): + grp = rgb_color(grp) + return (gformat(grp[0]),gformat(grp[1]),gformat(grp[2])) + +def coords(grp): + return (gformat(grp[0]),gformat(grp[1])) #------------------------------------------------------------------------- # @@ -139,7 +147,8 @@ class PSDrawDoc(BaseDoc.BaseDoc): self.f.write("%%Page:") self.f.write("%d %d\n" % (self.page,self.page)) if self.orientation != BaseDoc.PAPER_PORTRAIT: - self.f.write('90 rotate %5.2f cm %5.2f cm translate\n' % (0,-1*self.height)) + self.f.write('90 rotate %s cm %s cm translate\n' % ( + gformat(0),gformat(-1*self.height))) def end_page(self): self.f.write('showpage\n') @@ -165,10 +174,10 @@ class PSDrawDoc(BaseDoc.BaseDoc): (text,fdef) = self.encode_text(p,text) self.f.write('gsave\n') - self.f.write('%.4f %.4f %.4f setrgbcolor\n' % rgb_color(stype.get_color())) + self.f.write('%s %s %s setrgbcolor\n' % lrgb(stype.get_color())) self.f.write(fdef) self.f.write('(%s) dup stringwidth pop -2 div ' % text) - self.f.write('%.4f cm add %.4f cm moveto ' % self.translate(x,y)) + self.f.write('%s cm add %s cm moveto ' % coords(self.translate(x,y))) self.f.write('show\n') self.f.write('grestore\n') @@ -183,7 +192,7 @@ class PSDrawDoc(BaseDoc.BaseDoc): (text,fdef) = self.encode_text(p,text) self.f.write('gsave\n') - self.f.write('%f cm %f cm moveto\n' % self.translate(x1,y1)) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x1,y1))) self.f.write(fdef) self.f.write('(%s) show grestore\n' % text) @@ -254,17 +263,19 @@ class PSDrawDoc(BaseDoc.BaseDoc): self.f.write('gsave\n') self.f.write(fdef) - self.f.write('%4.2f cm %4.2f cm translate\n' % self.translate(x,y)) - self.f.write('%4.2f rotate\n' % -angle) + coords = self.translate(x,y) + self.f.write('%s cm %s cm translate\n' % ( + gformat(coords[0]),gformat(coords[1]))) + self.f.write('%s rotate\n' % gformat(-angle)) - self.f.write('%.4f %.4f %.4f setrgbcolor\n' % rgb_color(stype.get_color())) + self.f.write('%s %s %s setrgbcolor\n' % lrgb(stype.get_color())) val = len(text) y = ((size * val)/2.0) - size for line in text: self.f.write('(%s) dup stringwidth pop -2 div '% line.encode('iso-8859-1')) - self.f.write("%.4f moveto show\n" % y) + self.f.write("%s moveto show\n" % gformat(y)) y -= size self.f.write('grestore\n') @@ -273,7 +284,7 @@ class PSDrawDoc(BaseDoc.BaseDoc): stype = self.draw_styles[style] self.f.write('gsave\n') self.f.write('newpath\n') - self.f.write('%.4f setlinewidth\n' % stype.get_line_width()) + self.f.write('%s setlinewidth\n' % gformat(stype.get_line_width())) if stype.get_line_style() == BaseDoc.SOLID: self.f.write('[] 0 setdash\n') else: @@ -282,17 +293,17 @@ class PSDrawDoc(BaseDoc.BaseDoc): point = path[0] x1 = point[0]+self.lmargin y1 = point[1]+self.tmargin - self.f.write('%f cm %f cm moveto\n' % self.translate(x1,y1)) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x1,y1))) for point in path[1:]: x1 = point[0]+self.lmargin y1 = point[1]+self.tmargin - self.f.write('%f cm %f cm lineto\n' % self.translate(x1,y1)) + self.f.write('%s cm %s cm lineto\n' % coords(self.translate(x1,y1))) self.f.write('closepath\n') color = stype.get_fill_color() - self.f.write('gsave %.4f %.4f %.4f setrgbcolor fill grestore\n' % rgb_color(color)) - self.f.write('%.4f %.4f %.4f setrgbcolor stroke\n' % rgb_color(stype.get_color())) + self.f.write('gsave %s %s %s setrgbcolor fill grestore\n' % lrgb(color)) + self.f.write('%s %s %s setrgbcolor stroke\n' % lrgb(stype.get_color())) self.f.write('grestore\n') def draw_line(self,style,x1,y1,x2,y2): @@ -302,16 +313,16 @@ class PSDrawDoc(BaseDoc.BaseDoc): y2 = y2 + self.tmargin stype = self.draw_styles[style] self.f.write('gsave newpath\n') - self.f.write('%f cm %f cm moveto\n' % self.translate(x1,y1)) - self.f.write('%f cm %f cm lineto\n' % self.translate(x2,y2)) - self.f.write('%.4f setlinewidth\n' % stype.get_line_width()) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x1,y1))) + self.f.write('%s cm %s cm lineto\n' % coords(self.translate(x2,y2))) + self.f.write('%s setlinewidth\n' % gformat(stype.get_line_width())) if stype.get_line_style() == BaseDoc.SOLID: self.f.write('[] 0 setdash\n') else: self.f.write('[2 4] 0 setdash\n') self.f.write('2 setlinecap\n') - self.f.write('%.4f %.4f %.4f setrgbcolor stroke\n' % rgb_color(stype.get_color())) + self.f.write('%s %s %s setrgbcolor stroke\n' % lrgb(stype.get_color())) self.f.write('grestore\n') def patch_text(self,text): @@ -326,7 +337,7 @@ class PSDrawDoc(BaseDoc.BaseDoc): (text,fdef) = self.encode_text(para_style,text) self.f.write('gsave\n') - self.f.write('%f cm %f cm moveto\n' % self.translate(x,y)) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x,y))) self.f.write(fdef) self.f.write('(%s) show grestore\n' % text) @@ -341,14 +352,14 @@ class PSDrawDoc(BaseDoc.BaseDoc): color = rgb_color(box_type.get_color()) self.f.write('gsave\n') - self.f.write("%f cm %f cm moveto\n" % self.translate(x1,y1)) - self.f.write("0 %f cm rlineto\n" % (y2-y1)) - self.f.write("%f cm 0 rlineto\n" % (x2-x1)) - self.f.write("0 %f cm rlineto\n" % (y1-y2)) + self.f.write("%s cm %s cm moveto\n" % coords(self.translate(x1,y1))) + self.f.write("0 %s cm rlineto\n" % gformat(y2-y1)) + self.f.write("%s cm 0 rlineto\n" % gformat(x2-x1)) + self.f.write("0 %s cm rlineto\n" % gformat(y1-y2)) self.f.write('closepath\n') - self.f.write("%.4f setlinewidth\n" % box_type.get_line_width()) - self.f.write('gsave %.4f %.4f %.4f setrgbcolor fill grestore\n' % fill_color) - self.f.write('%.4f %.4f %.4f setrgbcolor stroke\n' % color) + self.f.write("%s setlinewidth\n" % gformat(box_type.get_line_width())) + self.f.write('gsave %s %s %s setrgbcolor fill grestore\n' % lrgb(fill_color)) + self.f.write('%s %s %s setrgbcolor stroke\n' % lrgb(color)) self.f.write('grestore\n') def draw_box(self,style,text,x,y): @@ -366,34 +377,38 @@ class PSDrawDoc(BaseDoc.BaseDoc): shadsize = box_style.get_shadow_space() if box_style.get_shadow(): self.f.write('newpath\n') - self.f.write('%f cm %f cm moveto\n' % self.translate(x+shadsize,y+shadsize)) - self.f.write('0 -%f cm rlineto\n' % bh) - self.f.write('%f cm 0 rlineto\n' % bw) - self.f.write('0 %f cm rlineto\n' % bh) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x+shadsize,y+shadsize))) + self.f.write('0 -%s cm rlineto\n' % gformat(bh)) + self.f.write('%s cm 0 rlineto\n' % gformat(bw)) + self.f.write('0 %s cm rlineto\n' % gformat(bh)) self.f.write('closepath\n') self.f.write('.5 setgray\n') self.f.write('fill\n') self.f.write('newpath\n') - self.f.write('%f cm %f cm moveto\n' % self.translate(x,y)) - self.f.write('0 -%f cm rlineto\n' % bh) - self.f.write('%f cm 0 rlineto\n' % bw) - self.f.write('0 %f cm rlineto\n' % bh) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x,y))) + self.f.write('0 -%s cm rlineto\n' % gformat(bh)) + self.f.write('%s cm 0 rlineto\n' % gformat(bw)) + self.f.write('0 %s cm rlineto\n' % gformat(bh)) self.f.write('closepath\n') self.f.write('1 setgray\n') self.f.write('fill\n') self.f.write('newpath\n') if box_style.get_line_width(): - self.f.write('%f cm %f cm moveto\n' % self.translate(x,y)) - self.f.write('0 -%f cm rlineto\n' % bh) - self.f.write('%f cm 0 rlineto\n' % bw) - self.f.write('0 %f cm rlineto\n' % bh) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x,y))) + self.f.write('0 -%s cm rlineto\n' % gformat(bh)) + self.f.write('%s cm 0 rlineto\n' % gformat(bw)) + self.f.write('0 %s cm rlineto\n' % gformat(bh)) self.f.write('closepath\n') - self.f.write('%.4f setlinewidth\n' % box_style.get_line_width()) - self.f.write('%.4f %.4f %.4f setrgbcolor stroke\n' % rgb_color(box_style.get_color())) + self.f.write('%s setlinewidth\n' % gformat(box_style.get_line_width())) + self.f.write('%s %s %s setrgbcolor stroke\n' % lrgb(box_style.get_color())) if text != "": (text,fdef) = self.encode_text(p,text) self.f.write(fdef) - lines = '\n'.split(text) + lines = text.split('\n') + + print text + print lines + nlines = len(lines) mar = 10/28.35 f_in_cm = p.get_font().get_size()/28.35 @@ -402,7 +417,7 @@ class PSDrawDoc(BaseDoc.BaseDoc): ystart = center - (fs/2.0) * nlines for i in range(nlines): ypos = ystart + (i * fs) - self.f.write('%f cm %f cm moveto\n' % self.translate(x+mar,ypos)) + self.f.write('%s cm %s cm moveto\n' % coords(self.translate(x+mar,ypos))) self.f.write("(%s) show\n" % lines[i]) self.f.write('grestore\n')