<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeff+schiller</id>
	<title>Inkscape Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jeff+schiller"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Jeff_schiller"/>
	<updated>2026-04-29T00:12:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Save_Cleaned_SVG&amp;diff=53421</id>
		<title>Save Cleaned SVG</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Save_Cleaned_SVG&amp;diff=53421"/>
		<updated>2009-07-21T03:54:38Z</updated>

		<summary type="html">&lt;p&gt;Jeff schiller: /* Reference Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Create Cleaned SVG =&lt;br /&gt;
&lt;br /&gt;
Please fix this wiki page if it doesn't fit the standard blueprint template.&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
&lt;br /&gt;
We're working on a proposal and design for allowing a plugin which saves svg data with various things striped and adjusted. Useful for scripting, templating with svg, editing later in a text editor and keeping files small for internet transfer.&lt;br /&gt;
&lt;br /&gt;
== Technologies ==&lt;br /&gt;
&lt;br /&gt;
 * Python&lt;br /&gt;
 * python-xml&lt;br /&gt;
 * inkscape plugin svg/python module&lt;br /&gt;
&lt;br /&gt;
== Presented Options ==&lt;br /&gt;
&lt;br /&gt;
The save format would not be totally pre-set or blind but would instead be based on the options selected by the user in a single, simple dialogue much like the pdf export dialogue.&lt;br /&gt;
&lt;br /&gt;
== Cleaning Operations ==&lt;br /&gt;
&lt;br /&gt;
 * Specify a limit to the precision of all positional elements.&lt;br /&gt;
 * Clean up XML Elements&lt;br /&gt;
  * Collapse multiple redundent groups&lt;br /&gt;
  * Remove empty tags, such as defs or metadata.&lt;br /&gt;
  * Remove id tags for elements not referenced&lt;br /&gt;
 * Clean up Definitions&lt;br /&gt;
  * Remove unused definitions&lt;br /&gt;
  * Remove duplicate gradient stops&lt;br /&gt;
  * Collapse duplicate gradient definitions&lt;br /&gt;
  * Remove gradients that are only referenced by one other gradient&lt;br /&gt;
 * Clean up CSS&lt;br /&gt;
  * Remove Default values, i.e. opacity: 1;&lt;br /&gt;
  * Remove Not applicable  values, i.e. opacity: 0; fill-color: #00000;&lt;br /&gt;
  * Convert RGB colours from RGB(r,g,b) to #RRGGBB format&lt;br /&gt;
  * Convert RGB colours from #RRGGBB to #RGB if possible&lt;br /&gt;
 * Clean up paths&lt;br /&gt;
  * Detect vertical/horizontal lines and replace.&lt;br /&gt;
  * Eliminate empty path segments&lt;br /&gt;
  * Eliminate last segment in a polygon&lt;br /&gt;
  * Collapse straight curves.&lt;br /&gt;
  * Convert absolute path segments to relative ones.&lt;br /&gt;
 * Process Transformations&lt;br /&gt;
  * Process quadratic Bezier curves&lt;br /&gt;
  * Collapse all group based transformations&lt;br /&gt;
 * Convert known properties to element attributes&lt;br /&gt;
  * css to element attributes&lt;br /&gt;
 * Output Standard SVG&lt;br /&gt;
  * Remove inkscape namespace&lt;br /&gt;
  * Remove sodipodi namespace&lt;br /&gt;
  * Remove adobe namespace&lt;br /&gt;
  * Use viewPort instead of document width/height&lt;br /&gt;
&lt;br /&gt;
== Tests ==&lt;br /&gt;
&lt;br /&gt;
Testing of this code can be done automatically with a single good logical test. And should be written first. This involves a single svg document with all the worst noise and each ideal document output from that based on each operation. The test would be simply if the output is reached it passes.&lt;br /&gt;
&lt;br /&gt;
== Reference Work ==&lt;br /&gt;
&lt;br /&gt;
This script has been created in Ruby where some of the ideas have been pulled:&lt;br /&gt;
&lt;br /&gt;
http://www.intertwingly.net/blog/2008/02/01/SVG-Tidy&lt;br /&gt;
&lt;br /&gt;
NOTE: scour (a Python script) has since been developed to automate the cleaning of SVG files.  Most of the points on this page have been covered.  Suggest using scour as the basis for the Inkscape plugin.&lt;br /&gt;
&lt;br /&gt;
http://codedread.com/scour/&lt;/div&gt;</summary>
		<author><name>Jeff schiller</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Working_with_SVN&amp;diff=14029</id>
		<title>Working with SVN</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Working_with_SVN&amp;diff=14029"/>
		<updated>2007-03-24T21:59:51Z</updated>

		<summary type="html">&lt;p&gt;Jeff schiller: Added docbook URL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(This began a copy of [[WorkingWithCVS]]; bear with us as it is updated for SVN)&lt;br /&gt;
&lt;br /&gt;
== Subversion (SVN) Basics ==&lt;br /&gt;
&lt;br /&gt;
This node discusses the basics of using SVN.&lt;br /&gt;
&lt;br /&gt;
For information on more advanced usage, see:&lt;br /&gt;
&lt;br /&gt;
* [[WorkingWithSVNBranches]] - making branches and merging between them&lt;br /&gt;
&lt;br /&gt;
=== Concepts ===&lt;br /&gt;
&lt;br /&gt;
==== The Repository ====&lt;br /&gt;
&lt;br /&gt;
SVN stores source code in a shared '''repository''' (in our case on Sourceforge's server).  The repository contains all past and present versions of the code, and is shared by everyone.&lt;br /&gt;
&lt;br /&gt;
==== Your Working Copy ====&lt;br /&gt;
&lt;br /&gt;
To work with the source code, SVN requires you to '''check out''' a ''working copy''.  This copy is private, so you can make and test any changes you like without disturbing anyone else.&lt;br /&gt;
&lt;br /&gt;
If you have '''write access''' to the repository, when you are finished making your changes, you may '''commit''' your changes to the shared repository, making them available to everyone.&lt;br /&gt;
&lt;br /&gt;
Alternately, you may generate a file containing the changes you made (a ''diff''), and send it to a developer with write access to be incorporated.&lt;br /&gt;
&lt;br /&gt;
You can check out as many working copies as you want; they take up only your own disk space, and they are completely independent of each other.&lt;br /&gt;
&lt;br /&gt;
If you no longer need a working copy, you may simply delete it.&lt;br /&gt;
&lt;br /&gt;
=== Getting Started ===&lt;br /&gt;
&lt;br /&gt;
==== Setting Up ====&lt;br /&gt;
&lt;br /&gt;
==== How Do I Check Out a Working Copy? ====&lt;br /&gt;
&lt;br /&gt;
To check out a copy of Inkscape from the SVN repository, you may use the following command:&lt;br /&gt;
&lt;br /&gt;
 svn checkout https://svn.sourceforge.net/svnroot/inkscape/inkscape/trunk inkscape&lt;br /&gt;
&lt;br /&gt;
Here are what the options mean:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;checkout&amp;quot; (&amp;quot;co&amp;quot; means the same thing) specifies the action to take (check out a working copy).&lt;br /&gt;
&lt;br /&gt;
&amp;quot;https://svn.sourceforge.net/svnroot/inkscape/inkscape/trunk&amp;quot; is a repository URL; in this case, it refers to the &amp;quot;main&amp;quot; development branch for Inkscape.  Other repository URLs are:&lt;br /&gt;
&lt;br /&gt;
* http://inkscape.svn.sourceforge.net/svnroot/inkscape/doc-docbook/trunk - contains the docbook source of the Inkscape tutorials&lt;br /&gt;
&lt;br /&gt;
&amp;quot;inkscape&amp;quot; is the name of the directory to check out into&lt;br /&gt;
&lt;br /&gt;
==== Now What? ====&lt;br /&gt;
&lt;br /&gt;
You should have a complete working copy in the '''inkscape''' directory.  You can cd to it and try compiling.&lt;br /&gt;
&lt;br /&gt;
:Note: If it is a fresh checkout, you will need to run the ./autogen.sh shell script at the top level to create files needed to compile&lt;br /&gt;
&lt;br /&gt;
When you're inside the working copy, you won't normally need to specify the repository URL, because SVN remembers where the working copy came from.&lt;br /&gt;
&lt;br /&gt;
Note that a Subversion command only applies to the current directory and (possibly) any subdirectories.  Normally (particularly for updates, diffs, and checkins), you will want to run the command from the top level of the project.&lt;br /&gt;
&lt;br /&gt;
=== Bringing Your Working Copy Up-To-Date ===&lt;br /&gt;
&lt;br /&gt;
Your working copy will not automatically include changes others have made to the repository since you checked it out.&lt;br /&gt;
&lt;br /&gt;
To ''update'' your working copy, use this command:&lt;br /&gt;
&lt;br /&gt;
 svn update&lt;br /&gt;
&lt;br /&gt;
=== Dealing with Conflicts ===&lt;br /&gt;
&lt;br /&gt;
If you've made changes to your working copy, what happens if you update after someone has commited changes to the same files?&lt;br /&gt;
&lt;br /&gt;
Normally, SVN can work this out on its own.  Sometimes you have to help it along, though.  If SVN says there were conflicts, look for which files have a ''C'' next to them in its progress output.  Some of those may have unresolved conflicts. You can also search for '=======' in the files themselves to find any unresolved conflicts.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; ''filename''&lt;br /&gt;
 The changes in your version will be here&lt;br /&gt;
 =======&lt;br /&gt;
 The changes by the other person will be here&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ''some version here''&lt;br /&gt;
&lt;br /&gt;
Sometimes you will keep one set of changes and discard the other, and sometimes you will combine the two.  It will require a judgement call on your part either way.  Talk to the person who made the other set of changes or ask on the mailing list if it's unclear what's going on.  Remember that SVN is no substitute for communication.&lt;br /&gt;
&lt;br /&gt;
Also, always make sure to build and test after an update to make sure that the combined changes work as intended!&lt;br /&gt;
&lt;br /&gt;
=== Generating a Diff ===&lt;br /&gt;
&lt;br /&gt;
('''Always''' update before generating a diff!)&lt;br /&gt;
&lt;br /&gt;
From the top-level directory, run the command:&lt;br /&gt;
&lt;br /&gt;
 svn diff -x -u3 &amp;gt; filename&lt;br /&gt;
&lt;br /&gt;
-x -u3 specifies which format to use (a unified diff with three lines of context).  This is the recommended diff format.&lt;br /&gt;
&lt;br /&gt;
This will create a file describing the changes you have made, though if you have created new files as part of your changes, you will need to include those separately too when emailing them to the list or another developer for inclusion.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Commit Diff ===&lt;br /&gt;
&lt;br /&gt;
[ fixme:  how to do this in SVN?&lt;br /&gt;
  SVN_EDITOR instead of CVSEDITOR&lt;br /&gt;
http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.advanced.confarea.opts.config ]&lt;br /&gt;
&lt;br /&gt;
To always generate a diff when you commit to CVS, set the environment variable &amp;quot;CVSEDITOR&amp;quot; to the following script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # get rid of redhat 9 locale ugliness&lt;br /&gt;
 unset LC_CTYPE&lt;br /&gt;
 # Turn on ro access (to stop multiple locks) for local roots&lt;br /&gt;
 grep @ CVS/Root &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 || export CVSREADONLYFS=1&lt;br /&gt;
 # Tell the user what's going on&lt;br /&gt;
 echo Building diff...&lt;br /&gt;
 cvs diff -up 2&amp;gt;/dev/null | perl -ne 'print &amp;quot;CVS: $_&amp;quot; unless /^\?/' &amp;gt;&amp;gt; &amp;quot;$1&amp;quot;&lt;br /&gt;
 exec ${EDITOR:-vi} &amp;quot;$1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If the above script is named &amp;quot;~/bin/cvsdiffvi&amp;quot;, then assuming you run the bash shell, you can add the following your .bashrc file:&lt;br /&gt;
&lt;br /&gt;
 export CVSEDITOR=~/bin/cvsdiffvi&lt;br /&gt;
&lt;br /&gt;
Now, every time you commit, the entire diff will be visible to you as you write your commit comments.&lt;br /&gt;
&lt;br /&gt;
=== Applying a Diff ===&lt;br /&gt;
&lt;br /&gt;
A diff file can be applied to the codebase using the 'patch' command.&lt;br /&gt;
&lt;br /&gt;
If the diff was made as  &amp;lt;code&amp;gt;inkscape/src/thingy.cpp&amp;lt;/code&amp;gt;  and you're in the &amp;quot;inkscape&amp;quot; directory, you'll want to use the command:&lt;br /&gt;
&lt;br /&gt;
 patch -p1 &amp;lt; thingy.diff&lt;br /&gt;
&lt;br /&gt;
Depending on how many path elements are part of the diff, you'll need to strip them with -p1, -p2, etc.&lt;br /&gt;
&lt;br /&gt;
=== Committing your Changes ===&lt;br /&gt;
&lt;br /&gt;
('''Always''' update before committing!)&lt;br /&gt;
&lt;br /&gt;
If you have write access to the repository, you can commit your changes like this:&lt;br /&gt;
&lt;br /&gt;
Before you commit, please make sure that you describe the changes you have made in the [[ChangeLog]] file at the top-level directory.&lt;br /&gt;
&lt;br /&gt;
 svn commit -m &amp;quot;Your description of your changes goes here&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Tip: even if you are committing directly, you still might want to generate a diff.  It's a good reference to look at when you're filling out the [[ChangeLog]], since it will remind you of all the changes you've made.&lt;br /&gt;
&lt;br /&gt;
=== Adding Files to the Repository ===&lt;br /&gt;
&lt;br /&gt;
To add new files as part of your commit, you will need to run:&lt;br /&gt;
&lt;br /&gt;
 svn add ''files and directories to add go here''&lt;br /&gt;
&lt;br /&gt;
Before you commit.  This also goes for new directories.&lt;br /&gt;
&lt;br /&gt;
The actual addition or removal will not take effect until you commit.&lt;br /&gt;
&lt;br /&gt;
=== Removing Files from the Repository ===&lt;br /&gt;
&lt;br /&gt;
 svn remove ''files to remove go here''&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;/div&gt;</summary>
		<author><name>Jeff schiller</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=CompilingSuse&amp;diff=13998</id>
		<title>CompilingSuse</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=CompilingSuse&amp;diff=13998"/>
		<updated>2007-03-20T01:45:35Z</updated>

		<summary type="html">&lt;p&gt;Jeff schiller: /* OpenSUSE 10.2 */ popt-devel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== OpenSUSE 10.2 ==&lt;br /&gt;
