2005-02-14  Bernhard Herzog  <bh@intevation.de>

	* Filters/svgloader.py (rx_trafo): Modify the regular expression
	to be more efficient, especially in cases where the trailing
	closing parenthesis is missing.

2005-02-01  Bernhard Herzog  <bh@intevation.de>

	* Filters/svgloader.py (SVGLoader.Load): The additional code that
	tries to set up the xml parser not to fetch DTDs doesn't work
	properly with the ancient API we're using in the 0.6 branch and
	apparently it isn't necessary there anyway.  So remove it again.

2005-01-22  Bernhard Herzog  <bh@intevation.de>

	* Filters/svgloader.py: Some backports from HEAD:
	(SVGHandler.parse_path): also accept
	capital Z as closepath command as required by the SVG
	specification.  Savannah Patch #3587 by Bernhard Reiter.
	(SVGLoader.Load): Make sure not to download DTDs etc.

2004-05-29  Bernhard Herzog  <bh@intevation.de>

	* Filters/svgsaver.py (SVGSaver.make_style): Set the fill-rule to
	even-odd for filled shapes.  Patch by Philippe Blayo.  Backport
	from HEAD

2003-11-30  Bernhard Herzog  <bh@intevation.de>

	* Objects/Lib/multilinetext/TextEditor.py (TextEditor.SizeSort) 
	(font_families.xlfd, font_families.ps),
	* Objects/multilinetext.py (MultilineText.recompute): Handle more
	variations on bold and/or italic. 
	Patch by Antoon Pardon

2003-11-29  Bernhard Herzog  <bh@intevation.de>

	* Objects/regpoly.py (RegularPolygon.recompute): The range builtin
	complains about float arguments in Pythion 2.3 so make sure we
	give it an int.

2003-11-29  Bernhard Herzog  <bh@intevation.de>

	* Filters/sksaver.py (tk_file_type),
	* Filters/skloader.py (tk_file_type, SKLoader.__init__),
	* Filters/cgmsaver.py (CGMSaver.SaveDocument),
	* Filters/aisaver.py (AISaver.write_header): 
	Some sketch->skencil fixes for the plugins

2003-11-29  Bernhard Herzog  <bh@intevation.de>

	Patches by Lukasz Pankowski (slightly modified by me):

	* Filters/cgmsaver.py (CGMSaver.PathText): Write a PathText
	object.
	(CGMSaver.SaveObjects): Recognize PathText objects properly.

	* Filters/wmfsaver.py (WMFSaver.PathText): Write a PathText
	object.
	(WMFSaver.SaveObjects): Recognize PathText objects properly.

2003-06-09  Bernhard Herzog  <bh@intevation.de>

	* Filters/wmfsaver.py: New. WMF export filter by Lukasz Pankowski.
	I modified it a little: Now all lines are shorter than 79 chars,
	only spaces are used for indentation, some unused imports are
	removed and the license statement is clarified to say LGPL
	consitently (an error which was copied over from the cgm filters)

2003-05-17  Bernhard Herzog  <bh@intevation.de>

	* Filters/cgmloader.py, Filters/cgmsaver.py: Update the license
	statement so that it says LGPL consistently

2003-04-19  Bernhard Herzog  <bh@intevation.de>

	* Filters/svgsaver.py (SVGSaver.make_style): Add omit_stroke
	parameter so that the stroke properties can be explicitly omitted.
	(SVGSaver.SimpleText): Use the new parameter to make_style to omit
	the stroke properties for text. Otherwise it can happen that the
	SVG file will not be drawn the same way as the original Sketch
	document.

	* Filters/svgloader.py (SVGHandler.__init__): Make initial fill
	color black.

2003-03-01  Bernhard Herzog  <bh@intevation.de>

	* Filters/cgmsaver.py: Updates from Antoon Pardon to make the CGM
	export filter more robust. If the drawing contains features
	unsupported by the filter it produces warning messages.

