You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(115) |
Aug
(120) |
Sep
(137) |
Oct
(170) |
Nov
(461) |
Dec
(263) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(120) |
Feb
(74) |
Mar
(35) |
Apr
(74) |
May
(245) |
Jun
(356) |
Jul
(240) |
Aug
(115) |
Sep
(78) |
Oct
(225) |
Nov
(98) |
Dec
(271) |
2009 |
Jan
(132) |
Feb
(84) |
Mar
(74) |
Apr
(56) |
May
(90) |
Jun
(79) |
Jul
(83) |
Aug
(296) |
Sep
(214) |
Oct
(76) |
Nov
(82) |
Dec
(66) |
2010 |
Jan
(46) |
Feb
(58) |
Mar
(51) |
Apr
(77) |
May
(58) |
Jun
(126) |
Jul
(128) |
Aug
(64) |
Sep
(50) |
Oct
(44) |
Nov
(48) |
Dec
(54) |
2011 |
Jan
(68) |
Feb
(52) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
|
1
|
2
(1) |
3
(4) |
4
(9) |
5
(14) |
6
(8) |
7
(14) |
8
(1) |
9
(2) |
10
(9) |
11
(5) |
12
(11) |
13
(4) |
14
(4) |
15
(1) |
16
|
17
(1) |
18
(2) |
19
(4) |
20
(10) |
21
(3) |
22
(3) |
23
(2) |
24
(8) |
25
(6) |
26
(5) |
27
|
28
(3) |
29
|
30
(3) |
|
|
|
|
|
|
Revision: 3771 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3771&view=rev Author: jouni Date: 2007年09月03日 15:16:19 -0700 (2007年9月03日) Log Message: ----------- Fix some obvious bugs in Type 1 font support; now it at least produces a pdf file, at least with Computer Modern Roman, but viewer applications complain that the fonts are broken. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2007年09月03日 21:36:17 UTC (rev 3770) +++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2007年09月03日 22:16:19 UTC (rev 3771) @@ -515,21 +515,30 @@ _, _, fullname, familyname, weight, italic_angle, fixed_pitch, \ ul_position, ul_thickness = font.get_ps_font_info() - differencesArray = [ 0 ] + [ Name(ch) for ch in - dviread.Encoding(fontinfo.encoding) ] + if fontinfo.encodingfile is not None: + differencesArray = [ Name(ch) for ch in + dviread.Encoding(fontinfo.encodingfile) ] + differencesArray = [ 0 ] + differencesArray + lastchar = len(differencesArray) - 2 + else: + lastchar = 255 # ? fontdict = { 'Type': Name('Font'), 'Subtype': Name('Type1'), 'BaseFont': Name(font.postscript_name), 'FirstChar': 0, - 'LastChar': len(differencesArray) - 2, + 'LastChar': lastchar, 'Widths': widthsObject, 'FontDescriptor': fontdescObject, - 'Encoding': { 'Type': Name('Encoding'), - 'Differences': differencesArray }, } + if fontinfo.encodingfile is not None: + fontdict.update({ + 'Encoding': { 'Type': Name('Encoding'), + 'Differences': differencesArray }, + }) + flags = 0 if fixed_pitch: flags |= 1 << 0 # fixed width if 0: flags |= 1 << 1 # TODO: serif @@ -570,11 +579,11 @@ descriptor['StemH'] = StemH self.writeObject(fontdictObject, fontdict) - self.writeObject(widthsObject, widths) + self.writeObject(widthsObject, [ 100 for i in range(256)]) # XXX TODO self.writeObject(fontdescObject, descriptor) fontdata = type1font.Type1Font(filename) - len1, len2, len3 = fontdata.lenghts() + len1, len2, len3 = fontdata.lengths() self.beginStream(fontfileObject.id, None, { 'Length1': len1, 'Length2': len2, @@ -1386,14 +1395,8 @@ self.file.output(Op.grestore) def _draw_tex(self, gc, x, y, s, prop, angle): - # Rename to draw_tex to enable, but note the following: - # TODO: - # - font sizes other than 10pt - # - fonts other than the three ttf files included with matplotlib - # (will need to support Type-1 fonts and find them with kpsewhich) - # - encoding issues (e.g. \alpha doesn't work now) - # - overall robustness - # - ... + # Rename to draw_tex to enable, but it doesn't work at the moment + texmanager = self.get_texmanager() fontsize = prop.get_size_in_points() dvifile = texmanager.make_dvi(s, fontsize) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 3770 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3770&view=rev Author: jouni Date: 2007年09月03日 14:36:17 -0700 (2007年9月03日) Log Message: ----------- Created new file type1font.py for supporting Type 1 fonts; quite preliminary for now. Started adding Type 1 support to PDF backend for purposes of usetex. Modified Paths: -------------- trunk/matplotlib/API_CHANGES trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/afm.py trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py trunk/matplotlib/lib/matplotlib/dviread.py trunk/matplotlib/src/ft2font.cpp trunk/matplotlib/src/ft2font.h Added Paths: ----------- trunk/matplotlib/lib/matplotlib/type1font.py Modified: trunk/matplotlib/API_CHANGES =================================================================== --- trunk/matplotlib/API_CHANGES 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/API_CHANGES 2007年09月03日 21:36:17 UTC (rev 3770) @@ -1,3 +1,18 @@ + The dviread.py file now has a parser for files like psfonts.map + and pdftex.map, to map TeX font names to external files. + + The file type1font.py contains a new class for Type 1 fonts. + Currently it simply reads pfa and pfb format files and stores the + data in pfa format, which is the format for embedding Type 1 fonts + in postscript and pdf files. In the future the class might + actually parse the font to allow e.g. subsetting. + + FT2Font now supports FT_Attach_File. In practice this can be used + to read an afm file in addition to a pfa/pfb file, to get metrics + and kerning information for a Type 1 font. + + The AFM class now supports querying CapHeight and stem widths. + Changed pcolor default to shading='flat'; but as noted now in the docstring, it is preferable to simply use the edgecolor kwarg. Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/CHANGELOG 2007年09月03日 21:36:17 UTC (rev 3770) @@ -1,3 +1,9 @@ +2007年09月03日 Created type1font.py, added features to AFM and FT2Font + (see API_CHANGES), started work on embedding Type 1 fonts + in pdf files. - JKS + +2007年09月02日 Continued work on dviread.py. - JKS + 2007年08月16日 Added a set_extent method to AxesImage, allow data extent to be modified after initial call to imshow - DSD Modified: trunk/matplotlib/lib/matplotlib/afm.py =================================================================== --- trunk/matplotlib/lib/matplotlib/afm.py 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/lib/matplotlib/afm.py 2007年09月03日 21:36:17 UTC (rev 3770) @@ -103,7 +103,8 @@ 'Version': _to_str, 'Notice': _to_str, 'EncodingScheme': _to_str, - 'CapHeight': _to_float, + 'CapHeight': _to_float, # Is the second version a mistake, or + 'Capheight': _to_float, # do some AFM files contain 'Capheight'? -JKS 'XHeight': _to_float, 'Ascender': _to_float, 'Descender': _to_float, @@ -112,7 +113,6 @@ 'StartCharMetrics': _to_int, 'CharacterSet': _to_str, 'Characters': _to_int, - 'Capheight': _to_int, } d = {} @@ -446,6 +446,10 @@ "Return the fontangle as float" return self._header['ItalicAngle'] + def get_capheight(self): + "Return the cap height as float" + return self._header['CapHeight'] + def get_xheight(self): "Return the xheight as float" return self._header['XHeight'] @@ -453,6 +457,20 @@ def get_underline_thickness(self): "Return the underline thickness as float" return self._header['UnderlineThickness'] + + def get_horizontal_stem_width(self): + """ + Return the standard horizontal stem width as float, or None if + not specified in AFM file. + """ + return self._header.get('StdHW', None) + + def get_vertical_stem_width(self): + """ + Return the standard vertical stem width as float, or None if + not specified in AFM file. + """ + return self._header.get('StdVW', None) if __name__=='__main__': Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2007年09月03日 21:36:17 UTC (rev 3770) @@ -26,7 +26,8 @@ from matplotlib.figure import Figure from matplotlib.font_manager import findfont from matplotlib.afm import AFM -from matplotlib.dviread import Dvi +import matplotlib.type1font as type1font +import matplotlib.dviread as dviread from matplotlib.ft2font import FT2Font, FIXED_WIDTH, ITALIC, LOAD_NO_SCALE, \ LOAD_NO_HINTING, KERNING_UNFITTED from matplotlib.mathtext import MathTextParser @@ -367,6 +368,7 @@ # self.fontNames maps filenames to internal font names self.fontNames = {} self.nextFont = 1 # next free internal font name + self.fontInfo = {} # information on fonts: metrics, encoding self.alphaStates = {} # maps alpha values to graphics state objects self.nextAlphaState = 1 @@ -438,6 +440,12 @@ self.currentstream = None def fontName(self, fontprop): + """ + Select a font based on fontprop and return a name suitable for + Op.selectfont. If fontprop is a string, it will be interpreted + as the filename of the font. + """ + if is_string_like(fontprop): filename = fontprop elif rcParams['pdf.use14corefonts']: @@ -458,6 +466,9 @@ for filename, Fx in self.fontNames.items(): if filename.endswith('.afm'): fontdictObject = self._write_afm_font(filename) + elif filename.endswith('.pfb') or filename.endswith('.pfa'): + # a Type 1 font; limited support for now + fontdictObject = self.embedType1(filename, self.fontInfo[Fx]) else: realpath, stat_key = get_realpath_and_stat(filename) chars = self.used_characters.get(stat_key) @@ -480,6 +491,97 @@ self.writeObject(fontdictObject, fontdict) return fontdictObject + def embedType1(self, filename, fontinfo): + fh = open(filename, 'rb') + try: + fontdata = fh.read() + finally: + fh.close() + + fh = open(fontinfo.afmfile, 'rb') + try: + afmdata = AFM(fh) + finally: + fh.close() + + font = FT2Font(filename) + font.attach_file(fontinfo.afmfile) + + widthsObject, fontdescObject, fontdictObject, fontfileObject = \ + [ self.reserveObject(n) for n in + ('font widths', 'font descriptor', + 'font dictionary', 'font file') ] + + _, _, fullname, familyname, weight, italic_angle, fixed_pitch, \ + ul_position, ul_thickness = font.get_ps_font_info() + + differencesArray = [ 0 ] + [ Name(ch) for ch in + dviread.Encoding(fontinfo.encoding) ] + + fontdict = { + 'Type': Name('Font'), + 'Subtype': Name('Type1'), + 'BaseFont': Name(font.postscript_name), + 'FirstChar': 0, + 'LastChar': len(differencesArray) - 2, + 'Widths': widthsObject, + 'FontDescriptor': fontdescObject, + 'Encoding': { 'Type': Name('Encoding'), + 'Differences': differencesArray }, + } + + flags = 0 + if fixed_pitch: flags |= 1 << 0 # fixed width + if 0: flags |= 1 << 1 # TODO: serif + if 0: flags |= 1 << 2 # TODO: symbolic + else: flags |= 1 << 5 # non-symbolic + if italic_angle: flags |= 1 << 6 # italic + if 0: flags |= 1 << 16 # TODO: all caps + if 0: flags |= 1 << 17 # TODO: small caps + if 0: flags |= 1 << 18 # TODO: force bold + + descriptor = { + 'Type': Name('FontDescriptor'), + 'FontName': Name(font.postscript_name), + 'Flags': flags, + 'FontBBox': font.bbox, + 'ItalicAngle': italic_angle, + 'Ascent': font.ascender, + 'Descent': font.descender, + 'CapHeight': afmdata.get_capheight(), + 'XHeight': afmdata.get_xheight(), + 'FontFile': fontfileObject, + 'FontFamily': Name(familyname), + #'FontWeight': a number where 400 = Regular, 700 = Bold + } + + # StemV is obligatory in PDF font descriptors but optional in + # AFM files. The collection of AFM files in my TeX Live 2007 + # collection has values ranging from 22 to 219, with both + # median and mode 50, so if the AFM file is silent, I'm + # guessing 50. -JKS + StemV = afmdata.get_vertical_stem_width() + if StemV is None: StemV = 50 + descriptor['StemV'] = StemV + + # StemH is entirely optional: + StemH = afmdata.get_horizontal_stem_width() + if StemH is not None: + descriptor['StemH'] = StemH + + self.writeObject(fontdictObject, fontdict) + self.writeObject(widthsObject, widths) + self.writeObject(fontdescObject, descriptor) + + fontdata = type1font.Type1Font(filename) + len1, len2, len3 = fontdata.lenghts() + self.beginStream(fontfileObject.id, None, + { 'Length1': len1, + 'Length2': len2, + 'Length3': len3 }) + self.currentstream.write(fontdata.data) + self.endStream() + def _get_xobject_symbol_name(self, filename, symbol_name): return "%s-%s" % ( os.path.splitext(os.path.basename(filename))[0], @@ -1034,6 +1136,7 @@ self.encode_string = self.encode_string_type42 self.mathtext_parser = MathTextParser("Pdf") self.image_magnification = dpi/72.0 + self.tex_font_map = None def finalize(self): self.gc.finalize() @@ -1050,6 +1153,12 @@ # Restore gc to avoid unwanted side effects gc._fillcolor = orig_fill + def tex_font_mapping(self, texfont): + if self.tex_font_map is None: + self.tex_font_map = \ + dviread.PsfontsMap(dviread.find_tex_file('pdftex.map')) + return self.tex_font_map[texfont] + def track_characters(self, font, s): """Keeps track of which characters are required from each font.""" @@ -1288,9 +1397,8 @@ texmanager = self.get_texmanager() fontsize = prop.get_size_in_points() dvifile = texmanager.make_dvi(s, fontsize) - dvi = Dvi(dvifile, 72) + dvi = dviread.Dvi(dvifile, 72) text, boxes = iter(dvi).next() - fontdir = os.path.join(get_data_path(), 'fonts', 'ttf') if angle == 0: # avoid rounding errors in common case def mytrans(x1, y1): @@ -1303,14 +1411,17 @@ self.check_gc(gc, gc._rgb) self.file.output(Op.begin_text) - oldfont, oldx, oldy = None, 0, 0 - for x1, y1, font, glyph in text: - if font != oldfont: - fontname, fontsize = dvi.fontinfo(font) - fontfile = os.path.join(fontdir, fontname+'.ttf') - self.file.output(self.file.fontName(fontfile), - fontsize, Op.selectfont) - oldfont = font + oldfontnum, oldx, oldy = None, 0, 0 + for x1, y1, fontnum, glyph in text: + if fontnum != oldfontnum: + texname, fontsize = dvi.fontinfo(fontnum) + fontinfo = self.tex_font_mapping(texname) + pdfname = self.file.fontName(fontinfo.filename) + self.file.fontInfo[pdfname] = Bunch( + encodingfile=fontinfo.encoding, + afmfile=fontinfo.afm) + self.file.output(pdfname, fontsize, Op.selectfont) + oldfontnum = fontnum x1, y1 = mytrans(x1, y1) self._setup_textpos(x1, y1, angle, oldx, oldy) self.file.output(chr(glyph), Op.show) Modified: trunk/matplotlib/lib/matplotlib/dviread.py =================================================================== --- trunk/matplotlib/lib/matplotlib/dviread.py 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/lib/matplotlib/dviread.py 2007年09月03日 21:36:17 UTC (rev 3770) @@ -410,11 +410,11 @@ def __getitem__(self, texname): result = self._font[texname] - if result.filename is not None \ - and not result.filename.startswith('/'): - result.filename = find_tex_file(result.filename) - if result.encoding is not None \ - and not result.encoding.startswith('/'): + fn, enc = result.filename, result.encoding + if fn is not None and not fn.startswith('/'): + result.filename = find_tex_file(fn) + result.afm = find_tex_file(fn[:-4] + '.afm') + if enc is not None and not enc.startswith('/'): result.encoding = find_tex_file(result.encoding) return result @@ -473,6 +473,51 @@ texname=texname, psname=psname, effects=effects, encoding=encoding, filename=filename) +class Encoding(object): + + def __init__(self, filename): + file = open(filename, 'rt') + try: + self.encoding = self._parse(file) + finally: + file.close() + + def __iter__(self): + for name in self.encoding: + yield name + + def _parse(self, file): + result = [] + + state = 0 + for line in file: + comment_start = line.find('%') + if comment_start > -1: + line = line[:comment_start] + line = line.strip() + + if state == 0: + # Expecting something like /FooEncoding [ + if '[' in line: + state = 1 + line = line[line.index('[')+1].strip() + + if state == 1: + words = line.split() + for w in words: + if w.startswith('/'): + # Allow for /abc/def/ghi + subwords = w.split('/') + result.extend(subwords[1:]) + else: + raise ValueError, "Broken name in encoding file: " + w + + # Expecting ] def + if ']' in line: + break + + return result + def find_tex_file(filename, format=None): """ Call kpsewhich to find a file in the texmf tree. Added: trunk/matplotlib/lib/matplotlib/type1font.py =================================================================== --- trunk/matplotlib/lib/matplotlib/type1font.py (rev 0) +++ trunk/matplotlib/lib/matplotlib/type1font.py 2007年09月03日 21:36:17 UTC (rev 3770) @@ -0,0 +1,95 @@ +""" +A class representing a Type 1 font. + +This version merely allows reading in pfa and pfb files, and stores +the data in pfa format (which can be embedded in PostScript or PDF +files). A more complete class might support subsetting. + +Usage: font = Type1Font(filename) + somefile.write(font.data) # writes out font in pfa format + len1, len2, len3 = font.lengths() # needed for pdf embedding + +Source: Adobe Technical Note #5040, Supporting Downloadable PostScript +Language Fonts. + +If extending this class, see also: Adobe Type 1 Font Format, Adobe +Systems Incorporated, third printing, v1.1, 1993. ISBN 0-201-57044-0. +""" + +import struct + +class Type1Font(object): + + def __init__(self, filename): + file = open(filename, 'rb') + try: + self._read(file) + finally: + file.close() + + def _read(self, file): + rawdata = file.read() + if not rawdata.startswith(chr(128)): + self.data = rawdata + return + + self.data = '' + while len(rawdata) > 0: + if not rawdata.startswith(chr(128)): + raise RuntimeError, \ + 'Broken pfb file (expected byte 128, got %d)' % \ + ord(rawdata[0]) + type = ord(rawdata[1]) + if type in (1,2): + length, = struct.unpack('<i', rawdata[2:6]) + segment = rawdata[6:6+length] + rawdata = rawdata[6+length:] + + if type == 1: # ASCII text: include verbatim + self.data += segment + elif type == 2: # binary data: encode in hexadecimal + self.data += ''.join(['%02x' % ord(char) + for char in segment]) + elif type == 3: # end of file + break + else: + raise RuntimeError, \ + 'Unknown segment type %d in pfb file' % type + + def lengths(self): + """ + Compute the lengths of the three parts of a Type 1 font. + + The three parts are: (1) the cleartext part, which ends in a + eexec operator; (2) the encrypted part; (3) the fixed part, + which contains 512 ASCII zeros possibly divided on various + lines, a cleartomark operator, and possibly something else. + """ + + # Cleartext part: just find the eexec and skip the eol char(s) + idx = self.data.index('eexec') + idx += len('eexec') + while self.data[idx] in ('\n', '\r'): + idx += 1 + len1 = idx + + # Encrypted part: find the cleartomark operator and count + # zeros backward + idx = self.data.rindex('cleartomark') - 1 + zeros = 512 + while zeros and self.data[idx] in ('0', '\n', '\r'): + if self.data[idx] == '0': + zeros -= 1 + idx -= 1 + if zeros: + raise RuntimeError, 'Insufficiently many zeros in Type 1 font' + + len2 = idx - len1 + len3 = len(self.data) - idx + + return len1, len2, len3 + +if __name__ == '__main__': + import sys + font = Type1Font(sys.argv[1]) + sys.stdout.write(font.data) Modified: trunk/matplotlib/src/ft2font.cpp =================================================================== --- trunk/matplotlib/src/ft2font.cpp 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/src/ft2font.cpp 2007年09月03日 21:36:17 UTC (rev 3770) @@ -1552,11 +1552,11 @@ } Py::Tuple info(9); - info[0] = Py::String(fontinfo.version); - info[1] = Py::String(fontinfo.notice); - info[2] = Py::String(fontinfo.full_name); - info[3] = Py::String(fontinfo.family_name); - info[4] = Py::String(fontinfo.weight); + info[0] = Py::String(fontinfo.version ? fontinfo.version : ""); + info[1] = Py::String(fontinfo.notice ? fontinfo.notice : ""); + info[2] = Py::String(fontinfo.full_name ? fontinfo.full_name : ""); + info[3] = Py::String(fontinfo.family_name ? fontinfo.family_name : ""); + info[4] = Py::String(fontinfo.weight ? fontinfo.weight : ""); info[5] = Py::Long(fontinfo.italic_angle); info[6] = Py::Int(fontinfo.is_fixed_pitch); info[7] = Py::Int(fontinfo.underline_position); @@ -1788,7 +1788,30 @@ return Py::asObject(image); } +char FT2Font::attach_file__doc__ [] = + "attach_file(filename)\n" + "\n" + "Attach a file with extra information on the font\n" + "(in practice, an AFM file with the metrics of a Type 1 font).\n" + "Throws an exception if unsuccessful.\n"; Py::Object +FT2Font::attach_file (const Py::Tuple &args) { + args.verify_length(1); + + std::string filename = Py::String(args[0]); + FT_Error error = + FT_Attach_File(face, filename.c_str()); + + if (error) { + std::ostringstream s; + s << "Could not attach file " << filename + << " (freetype error code " << error << ")" << std::endl; + throw Py::RuntimeError(s.str()); + } + return Py::Object(); +} + +Py::Object ft2font_module::new_ft2image (const Py::Tuple &args) { args.verify_length(2); @@ -1894,6 +1917,8 @@ FT2Font::get_sfnt_table__doc__); add_varargs_method("get_image", &FT2Font::get_image, FT2Font::get_image__doc__); + add_varargs_method("attach_file", &FT2Font::attach_file, + FT2Font::attach_file__doc__); behaviors().supportGetattr(); behaviors().supportSetattr(); @@ -1949,6 +1974,7 @@ " max_advance_height same for vertical layout\n" " underline_position vertical position of the underline bar\n" " underline_thickness vertical thickness of the underline\n" +" postscript_name PostScript name of the font\n" ; #if defined(_MSC_VER) Modified: trunk/matplotlib/src/ft2font.h =================================================================== --- trunk/matplotlib/src/ft2font.h 2007年09月03日 18:27:22 UTC (rev 3769) +++ trunk/matplotlib/src/ft2font.h 2007年09月03日 21:36:17 UTC (rev 3770) @@ -122,6 +122,7 @@ Py::Object get_ps_font_info(const Py::Tuple & args); Py::Object get_sfnt_table(const Py::Tuple & args); Py::Object get_image(const Py::Tuple & args); + Py::Object attach_file(const Py::Tuple & args); int setattr( const char *_name, const Py::Object &value ); Py::Object getattr( const char *_name ); FT2Image* image; @@ -163,6 +164,7 @@ static char get_ps_font_info__doc__[]; static char get_sfnt_table__doc__[]; static char get_image__doc__[]; + static char attach_file__doc__[]; }; // the extension module This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 3769 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3769&view=rev Author: efiring Date: 2007年09月03日 11:27:22 -0700 (2007年9月03日) Log Message: ----------- Added example of a standalone colorbar. Added Paths: ----------- trunk/matplotlib/examples/colorbar_only.py Added: trunk/matplotlib/examples/colorbar_only.py =================================================================== --- trunk/matplotlib/examples/colorbar_only.py (rev 0) +++ trunk/matplotlib/examples/colorbar_only.py 2007年09月03日 18:27:22 UTC (rev 3769) @@ -0,0 +1,28 @@ +''' +Make a colorbar as a separate figure. +''' + +import pylab +import matplotlib as mpl + +# Make a figure and axes with dimensions as desired. +fig = pylab.figure(figsize=(8,1.5)) +ax = fig.add_axes([0.05, 0.4, 0.9, 0.5]) + +# Set the colormap and norm to correspond to the data for which +# the colorbar will be used. +cmap = mpl.cm.cool +norm = mpl.colors.Normalize(vmin=5, vmax=10) + +# ColorbarBase derives from ScalarMappable and puts a colorbar +# in a specified axes, so it has everything needed for a +# standalone colorbar. There are many more kwargs, but the +# following gives a basic continuous colorbar with ticks +# and labels. +cb = mpl.colorbar.ColorbarBase(ax, cmap=cmap, + norm=norm, + orientation='horizontal') +cb.set_label('Some Units') + +pylab.show() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 3768 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=3768&view=rev Author: jouni Date: 2007年09月03日 09:29:08 -0700 (2007年9月03日) Log Message: ----------- Fix buglet in get_text_width_height_descent of backend_agg when text.usetex is in effect. The descent returned is probably not correct, but it should be similar to the one returned by backend_ps. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_agg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2007年09月02日 18:49:20 UTC (rev 3767) +++ trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2007年09月03日 16:29:08 UTC (rev 3768) @@ -228,7 +228,8 @@ texmanager = self.get_texmanager() Z = texmanager.get_rgba(s, size, self.dpi.get(), rgb) m,n,tmp = Z.shape - return n,m + # TODO: descent of TeX text (I am imitating backend_ps here -JKS) + return n, m, m if ismath: ox, oy, width, height, descent, fonts, used_characters = \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.