[gegl] operations: add generated .c files to git



commit 778fac33143fcf9b11998466f16e5f4b15bfc451
Author: Ãyvind KolÃs <pippin gimp org>
Date:   Fri Nov 18 16:01:51 2011 +0000

    operations: add generated .c files to git
    
    The ruby scripts are not being run by autogen.sh anymore, this way it is possible to bootstrap from a git clone again.

 operations/generated/add.c                    |  125 ++++++++++++++++++++++++
 operations/generated/clear.c                  |  117 +++++++++++++++++++++++
 operations/generated/color-burn.c             |  119 +++++++++++++++++++++++
 operations/generated/color-dodge.c            |  119 +++++++++++++++++++++++
 operations/generated/darken.c                 |  116 +++++++++++++++++++++++
 operations/generated/difference.c             |  116 +++++++++++++++++++++++
 operations/generated/divide.c                 |  125 ++++++++++++++++++++++++
 operations/generated/dst-atop.c               |  117 +++++++++++++++++++++++
 operations/generated/dst-in.c                 |  117 +++++++++++++++++++++++
 operations/generated/dst-out.c                |  117 +++++++++++++++++++++++
 operations/generated/dst-over.c               |  117 +++++++++++++++++++++++
 operations/generated/dst.c                    |  117 +++++++++++++++++++++++
 operations/generated/exclusion.c              |  116 +++++++++++++++++++++++
 operations/generated/gamma.c                  |  125 ++++++++++++++++++++++++
 operations/generated/hard-light.c             |  119 +++++++++++++++++++++++
 operations/generated/lighten.c                |  116 +++++++++++++++++++++++
 operations/generated/multiply.c               |  116 +++++++++++++++++++++++
 operations/generated/overlay.c                |  119 +++++++++++++++++++++++
 operations/generated/plus.c                   |  116 +++++++++++++++++++++++
 operations/generated/screen.c                 |  116 +++++++++++++++++++++++
 operations/generated/soft-light.c             |  121 ++++++++++++++++++++++++
 operations/generated/src-atop.c               |  117 +++++++++++++++++++++++
 operations/generated/src-in.c                 |  126 +++++++++++++++++++++++++
 operations/generated/src-out.c                |  117 +++++++++++++++++++++++
 operations/generated/src-over.c               |  117 +++++++++++++++++++++++
 operations/generated/src.c                    |  117 +++++++++++++++++++++++
 operations/generated/subtract.c               |  125 ++++++++++++++++++++++++
 operations/generated/svg-multiply.c           |  115 ++++++++++++++++++++++
 operations/generated/xor.c                    |  117 +++++++++++++++++++++++
 operations/workshop/generated/average.c       |  110 +++++++++++++++++++++
 operations/workshop/generated/blend-reflect.c |  110 +++++++++++++++++++++
 operations/workshop/generated/negation.c      |  110 +++++++++++++++++++++
 operations/workshop/generated/soft-burn.c     |  110 +++++++++++++++++++++
 operations/workshop/generated/soft-dodge.c    |  110 +++++++++++++++++++++
 operations/workshop/generated/subtractive.c   |  110 +++++++++++++++++++++
 35 files changed, 4097 insertions(+), 0 deletions(-)