2003-01-11  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (namedcolors): Update to the complete color
	list of the SVG 1.0 specification
	(SVGHandler.initsvg): Handle the viewBox attribute.
	(SVGHandler.try_add_style): Pretend to apply the transformation
	matrix to the stroke-width. See the comment.
	(SVGHandler.set_loader_style): New method to set the loader's
	graphics properties for the new object. One purpose of this method
	is to strip the font for objects that can't have fonts.
	(SVGHandler.circle, SVGHandler.ellipse, SVGHandler.rect)
	(SVGHandler.polyline, SVGHandler.polygon, SVGHandler.begin_path)
	(SVGHandler.image, SVGHandler.begin_text): Use the new method to
	set the style.

	* Filters/cgmsaver.py: Updates from Antoon Pardon: Rewrote the
	Polybezier method and implemented rectangles and ellipses

	* Filters/cgmloader.py: Updates from Antoon Pardon: Added code for
	searching fonts. Unfortunately loading a CGM file with a fontlist
	now takes considerably longer.

	* Filters/cmxloader.py (CMXInterpreter.get_uint16): New. Read
	usigned 16 bit int.
	(CMXInterpreter.get_tag): The size is an unsigned 16 bit int.
	(CMXInterpreter32.PolyCurve): Handle the tags 'manually' because
	their sizes can't be trusted for very long curves. See comments.

2002-08-31  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/cgmsaver.py, Filters/cgmloader.py: New. Antoon Pardon's
	CGM filters

	* Filters/svgloader.py (SVGHandler.try_add_style): Convert font
	names to 8bit strings.

2002-07-13  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/pdfgensaver.py: Convert tabs to spaces.
	(PDFGenSaver.__init__): Recognize the pdgen_canvas option to allow
	python code to render a document on an existing pdf canvas.
	(PDFGenSaver.close): If the canvas came from the new pdgen_canvas
	option do nothing here.

2002-05-13  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgsaver.py, Filters/svgloader.py,
	Filters/pdfgensaver.py: Correct the license statement to LGPL. It
	should have been LGPL all along, just like the rest of Sketch.

2002-04-18  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgsaver.py (escape): Function to xml-escape text
	(SVGSaver.SimpleText): Escape the actual text properly

	* Filters/bziploader.py (BZIP2Loader.Load): 
	* Filters/gziploader.py (GZIPLoader.Load): Quote the filename
	properly

2002-02-22  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/wmfloader.py (WMFLoader.PolyPolygon): Implement the
	PolyPolygon WMF function.
	Patch by Antoon Pardon.

2002-02-20  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (SVGHandler.parse_style): Ignore styles
	with empty values.
	(SVGHandler.parse_path): Use skread.tokenize_line to parse the
	arguments of a command, so that we deal with a negative number
	immediately following another number properly.

2002-02-19  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/ailoader.py: Add support for text alignment.
	(AILoader.__init__): New ivar text_align
	(AILoader.end_text): Handle text alignment. Add a few comments.
	(AILoader.set_text_align): Handle the Ta operator

	* Filters/ailoader.py: Revert the check for EPSF in the header
	because not all illustrator files have it.

2002-02-18  Bernhard Herzog  <bernhard@users.sourceforge.net>

	Patch by David Boddie:

	* Filters/drawinput.py (DrawfileLoader.read_objects): Changed the
	transformation matrix encoding for sprites so that the
	off-diagonal elements should now be scaled appropriately according
	to the horizontal and vertical dots per inch of the sprite.
	* Filters/Lib/drawfile.py (sprite.input): Fix comment
	* Filters/Lib/spritefile.py (spritefile.read_details): Modified
	the maximum number of dots per inch for sprites with a mode
	number.

2002-02-02  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgsaver.py (SVGSaver.Save): Set encoding to ISO-8859-1

	* Filters/svgsaver.py (SVGSaver.make_style): First stab at dashes,
	arrow heads and fonts. It generates only predefined dashes and
	arrows, for now, and probably doesn't do the right thing with
	fonts.
	(SVGSaver.Save): Write some simple arrow heads. A real solution
	should write out the arrow heads actually used in the drawing.
	(SVGSaver.SimpleText): New method to implement text.
	(SVGSaver.save_objects): Handle text objects.

	These changes are based on a patch by Paul Giotta.

	* Filters/svgloader.py (SVGHandler.parse_style,
	SVGHandler.try_add_style): Split the actual parsing of the
	individual style attributes from parse_style into the new method
	try_add_style so that it can be used for presentation attributes.
	Patch by Paul Giotta.
	(SVGHandler.begin_text): Use the new try_add_style to parse the
	presentation attributes.
	Patch by Paul Giotta.