&lt;br /&gt;
You need to install these packages to pass the compilation of SVN trunk:&lt;br /&gt;
* gtkmm-devel&lt;br /&gt;
* glibmm-devel&lt;br /&gt;
* cairomm-devel &lt;br /&gt;
* libsigc-2.0-devel&lt;br /&gt;
* popt-devel&lt;br /&gt;
* gc-6.6 (Boehm's collector)&lt;br /&gt;
* intltool&lt;br /&gt;
* + their dependencies&lt;br /&gt;
* AND automake-1.8.5 or any other then 1.9.6 that is installed by default. &lt;br /&gt;
* and any other optionally required packages&lt;br /&gt;
&lt;br /&gt;
If you compile automake-1.8.5 by yourself then be sure that you install it to /usr prefix and not to /usr/local. If you still install to /usr/local, then instead of running &amp;quot;autogen.sh&amp;quot; on svn version, run:&lt;br /&gt;
&lt;br /&gt;
   ACLOCAL_FLAGS=&amp;quot;$ACLOCAL_FLAGS -I /usr/share/aclocal&amp;quot; ./autogen.sh&lt;br /&gt;
&lt;br /&gt;
Then run ./configure; make; sudo make install as usually.&lt;br /&gt;
&lt;br /&gt;
Thanks go to Dobey who helped a lot to figure out what was the problem.&lt;br /&gt;
&lt;br /&gt;
== Suse 9.0 ==&lt;br /&gt;
&lt;br /&gt;
One of the challenges with Suse 9.0 is the lack of a distro provided gtkmm2 and libsigc++ packages.&lt;br /&gt;
&lt;br /&gt;
Best place to find them:  ftp://ftp.gwdg.de/pub/linux/misc/apt4rpm/suse/usr-local-bin/9.0/&lt;br /&gt;
[ This URL does not exist anymore :-( ]&lt;br /&gt;
&lt;br /&gt;
Suse 9.1 includes both now in the GNOME supplemental downloads.&lt;br /&gt;
&lt;br /&gt;
Note that for SuSE the gtk+2 packages are called gtk2.  The gtk+2 2.4 package is not provided via Yast but can be found via rpmseek as gtk2 and gtk2-devel&lt;br /&gt;
&lt;br /&gt;
To find the .pc files, I had to set:&lt;br /&gt;
&lt;br /&gt;
setenv PKG_CONFIG_PATH/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/opt/gnome/lib/pkgconfig/&lt;br /&gt;
&lt;br /&gt;
In SuSE 9.1 I ran into this error:&lt;br /&gt;
&lt;br /&gt;
   configure.in:25: required file `./ltmain.sh' not found&lt;br /&gt;
&lt;br /&gt;
Copying /usr/share/libtool/ltmain.sh into the top directory fixed it.&lt;br /&gt;
&lt;br /&gt;
For 0.40cvs the libgc dependency is added.  In [[SuSE]] 9.1 this is package 'boehm-gc', but it doesn't work - you need to compile from source.  Download from:&lt;br /&gt;
&lt;br /&gt;
   http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
Then configure it with the command:&lt;br /&gt;
&lt;br /&gt;
   $ ./configure --enable-cplus-plus&lt;br /&gt;
&lt;br /&gt;
SuSE 9.1 also does not have libsigc++ 2.0; I couldn't find an rpm for it so ended up having to compile it from source, from http://prdownloads.sourceforge.net/libsigc/libsigc++-2.0.3.tar.gz&lt;br /&gt;
&lt;br /&gt;
I also had to compile gtkmm 2.4 and glib 2.4 from source; download them from ftp://ftp.gnome.org/pub/GNOME/sources/gtkmm/2.4/ and http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.4/&lt;br /&gt;
&lt;br /&gt;
Looks like these packages are also available from here:ftp://ftp.gwdg.de/pub/linux/suse/apt/SuSE/9.1-i386/RPMS.gnome/&lt;br /&gt;
&lt;br /&gt;
Also, stuff got installed to /opt/gnome/bin/, so I had to also&lt;br /&gt;
`export PATH=$PATH:/opt/gnome/bin/`&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Needs Work]]&lt;/div&gt;</summary>
		<author><name>Jeff schiller</name></author>
	</entry>
</feed>