---
diff --git a/operations/generated/add.c b/operations/generated/add.c
new file mode 100644
index 0000000..8f9ec59
--- /dev/null
+++ b/operations/generated/add.c
@@ -0,0 +1,125 @@
+
+/* !!!! AUTOGENERATED FILE generated by math.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+gegl_chant_double (value, _("Value"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, _("global value used if aux doesn't contain data"))
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "add.c"
+
+#include "gegl-chant.h"
+
+#include <math.h>
+#ifdef _MSC_VER
+#define powf(a,b) ((gfloat)pow(a,b))
+#endif
+
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RGBA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", babl_format ("RGB float"));
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gint    i;
+
+  if (aux == NULL)
+    {
+      gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              c = c + value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          out+= 4;
+        }
+    }
+  else
+    {
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          gfloat value;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              value=aux[j];
+              c = c + value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          aux += 3;
+          out+= 4;
+        }
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class  = GEGL_OPERATION_CLASS (klass);
+  point_composer_class     = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:add";
+  operation_class->categories  = "compositors:math";
+  operation_class->description =
+       _("Math operation add (c = c + value)");
+}
+#endif
diff --git a/operations/generated/clear.c b/operations/generated/clear.c
new file mode 100644
index 0000000..99f97ac
--- /dev/null
+++ b/operations/generated/clear.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "clear.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = 0.0f;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = 0.0f;
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:clear";
+  operation_class->name        = "svg:clear";
+  operation_class->description =
+        _("Porter Duff operation clear (d = 0.0f)");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/color-burn.c b/operations/generated/color-burn.c
new file mode 100644
index 0000000..3c2df63
--- /dev/null
+++ b/operations/generated/color-burn.c
@@ -0,0 +1,119 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "color-burn.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          if (cA * aB + cB * aA <= aA * aB)
+            out[j] = CLAMP (cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else
+            out[j] = CLAMP ((cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA)), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:color-burn";
+  operation_class->name        = "svg:color-burn";
+  operation_class->description =
+        _("SVG blend operation color-burn (<tt>if cA * aB + cB * aA <= aA * aB: d = cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == 0 ? 1 : (aA * (cA * aB + cB * aA - aA * aB) / cA) + cA * (1 - aB) + cB * (1 - aA))</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/color-dodge.c b/operations/generated/color-dodge.c
new file mode 100644
index 0000000..00749ef
--- /dev/null
+++ b/operations/generated/color-dodge.c
@@ -0,0 +1,119 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "color-dodge.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          if (cA * aB + cB * aA >= aA * aB)
+            out[j] = CLAMP (aA * aB + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else
+            out[j] = CLAMP ((cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:color-dodge";
+  operation_class->name        = "svg:color-dodge";
+  operation_class->description =
+        _("SVG blend operation color-dodge (<tt>if cA * aB + cB * aA >= aA * aB: d = aA * aB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = (cA == aA ? 1 : cB * aA / (aA == 0 ? 1 : 1 - cA / aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/darken.c b/operations/generated/darken.c
new file mode 100644
index 0000000..dd85d87
--- /dev/null
+++ b/operations/generated/darken.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "darken.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:darken";
+  operation_class->name        = "svg:darken";
+  operation_class->description =
+        _("SVG blend operation darken (<tt>d = MIN (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/difference.c b/operations/generated/difference.c
new file mode 100644
index 0000000..469a40b
--- /dev/null
+++ b/operations/generated/difference.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "difference.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (cA + cB - 2 * (MIN (cA * aB, cB * aA)), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:difference";
+  operation_class->name        = "svg:difference";
+  operation_class->description =
+        _("SVG blend operation difference (<tt>d = cA + cB - 2 * (MIN (cA * aB, cB * aA))</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/divide.c b/operations/generated/divide.c
new file mode 100644
index 0000000..928e4b6
--- /dev/null
+++ b/operations/generated/divide.c
@@ -0,0 +1,125 @@
+
+/* !!!! AUTOGENERATED FILE generated by math.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+gegl_chant_double (value, _("Value"), -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, _("global value used if aux doesn't contain data"))
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "divide.c"
+
+#include "gegl-chant.h"
+
+#include <math.h>
+#ifdef _MSC_VER
+#define powf(a,b) ((gfloat)pow(a,b))
+#endif
+
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RGBA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", babl_format ("RGB float"));
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gint    i;
+
+  if (aux == NULL)
+    {
+      gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              c = value==0.0f?0.0f:c/value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          out+= 4;
+        }
+    }
+  else
+    {
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          gfloat value;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              value=aux[j];
+              c = value==0.0f?0.0f:c/value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          aux += 3;
+          out+= 4;
+        }
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class  = GEGL_OPERATION_CLASS (klass);
+  point_composer_class     = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:divide";
+  operation_class->categories  = "compositors:math";
+  operation_class->description =
+       _("Math operation divide (c = value==0.0f?0.0f:c/value)");
+}
+#endif
diff --git a/operations/generated/dst-atop.c b/operations/generated/dst-atop.c
new file mode 100644
index 0000000..23908c9
--- /dev/null
+++ b/operations/generated/dst-atop.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "dst-atop.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cB * aA + cA * (1.0f - aB);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:dst-atop";
+  operation_class->name        = "svg:dst-atop";
+  operation_class->description =
+        _("Porter Duff operation dst-atop (d = cB * aA + cA * (1.0f - aB))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/dst-in.c b/operations/generated/dst-in.c
new file mode 100644
index 0000000..aa72748
--- /dev/null
+++ b/operations/generated/dst-in.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "dst-in.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cB * aA;
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:dst-in";
+  operation_class->name        = "svg:dst-in";
+  operation_class->description =
+        _("Porter Duff operation dst-in (d = cB * aA)");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/dst-out.c b/operations/generated/dst-out.c
new file mode 100644
index 0000000..1040904
--- /dev/null
+++ b/operations/generated/dst-out.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "dst-out.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aB * (1.0f - aA);
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cB * (1.0f - aA);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:dst-out";
+  operation_class->name        = "svg:dst-out";
+  operation_class->description =
+        _("Porter Duff operation dst-out (d = cB * (1.0f - aA))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/dst-over.c b/operations/generated/dst-over.c
new file mode 100644
index 0000000..40c79b2
--- /dev/null
+++ b/operations/generated/dst-over.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "dst-over.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cB + cA * (1.0f - aB);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:dst-over";
+  operation_class->name        = "svg:dst-over";
+  operation_class->description =
+        _("Porter Duff operation dst-over (d = cB + cA * (1.0f - aB))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/dst.c b/operations/generated/dst.c
new file mode 100644
index 0000000..038d0d4
--- /dev/null
+++ b/operations/generated/dst.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "dst.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cB;
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:dst";
+  operation_class->name        = "svg:dst";
+  operation_class->description =
+        _("Porter Duff operation dst (d = cB)");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/exclusion.c b/operations/generated/exclusion.c
new file mode 100644
index 0000000..8459b586
--- /dev/null
+++ b/operations/generated/exclusion.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "exclusion.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP ((cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:exclusion";
+  operation_class->name        = "svg:exclusion";
+  operation_class->description =
+        _("SVG blend operation exclusion (<tt>d = (cA * aB + cB * aA - 2 * cA * cB) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/gamma.c b/operations/generated/gamma.c
new file mode 100644
index 0000000..13e90a2
--- /dev/null
+++ b/operations/generated/gamma.c
@@ -0,0 +1,125 @@
+
+/* !!!! AUTOGENERATED FILE generated by math.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+gegl_chant_double (value, _("Value"), -G_MAXDOUBLE, G_MAXDOUBLE, 1.0, _("global value used if aux doesn't contain data"))
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "gamma.c"
+
+#include "gegl-chant.h"
+
+#include <math.h>
+#ifdef _MSC_VER
+#define powf(a,b) ((gfloat)pow(a,b))
+#endif
+
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RGBA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", babl_format ("RGB float"));
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gint    i;
+
+  if (aux == NULL)
+    {
+      gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              c = powf (c, value);
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          out+= 4;
+        }
+    }
+  else
+    {
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          gfloat value;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              value=aux[j];
+              c = powf (c, value);
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          aux += 3;
+          out+= 4;
+        }
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class  = GEGL_OPERATION_CLASS (klass);
+  point_composer_class     = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:gamma";
+  operation_class->categories  = "compositors:math";
+  operation_class->description =
+       _("Math operation gamma (c = powf (c, value))");
+}
+#endif
diff --git a/operations/generated/hard-light.c b/operations/generated/hard-light.c
new file mode 100644
index 0000000..8ef1d67
--- /dev/null
+++ b/operations/generated/hard-light.c
@@ -0,0 +1,119 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "hard-light.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          if (2 * cA < aA)
+            out[j] = CLAMP (2 * cA * cB + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else
+            out[j] = CLAMP (aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:hard-light";
+  operation_class->name        = "svg:hard-light";
+  operation_class->description =
+        _("SVG blend operation hard-light (<tt>if 2 * cA < aA: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/lighten.c b/operations/generated/lighten.c
new file mode 100644
index 0000000..b4c2938
--- /dev/null
+++ b/operations/generated/lighten.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "lighten.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:lighten";
+  operation_class->name        = "svg:lighten";
+  operation_class->description =
+        _("SVG blend operation lighten (<tt>d = MAX (cA * aB, cB * aA) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/multiply.c b/operations/generated/multiply.c
new file mode 100644
index 0000000..a9661aa
--- /dev/null
+++ b/operations/generated/multiply.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "multiply.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (cA * cB +  cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:multiply";
+  operation_class->name        = "svg:multiply";
+  operation_class->description =
+        _("SVG blend operation multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/overlay.c b/operations/generated/overlay.c
new file mode 100644
index 0000000..c0c83ae
--- /dev/null
+++ b/operations/generated/overlay.c
@@ -0,0 +1,119 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "overlay.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          if (2 * cB > aB)
+            out[j] = CLAMP (2 * cA * cB + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else
+            out[j] = CLAMP (aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:overlay";
+  operation_class->name        = "svg:overlay";
+  operation_class->description =
+        _("SVG blend operation overlay (<tt>if 2 * cB > aB: d = 2 * cA * cB + cA * (1 - aB) + cB * (1 - aA) otherwise: d = aA * aB - 2 * (aB - cB) * (aA - cA) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/plus.c b/operations/generated/plus.c
new file mode 100644
index 0000000..3583d31
--- /dev/null
+++ b/operations/generated/plus.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "plus.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = MIN (aA + aB, 1);
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (cA + cB, 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "svg:plus";
+  operation_class->compat_name = "gegl:plus";
+  operation_class->description =
+        _("SVG blend operation plus (<tt>d = cA + cB</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/screen.c b/operations/generated/screen.c
new file mode 100644
index 0000000..c972beb
--- /dev/null
+++ b/operations/generated/screen.c
@@ -0,0 +1,116 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "screen.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (cA + cB - cA * cB, 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->compat_name = "gegl:screen";
+  operation_class->name        = "svg:screen";
+  operation_class->description =
+        _("SVG blend operation screen (<tt>d = cA + cB - cA * cB</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/soft-light.c b/operations/generated/soft-light.c
new file mode 100644
index 0000000..dbc5ab9
--- /dev/null
+++ b/operations/generated/soft-light.c
@@ -0,0 +1,121 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "soft-light.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          if (2 * cA < aA)
+            out[j] = CLAMP (cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else if (8 * cB <= aB)
+            out[j] = CLAMP (cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+          else
+            out[j] = CLAMP ((aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:soft-light";
+  operation_class->description =
+        _("SVG blend operation soft-light (<tt>if 2 * cA < aA: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA); if 8 * cB <= aB: d = cB * (aA - (aB == 0 ? 1 : 1 - cB / aB) * (2 * cA - aA) * (aB == 0 ? 3 : 3 - 8 * cB / aB)) + cA * (1 - aB) + cB * (1 - aA); otherwise: d = (aA * cB + (aB == 0 ? 0 : sqrt (cB / aB) * aB - cB) * (2 * cA - aA)) + cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/src-atop.c b/operations/generated/src-atop.c
new file mode 100644
index 0000000..92d0c5a
--- /dev/null
+++ b/operations/generated/src-atop.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "src-atop.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA * aB + cB * (1.0f - aA);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:src-atop";
+  operation_class->name        = "svg:src-atop";
+  operation_class->description =
+        _("Porter Duff operation src-atop (d = cA * aB + cB * (1.0f - aA))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/src-in.c b/operations/generated/src-in.c
new file mode 100644
index 0000000..fa8ca22
--- /dev/null
+++ b/operations/generated/src-in.c
@@ -0,0 +1,126 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "src-in.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA * aB;
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+static GeglRectangle get_bounding_box (GeglOperation *self)
+{
+  GeglRectangle *in_rect = gegl_operation_source_get_bounding_box (self, "input");
+  return *in_rect;
+}
+
+
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:src-in";
+  operation_class->name        = "svg:src-in";
+  operation_class->get_bounding_box = get_bounding_box;
+  operation_class->description =
+        _("Porter Duff operation src-in (d = cA * aB)");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/src-out.c b/operations/generated/src-out.c
new file mode 100644
index 0000000..62883bf
--- /dev/null
+++ b/operations/generated/src-out.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "src-out.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA * (1.0f - aB);
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA * (1.0f - aB);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:src-out";
+  operation_class->name        = "svg:src-out";
+  operation_class->description =
+        _("Porter Duff operation src-out (d = cA * (1.0f - aB))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/src-over.c b/operations/generated/src-over.c
new file mode 100644
index 0000000..26a94b6
--- /dev/null
+++ b/operations/generated/src-over.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "src-over.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA + cB * (1.0f - aA);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:src-over";
+  operation_class->name        = "svg:src-over";
+  operation_class->description =
+        _("Porter Duff operation src-over (d = cA + cB * (1.0f - aA))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/src.c b/operations/generated/src.c
new file mode 100644
index 0000000..8ab98b3
--- /dev/null
+++ b/operations/generated/src.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "src.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA;
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:src";
+  operation_class->name        = "svg:src";
+  operation_class->description =
+        _("Porter Duff operation src (d = cA)");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/generated/subtract.c b/operations/generated/subtract.c
new file mode 100644
index 0000000..b609025
--- /dev/null
+++ b/operations/generated/subtract.c
@@ -0,0 +1,125 @@
+
+/* !!!! AUTOGENERATED FILE generated by math.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+gegl_chant_double (value, _("Value"), -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, _("global value used if aux doesn't contain data"))
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE       "subtract.c"
+
+#include "gegl-chant.h"
+
+#include <math.h>
+#ifdef _MSC_VER
+#define powf(a,b) ((gfloat)pow(a,b))
+#endif
+
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RGBA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", babl_format ("RGB float"));
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gint    i;
+
+  if (aux == NULL)
+    {
+      gfloat value = GEGL_CHANT_PROPERTIES (op)->value;
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              c = c - value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          out+= 4;
+        }
+    }
+  else
+    {
+      for (i=0; i<n_pixels; i++)
+        {
+          gint   j;
+          gfloat c;
+          gfloat value;
+          for (j=0; j<3; j++)
+            {
+              c=in[j];
+              value=aux[j];
+              c = c - value;
+              out[j]=c;
+            }
+          out[3]=in[3];
+          in += 4;
+          aux += 3;
+          out+= 4;
+        }
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class  = GEGL_OPERATION_CLASS (klass);
+  point_composer_class     = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:subtract";
+  operation_class->categories  = "compositors:math";
+  operation_class->description =
+       _("Math operation subtract (c = c - value)");
+}
+#endif
diff --git a/operations/generated/svg-multiply.c b/operations/generated/svg-multiply.c
new file mode 100644
index 0000000..d96b710
--- /dev/null
+++ b/operations/generated/svg-multiply.c
@@ -0,0 +1,115 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg12-blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall  
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "svg-multiply.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB, aD;
+      gint   j;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = CLAMP (cA * cB +  cA * (1 - aB) + cB * (1 - aA), 0, aD);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:svg-multiply";
+  operation_class->description =
+        _("SVG blend operation svg-multiply (<tt>d = cA * cB +  cA * (1 - aB) + cB * (1 - aA)</tt>)");
+  operation_class->categories  = "compositors:svgfilter";
+}
+
+#endif
diff --git a/operations/generated/xor.c b/operations/generated/xor.c
new file mode 100644
index 0000000..47c988c
--- /dev/null
+++ b/operations/generated/xor.c
@@ -0,0 +1,117 @@
+
+/* !!!! AUTOGENERATED FILE generated by svg-12-porter-duff.rb !!!!!
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006, 2007 Ãyvind KolÃs <pippin gimp org>
+ *            2007 John Marshall
+ *
+ * SVG rendering modes; see:
+ *     http://www.w3.org/TR/SVG12/rendering.html
+ *     http://www.w3.org/TR/2004/WD-SVG12-20041027/rendering.html#comp-op-prop
+ *
+ *     aA = aux(src) alpha      aB = in(dst) alpha      aD = out alpha
+ *     cA = aux(src) colour     cB = in(dst) colour     cD = out colour
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE        "xor.c"
+
+#include "gegl-chant.h"
+
+static void prepare (GeglOperation *operation)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (operation, "input", format);
+  gegl_operation_set_format (operation, "aux", format);
+  gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+process (GeglOperation        *op,
+          void                *in_buf,
+          void                *aux_buf,
+          void                *out_buf,
+          glong                n_pixels,
+          const GeglRectangle *roi)
+{
+  gint i;
+  gfloat * GEGL_ALIGNED in = in_buf;
+  gfloat * GEGL_ALIGNED aux = aux_buf;
+  gfloat * GEGL_ALIGNED out = out_buf;
+
+  if (aux==NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gint   j;
+      gfloat aA, aB, aD;
+
+      aB = in[3];
+      aA = aux[3];
+      aD = aA + aB - 2.0f * aA * aB;
+
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cB = in[j];
+          cA = aux[j];
+          out[j] = cA * (1.0f - aB)+ cB * (1.0f - aA);
+        }
+      out[3] = aD;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+
+  operation_class->compat_name = "gegl:xor";
+  operation_class->name        = "svg:xor";
+  operation_class->description =
+        _("Porter Duff operation xor (d = cA * (1.0f - aB)+ cB * (1.0f - aA))");
+  operation_class->categories  = "compositors:porter-duff";
+}
+
+#endif
diff --git a/operations/workshop/generated/average.c b/operations/workshop/generated/average.c
new file mode 100644
index 0000000..1f0d453
--- /dev/null
+++ b/operations/workshop/generated/average.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "average.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + ((cA + aB)/2-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:average";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'average' (<tt>c = (cA + aB)/2</tt>)");
+}
+
+#endif
diff --git a/operations/workshop/generated/blend-reflect.c b/operations/workshop/generated/blend-reflect.c
new file mode 100644
index 0000000..b4417e3
--- /dev/null
+++ b/operations/workshop/generated/blend-reflect.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "blend-reflect.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + (cB>=1.0?1.0:cA*cA / (1.0-cB)-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:blend-reflect";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'blend-reflect' (<tt>c = cB>=1.0?1.0:cA*cA / (1.0-cB)</tt>)");
+}
+
+#endif
diff --git a/operations/workshop/generated/negation.c b/operations/workshop/generated/negation.c
new file mode 100644
index 0000000..d4bd1bb
--- /dev/null
+++ b/operations/workshop/generated/negation.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "negation.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + (1.0 - fabs(1.0-cA-cB)-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:negation";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'negation' (<tt>c = 1.0 - fabs(1.0-cA-cB)</tt>)");
+}
+
+#endif
diff --git a/operations/workshop/generated/soft-burn.c b/operations/workshop/generated/soft-burn.c
new file mode 100644
index 0000000..f8cad4c
--- /dev/null
+++ b/operations/workshop/generated/soft-burn.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "soft-burn.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + ((cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:soft-burn";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'soft-burn' (<tt>c = (cA+cB<1.0)?0.5*cB / (1.0 - cA):1.0-0.5*(1.0 - cA) / cB</tt>)");
+}
+
+#endif
diff --git a/operations/workshop/generated/soft-dodge.c b/operations/workshop/generated/soft-dodge.c
new file mode 100644
index 0000000..432667d
--- /dev/null
+++ b/operations/workshop/generated/soft-dodge.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "soft-dodge.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + ((cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:soft-dodge";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'soft-dodge' (<tt>c = (cA+cB<1.0)?0.5*cA / (1.0 - cB):1.0-0.5*(1.0 - cB)/cA</tt>)");
+}
+
+#endif
diff --git a/operations/workshop/generated/subtractive.c b/operations/workshop/generated/subtractive.c
new file mode 100644
index 0000000..fa61298
--- /dev/null
+++ b/operations/workshop/generated/subtractive.c
@@ -0,0 +1,110 @@
+
+/* !!!! AUTOGENERATED FILE generated by blend.rb !!!!! 
+ *
+ * This file is an image processing operation for GEGL
+ *
+ * GEGL is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * GEGL is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
+ *
+ *  Copyright 2006 Ãyvind KolÃs <pippin gimp org>
+ *
+ * The formulas used for the blend modes are from:
+ *     http://www.pegtop.net/delphi/articles/blendmodes/
+ *
+ * !!!! AUTOGENERATED FILE !!!!!
+ */
+#include "config.h"
+#include <glib/gi18n-lib.h>
+
+
+#ifdef GEGL_CHANT_PROPERTIES
+
+/* no properties */
+
+#else
+
+#define GEGL_CHANT_TYPE_POINT_COMPOSER
+#define GEGL_CHANT_C_FILE          "subtractive.c"
+
+#include "gegl-chant.h"
+#include <math.h>
+
+static void prepare (GeglOperation *self)
+{
+  Babl *format = babl_format ("RaGaBaA float");
+
+  gegl_operation_set_format (self, "input", format);
+  gegl_operation_set_format (self, "aux", format);
+  gegl_operation_set_format (self, "output", format);
+}
+
+static gboolean
+process (GeglOperation       *op,
+         void                *in_buf,
+         void                *aux_buf,
+         void                *out_buf,
+         glong                n_pixels,
+         const GeglRectangle *roi)
+{
+  gfloat *in  = in_buf;
+  gfloat *aux = aux_buf;
+  gfloat *out = out_buf;
+  gint    i;
+
+  if (aux == NULL)
+    return TRUE;
+
+  for (i = 0; i < n_pixels; i++)
+    {
+      gfloat aA, aB;
+      gint   j;
+
+      aA = in[3];
+      aB = aux[3];
+      for (j = 0; j < 3; j++)
+        {
+          gfloat cA, cB;
+
+          cA = in[j];
+          cB = aux[j];
+          out[j] = cA + (cA+cB-1.0-cA) * cB;
+        }
+      out[j] = aA;
+      in  += 4;
+      aux += 4;
+      out += 4;
+    }
+
+  return TRUE;
+}
+
+
+static void
+gegl_chant_class_init (GeglChantClass *klass)
+{
+  GeglOperationClass              *operation_class;
+  GeglOperationPointComposerClass *point_composer_class;
+
+  operation_class      = GEGL_OPERATION_CLASS (klass);
+  point_composer_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+  point_composer_class->process = process;
+  operation_class->prepare = prepare;
+
+  operation_class->name        = "gegl:subtractive";
+  operation_class->categories  = "compositors:blend";
+  operation_class->description =
+        _("Image blending operation 'subtractive' (<tt>c = cA+cB-1.0</tt>)");
+}
+
+#endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]