2002-01-30  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/Lib/spritefile.py, Filters/Lib/drawfile.py: Updates from
	David Boddie.

	* Filters/drawinput.py (RISCOSFont): Bug fix from David Boddie.

2002-01-24  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/aisaver.py (AISaver.write_header): Add EPSF to the
	output header so that Sketch recognizes the ai files it writes.

2001-12-04  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/Lib/spritefile.py: Updates from David Boddie

2001-11-26  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/drawinput.py: 
	* Filters/Lib/spritefile.py: 
	* Filters/Lib/drawfile.py: 
	New files implementing an import for Acorn Drawfiles. Contributed
	by David Boddie.

	* Objects/multilinetext.py:
	* Objects/Lib/multilinetext/styletext.py: 
	* Objects/Lib/multilinetext/iterator.py: 
	* Objects/Lib/multilinetext/chunker.py: 
	* Objects/Lib/multilinetext/__init__.py: 
	* Objects/Lib/multilinetext/TextEditor.py: 
	New files implementing the multiline text object contributed by
	Chritof Ecker

	* Filters/ailoader.py: Include the "EPSF" because Illustrator
	files are always EPS files.
	(AILoader.read_prolog): Issue a warning if it doesn't look like an
	Illustrator file. Ideally, the AI-filter shouldn't even attempt to
	parse EPS-files that aren't illustrator files but warning about it
	is better than silently reading the file and creating a more or
	less empty document.

2001-08-11  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (SVGHandler.parse_style): Parse font sizes
	more correctly
	(csscolor): Parse single digit hexadecimal RGB values correctly

2001-06-27  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/cmxloader.py (CMXInterpreter.get_tag,
	CMXInterpreter.Run): Add some debug output
	(CMXInterpreter.EndGroup): Ignore empty groups
	(CMXInterpreter32.BeginGroup): Fix read_struct typestring to match
	the CMX docs and the 16 bit version.
	(CMXLoader.Load): Print tracebacks for unhandled exceptions.

2001-05-17  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (SVGHandler._print): Disable print again.

	* Filters/pdfgensaver.py (PDFGenSaver.polybezier): Set the fill
	color to the line color before drawing the arrows to make sure
	that filled arrows are filled with the proper color.

2001-05-03  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (SVGHandler.initsvg): The width and height
	attrs are optional in CR-SVG-20001102

	(SVGHandler.user_point):
	(SVGHandler.point): Split the point method into user_point which
	computes the point in user coordinates and point which computes
	the absolute coordinates as before.

	(SVGHandler.image): Use user_point and fix the positioning of the
	images.
	(SVGHandler.begin_text): use user_point

	(length):
	(SVGHandler.user_length): Turn the length function into a method
	because the return value may depend on SVGHandler's instance data.
	Change the callers accordingly.

	* Filters/svgloader.py (as_latin1): New function to convert
	Unicode text to 8bit iso-latin-1 text when sketch runs under
	Python 2.0 or 2.1

	(SVGHandler.parse_transform):
	(SVGHandler.polyline):
	(SVGHandler.polygon):
	(SVGHandler.parse_path): Make sure to convert strings to
	iso-latin-1 before parsing them further.

	(SVGHandler.begin_path): Handle the id attribute

	(SVGHandler.point): Handle units as in CR-SVG-20001102, not as in
	earlier drafts.

	(SVGHandler.dispatch_start):
	(SVGHandler.dispatch_end): 
	(SVGHandler.__init__): 
	(SVGHandler.characters): 
	(SVGHandler.parse_style): 
	(SVGHandler.image): 
	(SVGHandler.begin_text): 
	(SVGHandler.end_text): 
	Add support for text and images

	(SVGLoader.__init__): Remember the directory of the file being
	opened to be able to handle relative filenames later

2001-03-29  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgsaver.py (SVGSaver.write_gradient): Insert a missing
	space in the radial gradient format string and add
	gradientUnits="userSpaceOnUse" to radial and axial gradients.
	Pointed out by Laetitia MARIN

2001-02-18  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/pdfgensaver.py (PDFGenSaver.polybezier): Draw the
	arrowheads only when the polybezier object actually has line
	properties.

	* Filters/svgloader.py (SVGHandler.point): Handle %-coordinates
	better. Patch provided by Philipp Matthias Hahn

2000-10-21  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/xfigloader.py (XFigLoader.line): 
	(XFigLoader.read_arc): 
	(XFigLoader.read_ellipse): 
	(XFigLoader.read_polyline): 
	(XFigLoader.read_spline): Add support for dash patterns

2000-09-24  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/pdfgensaver.py (PDFGenSaver.set_properties):
	(PDFDevice.SetLineAttributes): Multiply the dashes with the line
	width
	(PDFGenSaver.draw_arrow): New method to draw an arrow head
	(PDFGenSaver.polybezier): Draw arrow heads if present

2000-08-04  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/pdfgensaver.py (PDFGenSaver.polybezier): For an active
	fill (i.e. gradients etc), make sure to restore the the state
	before stroking the path. Otherwise half of it gets clipped.

2000-08-01  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgsaver.py: Add support for gradients.

2000-07-27  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/pdfgensaver.py: New export filter for PDF. Uses
	reportlab's pdfgen as the backend, therefore reportlab
	<htt://www.reportlab.com/> must be installed to use this filter.

2000-04-08  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/ailoader.py (AILoader.end_gradient): Clear the stack at
	the end instead of just pop_to_mark. The second mark may not
	always be present. (AFAICT it's only present if the ai file
	contains printing information (i.e. final form)).

2000-03-24  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/svgloader.py (SVGHandler.parse_style): deal with empty
	strings left in the list created by splitting on ';'

2000-03-19  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/xfigloader.py (XFigLoader.read_text): Use a globals
	dictionary with an empty __builtins__ (i.e. use restricted
	execution) when eval()ing strings.

2000-03-18  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/skloader.py (SKLoader.__init__): Fixed a typo in the
	warning message for files of newer Sketch versions

2000-03-06  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/cmxloader.py: removed some unused imports

2000-02-29  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/cmxloader.py (CMXFile.read_procindex): In preparation
	for Python 1.6, call list append methods with exactly one
	argument.

2000-02-25  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/ailoader.py (AILoader.begin_ai_layer): In Illustrator 8,
	the Lb operator takes more arguments. Treat this case properly.
	(AILoader.read_prolog): Recognize the AI5_FileFormat comment and
	set self.format_version accordingly
	(AILoader.Load): Recognize and ignore the BrushPattern definitions
	in AI8 files. Otherwise the filter treats them like normal objects

2000-02-24  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/ailoader.py (AILoader.__init__): New instance variable
	format_version that holds the value of the AI5_FileFormat comment.
	It defaults to 0.0
	(AILoader.dummy_gradient_stop): New method to deal with the
	additional color stop operator BS introduced in Illustrator 8
	(AILoader.end_gradient): Now that the Br operator is recognized
	pop the additional mark

2000-02-23  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Objects/regpoly.py: 
	* Objects/lcdtext.py: 
	* Filters/xfigloader.py: 
	* Filters/skloader.py: 
	* Filters/gziploader.py: 
	* Filters/bziploader.py: 
	* Filters/aisaver.py: 
	* Filters/ailoader.py: 
	Use xpot's special syntax to mark translatable strings.

2000-02-13  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/cmxloader.py (CMXFile.load_bitmap): 
	(CMXFile.load_rimage): 
	* Filters/ailoader.py: use PIL as a package, therefore change
	"import Image" to "from PIL import Image" or use "import
	PIL.Image" and refer to PIL.Image

2000-01-27  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/ailoader.py: Removed .ps and .eps from the list of
	possible file name extensions. They mislead users to assume that
	File->Open was the way to load EPS files.

2000-01-25  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* Filters/bziploader.py (BZIP2Loader.Load): refer to self.filename
	instead of just filename if extension != .bz2

	* Filters/gziploader.py (GZIPLoader.Load): refer to self.filename
	instead of just filename if extension != .gz

	* Filters/bziploader.py (BZIP2Loader.Load): same as
	GZIPLoader.Load below.
	(BZIP2Loader.set_doc_class): same as GZIPLoader.set_doc_class
	below.

	* Filters/gziploader.py (GZIPLoader.Load): pass doc_class through
	to load.load_drawing_from_file
	(GZIPLoader.set_doc_class): This method is required in a loader in
	0.7.x to pass the document class to the loader. Normally, it's
	implemented in GenericLoader, but GZIPLoader isn't derived from
	that

2000-01-23  Bernhard Herzog  <bernhard@users.sourceforge.net>

	* ChangeLog: created

