[Git][debian-gis-team/aggdraw][master] 5 commits: New upstream version 1.3.9+ds

Antonio Valentino gitlab at salsa.debian.org
Thu Dec 6 17:54:42 GMT 2018


Antonio Valentino pushed to branch master at Debian GIS Project / aggdraw


Commits:
c0fa215e by Antonio Valentino at 2018-12-05T18:24:21Z
New upstream version 1.3.9+ds
- - - - -
992a8e3d by Antonio Valentino at 2018-12-05T18:24:22Z
Update upstream source from tag 'upstream/1.3.9+ds'

Update to upstream version '1.3.9+ds'
with Debian dir 689182dc6a18579118e1029ebf71c754e3edfb76
- - - - -
981c3739 by Antonio Valentino at 2018-12-05T18:25:16Z
New upstream release

- - - - -
39f7c8b5 by Antonio Valentino at 2018-12-06T17:01:06Z
Update debian/copyright file

- - - - -
2042d51a by Antonio Valentino at 2018-12-06T17:04:25Z
Set distribution to unstable

- - - - -


14 changed files:

- .travis.yml
- README.rst
- aggdraw.cxx
- appveyor.yml
- + ci/appveyor-twine.ps1
- + ci/travis-build.sh
- + ci/travis-install.sh
- debian/changelog
- debian/copyright
- + doc/Makefile
- + doc/conf.py
- + doc/index.rst
- + doc/make.bat
- setup.py


Changes:

=====================================
.travis.yml
=====================================
@@ -1,42 +1,48 @@
 language: python
 env:
-    global:
-        # Set defaults to avoid repeating in most cases
-        - PYTHON_VERSION=$TRAVIS_PYTHON_VERSION
-        - NUMPY_VERSION=stable
-        - MAIN_CMD='python setup.py'
-        - CONDA_DEPENDENCIES='sphinx pillow coveralls coverage'
-        - SETUP_XVFB=False
-        - EVENT_TYPE='push pull_request'
-        - SETUP_CMD='test'
-        - CONDA_CHANNELS='conda-forge'
+  global:
+  - PYTHON_VERSION=$TRAVIS_PYTHON_VERSION
+  - NUMPY_VERSION=stable
+  - MAIN_CMD='python setup.py'
+  - CONDA_DEPENDENCIES='sphinx pillow coveralls coverage'
+  - SETUP_XVFB=False
+  - EVENT_TYPE='push pull_request'
+  - SETUP_CMD='test'
+  - CONDA_CHANNELS='conda-forge'
+  - CIBW_TEST_REQUIRES='numpy pillow'
+  - CIBW_TEST_COMMAND='python {project}/selftest.py'
+  - CIBW_BEFORE_BUILD_LINUX='yum install -y freetype-devel'
+  - TWINE_USERNAME='dhoese'
+  # TWINE_PASSWORD
+  - secure: Cmwxk41Nd+cu7l5Qhl7ZyCuwYg8WGCT53wqFBZMKIDZkNPVsnfaE8G9s1ZPTlpyoMEL5TioYTVjbjPXZD8M3z7OHHicXRP3mO53PrUDsETEl6/gR2h309ux/cWdOGgLd9s6CKT6wjtCT8Clft1cz61Y2ABOEtyTq3mrvPI0PyxE=
 matrix:
-    include:
-    - os: linux
-      sudo: required
-      python: 2.7
-    - os: linux
-      sudo: required
-      python: 3.6
-    - os: osx
-      language: generic
-      env: PYTHON_VERSION=2.7
-    - os: osx
-      language: generic
-      env: PYTHON_VERSION=3.6
+  include:
+  - os: linux
+    env:
+    - BUILDMODE=ASTROPY
+    - PYTHON_VERSION=2.7
+  - os: linux
+    env:
+    - BUILDMODE=ASTROPY
+    - PYTHON_VERSION=3.7
+  - os: osx
+    language: generic
+    env:
+    - BUILDMODE=ASTROPY
+    - PYTHON_VERSION=2.7
+  - os: osx
+    language: generic
+    env:
+    - BUILDMODE=ASTROPY
+    - PYTHON_VERSION=3.7
+  - sudo: required
+    services:
+    - docker
+    env: BUILDMODE=CIBUILDWHEEL
+  - os: osx
+    language: generic
+    env: BUILDMODE=CIBUILDWHEEL
 install:
-    - git clone --depth 1 git://github.com/astropy/ci-helpers.git
-    - source ci-helpers/travis/setup_conda.sh
+- source ci/travis-install.sh
 script:
-    - pip install -e .
-    - python selftest.py
-deploy:
-  provider: pypi
-  user: dhoese
-  password:
-    secure: CYnfdweDHxSlPfks5YDZp9w4i5q4m/iUbIRrt37oHWhWVpnHa19yhk4BOBig5dAVJ5L/nYI/qz5bdE7NNubaXNnJTszhgK6RNRKg0LD80zliJxtCBXPnj8fvCgRKeQieiOurjyy4t0lEfeIVhEaEut9o3CuJXpONh9Zf8oL698Y=
-  on:
-    tags: true
-    repo: pytroll/aggdraw
-    python: 3.6
-    distributions: sdist
+- source ci/travis-build.sh


=====================================
README.rst
=====================================
@@ -13,17 +13,10 @@ Anti-Grain Geometry library (from http://antigrain.com).
 
 The necessary AGG sources are included in the aggdraw source kit.
 
-For posterity, reference `the old documentation
-<http://www.effbot.org/zone/aggdraw.htm>`_.
+For posterity, reference `the old documentation <http://www.effbot.org/zone/aggdraw.htm>`_.
 
-Enjoy /F
-
-fredrik at pythonware.com
-http://www.pythonware.com
-
---------------------------------------------------------------------
 Build instructions (all platforms)
---------------------------------------------------------------------
+----------------------------------
 
 1. Check prerequisites.
 
@@ -33,10 +26,8 @@ Build instructions (all platforms)
 
    The following additional libraries can be used:
 
-   OpenType/TrueType    freetype2 (2.1.10 or later is recommended)
-   support
-                        http://www.freetype.org
-                        http://freetype.sourceforge.net
+   * OpenType/TrueType support - freetype2 (2.1.10 or later is recommended)
+     See http://www.freetype.org and http://freetype.sourceforge.net for details.
 
 2. Configure.
 
@@ -65,9 +56,8 @@ Build instructions (all platforms)
 
 5. Enjoy!
 
---------------------------------------------------------------------
-License
---------------------------------------------------------------------
+AGG2 License
+------------
 
 Anti-Grain Geometry - Version 2.0
 Copyright (c) 2002 Maxim Shemanarev (McSeem)
@@ -77,7 +67,8 @@ is granted provided this copyright notice appears in all copies.
 This software is provided "as is" without express or implied
 warranty, and with no claim as to its suitability for any purpose.
 
---------------------------------------------------------------------
+AggDraw License
+---------------
 
 The aggdraw interface, and associated modules and documentation are:
 
@@ -105,5 +96,3 @@ ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
---------------------------------------------------------------------


=====================================
aggdraw.cxx
=====================================
@@ -577,6 +577,27 @@ static void draw_setup(DrawObject* self)
     }
 }
 
+const char *draw_doc = "Creates a drawing interface object.\n"
+                       "\n"
+                       "Parameters\n"
+                       "----------\n"
+                       "image_or_mode : PIL.Image.Image or str\n"
+                       "    A PIL Image or a mode string. The following modes\n"
+                       "    are supported: \"L\", \"RGB\", \"RGBA\", \"BGR\", \"BGRA\".\n"
+                       "size : tuple\n"
+                       "    If a mode string was given, this argument gives the image size\n"
+                       "    as a 2-element tuple.\n"
+                       "color\n"
+                       "    An optional background color specifier.\n"
+                       "    If a mode string was given, this is used to initialize the image memory.\n"
+                       "    If omitted, it defaults to white with full alpha.\n"
+                       "\n"
+                       "Examples\n"
+                       "--------\n"
+                       "\n"
+                       "    >>> d = aggdraw.Draw(im)\n"
+                       "    >>> d = aggdraw.Draw(\"RGB\", (800, 600), \"white\")\n";
+
 static PyObject*
 draw_new(PyObject* self_, PyObject* args)
 {
@@ -722,6 +743,32 @@ draw_new(PyObject* self_, PyObject* args)
 }
 
 #if defined(WIN32)
+
+const char *dib_doc = "Creates a drawing interface object that can be copied to a window.\n"
+                      "\n"
+                      "This class is only available on Windows platforms.\n"
+                      "This object has the same methods as :class:`Draw`,\n"
+                      "plus an expose method that copies the contents to a given window.\n"
+                      "\n"
+                      ".. versionadded:: 1.2\n"
+                      "\n"
+                      "Parameters\n"
+                      "----------\n"
+                      "mode : str\n"
+                      "    A mode string. Currently this must be \"RGB\".\n"
+                      "size : tuple\n"
+                      "    The image size as a 2-element tuple.\n"
+                      "color\n"
+                      "    An optional background color specifier.\n"
+                      "    If a mode string was given, this is used to initialize the image memory.\n"
+                      "    If omitted, it defaults to white with full alpha.\n"
+                      "\n"
+                      "Example\n"
+                      "-------\n"
+                      "\n"
+                      "    >>> d = aggdraw.Dib(\"RGB\", (800, 600), \"white\")\n"
+                      "    >>> # other operations\n"
+                      "    >>> d.expose(hwnd=window)\n";
 static PyObject*
 draw_dib(PyObject* self_, PyObject* args)
 {
@@ -975,6 +1022,20 @@ getcolor(PyObject* color, int opacity)
 
 /* -------------------------------------------------------------------- */
 
+const char *draw_arc_doc = "Draw a arc.\n"
+                           "\n"
+                           "Parameters\n"
+                           "----------\n"
+                           "xy : iterable\n"
+                           "    A 4-element Python sequence (x, y, x, y), with the\n"
+                           "    upper left corner given first.\n"
+                           "start : float\n"
+                           "    Start angle in degrees.\n"
+                           "end : float\n"
+                           "    End angle in degrees.\n"
+                           "pen : Pen, optional\n"
+                           "    Optional pen object created by the `Pen` factory.\n";
+
 static PyObject*
 draw_arc(DrawObject* self, PyObject* args)
 {
@@ -1000,6 +1061,26 @@ draw_arc(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_chord_doc = "Draw a chord.\n"
+                             "\n"
+                             "If a brush is given, it is used to fill the chord.\n"
+                             "If a pen is given, it is used to draw an outline around the chord.\n"
+                             "Either one (or both) can be left out.\n"
+                             "\n"
+                             "Parameters\n"
+                             "----------\n"
+                             "xy : iterable\n"
+                             "    A 4-element Python sequence (x, y, x, y), with the\n"
+                             "    upper left corner given first.\n"
+                             "start : float\n"
+                             "    Start angle in degrees.\n"
+                             "end : float\n"
+                             "    End angle in degrees.\n"
+                             "pen : Pen, optional\n"
+                             "    Optional pen object created by the `Pen` factory.\n"
+                             "brush : Brush, optional\n"
+                             "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_chord(DrawObject* self, PyObject* args)
 {
@@ -1027,6 +1108,23 @@ draw_chord(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_ellipse_doc = "Draw a ellipse.\n"
+                               "\n"
+                               "If a brush is given, it is used to fill the ellipse.\n"
+                               "If a pen is given, it is used to draw an outline around the ellipse.\n"
+                               "Either one (or both) can be left out.\n"
+                               "\n"
+                               "Parameters\n"
+                               "----------\n"
+                               "xy : iterable\n"
+                               "    A 4-element Python sequence (x, y, x, y), with the\n"
+                               "    upper left corner given first. To draw a circle, make sure the\n"
+                               "    coordinates form a square.\n"
+                               "pen : Pen, optional\n"
+                               "    Optional pen object created by the `Pen` factory.\n"
+                               "brush : Brush, optional\n"
+                               "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_ellipse(DrawObject* self, PyObject* args)
 {
@@ -1048,6 +1146,28 @@ draw_ellipse(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_line_doc = "Draw a line.\n"
+                            "\n"
+                            "Parameters\n"
+                            "----------\n"
+                            "xy : iterable\n"
+                            "    An iterable (x, y, x, y, ...). If more\n"
+                            "    than two coordinate pairs are given, they are connected in order,\n"
+                            "    to form a polyline.\n"
+                            "pen : Pen\n"
+                            "    A pen object created by the Pen factory method.\n"
+                            "\n"
+                            "Examples\n"
+                            "--------\n"
+                            "\n"
+                            "    >>> # a cross\n"
+                            "    >>> pen = aggdraw.Pen(\"red\")\n"
+                            "    >>> draw.line((x0, y0, x1, y1), pen)\n"
+                            "    >>> draw.line((x0, y1, x1, y0), pen)\n"
+                            "\n"
+                            "    >>> # a character\n"
+                            "    >>> draw.line((0, 0, 20, 100, 30, 50, 40, 100, 60, 0), pen)\n";
+
 static PyObject*
 draw_line(DrawObject* self, PyObject* args)
 {
@@ -1075,6 +1195,27 @@ draw_line(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+
+const char *draw_pieslice_doc = "Draw a pieslice.\n"
+                             "\n"
+                             "If a brush is given, it is used to fill the pieslice.\n"
+                             "If a pen is given, it is used to draw an outline around the pieslice.\n"
+                             "Either one (or both) can be left out.\n"
+                             "\n"
+                             "Parameters\n"
+                             "----------\n"
+                             "xy : iterable\n"
+                             "    A 4-element Python sequence (x, y, x, y), with the\n"
+                             "    upper left corner given first.\n"
+                             "start : float\n"
+                             "    Start angle in degrees.\n"
+                             "end : float\n"
+                             "    End angle in degrees.\n"
+                             "pen : Pen, optional\n"
+                             "    Optional pen object created by the `Pen` factory.\n"
+                             "brush : Brush, optional\n"
+                             "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_pieslice(DrawObject* self, PyObject* args)
 {
@@ -1106,6 +1247,21 @@ draw_pieslice(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_polygon_doc = "Draw a polygon.\n"
+                               "\n"
+                               "If a brush is given, it is used to fill the polygon.\n"
+                               "If a pen is given, it is used to draw an outline around the polygon.\n"
+                               "Either one (or both) can be left out.\n"
+                               "\n"
+                               "Parameters\n"
+                               "----------\n"
+                               "xy : iterable\n"
+                               "    A Python sequence (x, y, x, y, …).\n"
+                               "pen : Pen\n"
+                               "    Optional pen object created by the `Pen` factory.\n"
+                               "brush : Brush\n"
+                               "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_polygon(DrawObject* self, PyObject* args)
 {
@@ -1135,6 +1291,21 @@ draw_polygon(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_rectangle_doc = "Draw a rectangle.\n"
+                                 "\n"
+                                 "If a brush is given, it is used to fill the rectangle.\n"
+                                 "If a pen is given, it is used to draw an outline around the rectangle.\n"
+                                 "Either one (or both) can be left out.\n"
+                                 "\n"
+                                 "Parameters\n"
+                                 "----------\n"
+                                 "xy : iterable\n"
+                                 "    A Python sequence (x, y, x, y, …).\n"
+                                 "pen : Pen\n"
+                                 "    Optional pen object created by the `Pen` factory.\n"
+                                 "brush : Brush\n"
+                                 "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_rectangle(DrawObject* self, PyObject* args)
 {
@@ -1158,6 +1329,23 @@ draw_rectangle(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_path_doc = "Draw a path at the given positions (experimental).\n"
+                            "\n"
+                            "If a brush is given, it is used to fill the path.\n"
+                            "If a pen is given, it is used to draw an outline around the path.\n"
+                            "Either one (or both) can be left out.\n"
+                            "\n"
+                            "Parameters\n"
+                            "----------\n"
+                            "xy : iterable\n"
+                            "    A Python sequence (x, y, x, y, …).\n"
+                            "path : Path\n"
+                            "    Path object created by the `Path` factory.\n"
+                            "pen : Pen\n"
+                            "    Optional pen object created by the `Pen` factory.\n"
+                            "brush : Brush\n"
+                            "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject* 
 draw_path(DrawObject* self, PyObject* args){
     PathObject* path;
@@ -1179,6 +1367,23 @@ draw_path(DrawObject* self, PyObject* args){
     return Py_None;
 };
 
+const char *draw_symbol_doc = "Draw a symbol at the given positions (experimental).\n"
+                              "\n"
+                              "If a brush is given, it is used to fill the symbol.\n"
+                              "If a pen is given, it is used to draw an outline around the symbol.\n"
+                              "Either one (or both) can be left out.\n"
+                              "\n"
+                              "Parameters\n"
+                              "----------\n"
+                              "xy : iterable\n"
+                              "    A Python sequence (x, y, x, y, …).\n"
+                              "symbol : Symbol\n"
+                              "    Symbol object created by the `Symbol` factory.\n"
+                              "pen : Pen\n"
+                              "    Optional pen object created by the `Pen` factory.\n"
+                              "brush : Brush\n"
+                              "    Optional brush object created by the `Brush` factory.\n";
+
 static PyObject*
 draw_symbol(DrawObject* self, PyObject* args)
 {
@@ -1211,6 +1416,18 @@ draw_symbol(DrawObject* self, PyObject* args)
 }
 
 #if defined(HAVE_FREETYPE2)
+
+const char *draw_text_doc = "Draws a text string at the given position, using the given font.\n"
+                            "\n"
+                            "Parameters\n"
+                            "----------\n"
+                            "xy : tuple\n"
+                            "    A two element tuple (x, y).\n"
+                            "text : str\n"
+                            "    String to draw.\n"
+                            "font : Font\n"
+                            "    A font object created by the Font factory.\n";
+
 static PyObject*
 draw_text(DrawObject* self, PyObject* args)
 {
@@ -1229,6 +1446,16 @@ draw_text(DrawObject* self, PyObject* args)
 #endif
 
 #if defined(HAVE_FREETYPE2)
+
+const char *draw_textsize_doc = "Draws a text string at the given position, using the given font.\n"
+                                "\n"
+                                "Parameters\n"
+                                "----------\n"
+                                "text : str\n"
+                                "    String to get the drawn size of.\n"
+                                "font : Font\n"
+                                "    A font object created by the Font factory.\n";
+
 static PyObject*
 draw_textsize(DrawObject* self, PyObject* args)
 {
@@ -1259,6 +1486,13 @@ draw_textsize(DrawObject* self, PyObject* args)
 }
 #endif
 
+const char *draw_setantialias_doc = "Control anti-aliasing (experimental).\n"
+                            "\n"
+                            "Parameters\n"
+                            "----------\n"
+                            "flag : bool\n"
+                            "    True to enable anti-aliasing, false to disable.\n";
+
 static PyObject*
 draw_setantialias(DrawObject* self, PyObject* args)
 {
@@ -1272,6 +1506,20 @@ draw_setantialias(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_settransform_doc = "Replace the current drawing transform (experimental).\n"
+                            "\n"
+                            "Parameters\n"
+                            "----------\n"
+                            "transform\n"
+                            "    The new transform. In the current version, this must be either\n"
+                            "    a (dx, dy) translation tuple, or a PIL-style (a, b, c, d, e, f)\n"
+                            "    affine transform tuple. If the transform is omitted, it is reset.\n"
+                            "\n"
+                            "Examples\n"
+                            "--------\n"
+                            "\n"
+                            "    >>> draw.settransform((dx, dy))\n";
+
 static PyObject*
 draw_settransform(DrawObject* self, PyObject* args)
 {
@@ -1296,6 +1544,13 @@ draw_settransform(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_frombytes_doc = "Copies data from a string buffer to the drawing area."
+                                 "\n"
+                                 "Parameters\n"
+                                 "----------\n"
+                                 "data : bytes\n"
+                                 "    A string containing packed image data, compatible with PIL’s tostring method.\n";
+
 static PyObject*
 draw_frombytes(DrawObject* self, PyObject* args)
 {
@@ -1314,6 +1569,12 @@ draw_frombytes(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_tobytes_doc = "Copies data from the drawing area to a string.\n"
+                               "\n"
+                               "Returns\n"
+                               "-------\n"
+                               "A string containing packed image data, compatible with PIL’s fromstring method.\n";
+
 static PyObject*
 draw_tobytes(DrawObject* self, PyObject* args)
 {
@@ -1325,6 +1586,14 @@ draw_tobytes(DrawObject* self, PyObject* args)
         );
 }
 
+const char *draw_clear_doc = "Clear the image.\n"
+                             "\n"
+                             "Parameters\n"
+                             "----------\n"
+                             "color : tuple or str or int\n"
+                             "    Background color. This can be a color tuple (R, G, B) or (R, G, B, A), \n"
+                             "    a CSS-style color name, or a color integer (0xaarrggbb).\n";
+
 static PyObject*
 draw_clear(DrawObject* self, PyObject* args)
 {
@@ -1338,6 +1607,17 @@ draw_clear(DrawObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *draw_expose_doc = "Copies the contents of the drawing object to the given window or device context.\n"
+                              "\n"
+                              "You must provide either a ``hwnd`` or a ``hdc`` keyword argument.\n"
+                              "\n"
+                              "Parameters\n"
+                              "----------\n"
+                              "hwnd : int\n"
+                              "    A HWND handle, cast to an integer.\n"
+                              "hdc : int\n"
+                              "    A HDC handle, cast to an integer.\n";
+
 #if defined(WIN32)
 static PyObject*
 draw_expose(DrawObject* self, PyObject* args, PyObject* kw)
@@ -1385,6 +1665,10 @@ draw_expose(DrawObject* self, PyObject* args, PyObject* kw)
 }
 #endif
 
+const char *draw_flush_doc = "Updates the associated image.\n"
+                             "\n"
+                             "If the drawing area is attached to a PIL Image object, this method\n"
+                             "must be called to make sure that the image updated.\n";
 static PyObject*
 draw_flush(DrawObject* self, PyObject* args)
 {
@@ -1438,36 +1722,36 @@ draw_dealloc(DrawObject* self)
 
 static PyMethodDef draw_methods[] = {
 
-    {"line", (PyCFunction) draw_line, METH_VARARGS},
-    {"polygon", (PyCFunction) draw_polygon, METH_VARARGS},
-    {"rectangle", (PyCFunction) draw_rectangle, METH_VARARGS},
+    {"line", (PyCFunction) draw_line, METH_VARARGS, draw_line_doc},
+    {"polygon", (PyCFunction) draw_polygon, METH_VARARGS, draw_polygon_doc},
+    {"rectangle", (PyCFunction) draw_rectangle, METH_VARARGS, draw_rectangle_doc},
 
 #if defined(HAVE_FREETYPE2)
-    {"text", (PyCFunction) draw_text, METH_VARARGS},
-    {"textsize", (PyCFunction) draw_textsize, METH_VARARGS},
+    {"text", (PyCFunction) draw_text, METH_VARARGS, draw_text_doc},
+    {"textsize", (PyCFunction) draw_textsize, METH_VARARGS, draw_textsize_doc},
 #endif
 
-    {"path", (PyCFunction) draw_path, METH_VARARGS},
-    {"symbol", (PyCFunction) draw_symbol, METH_VARARGS},
+    {"path", (PyCFunction) draw_path, METH_VARARGS, draw_path_doc},
+    {"symbol", (PyCFunction) draw_symbol, METH_VARARGS, draw_symbol_doc},
 
-    {"arc", (PyCFunction) draw_arc, METH_VARARGS},
-    {"chord", (PyCFunction) draw_chord, METH_VARARGS},
-    {"ellipse", (PyCFunction) draw_ellipse, METH_VARARGS},
-    {"pieslice", (PyCFunction) draw_pieslice, METH_VARARGS},
+    {"arc", (PyCFunction) draw_arc, METH_VARARGS, draw_arc_doc},
+    {"chord", (PyCFunction) draw_chord, METH_VARARGS, draw_chord_doc},
+    {"ellipse", (PyCFunction) draw_ellipse, METH_VARARGS, draw_ellipse_doc},
+    {"pieslice", (PyCFunction) draw_pieslice, METH_VARARGS, draw_pieslice_doc},
 
-    {"settransform", (PyCFunction) draw_settransform, METH_VARARGS},
-    {"setantialias", (PyCFunction) draw_setantialias, METH_VARARGS},
+    {"settransform", (PyCFunction) draw_settransform, METH_VARARGS, draw_settransform_doc},
+    {"setantialias", (PyCFunction) draw_setantialias, METH_VARARGS, draw_setantialias_doc},
 
-    {"flush", (PyCFunction) draw_flush, METH_VARARGS},
+    {"flush", (PyCFunction) draw_flush, METH_VARARGS, draw_flush_doc},
 
 #if defined(WIN32)
-    {"expose", (PyCFunction) draw_expose, METH_VARARGS|METH_KEYWORDS},
+    {"expose", (PyCFunction) draw_expose, METH_VARARGS|METH_KEYWORDS, draw_expose_doc},
 #endif
 
-    {"clear", (PyCFunction) draw_clear, METH_VARARGS},
+    {"clear", (PyCFunction) draw_clear, METH_VARARGS, draw_clear_doc},
 
-    {"frombytes", (PyCFunction) draw_frombytes, METH_VARARGS},
-    {"tobytes", (PyCFunction) draw_tobytes, METH_VARARGS},
+    {"frombytes", (PyCFunction) draw_frombytes, METH_VARARGS, draw_frombytes_doc},
+    {"tobytes", (PyCFunction) draw_tobytes, METH_VARARGS, draw_tobytes_doc},
 
     {NULL, NULL}
 };
@@ -1508,6 +1792,18 @@ draw_getattr(DrawObject* self, char* name)
 
 /* -------------------------------------------------------------------- */
 
+const char *pen_doc = "Creates a Pen object.\n"
+                      "\n"
+                      "Parameters\n"
+                      "----------\n"
+                      "color : tuple or str or int\n"
+                      "    Pen color. This can be a color tuple (R, G, B) or (R, G, B, A), \n"
+                      "    a CSS-style color name, or a color integer (0xaarrggbb).\n"
+                      "width : int, optional\n"
+                      "    Pen width. Default 1.\n"
+                      "opacity : int, optional\n"
+                      "    Pen opacity. Default 255.\n";
+
 static PyObject*
 pen_new(PyObject* self_, PyObject* args, PyObject* kw)
 {
@@ -1540,6 +1836,16 @@ pen_dealloc(PenObject* self)
 
 /* -------------------------------------------------------------------- */
 
+const char *brush_doc = "Creates a brush object.\n"
+                        "\n"
+                        "Parameters\n"
+                        "----------\n"
+                        "color : tuple or str or int\n"
+                        "    Brush color. This can be a color tuple (R, G, B) or (R, G, B, A), \n"
+                        "    a CSS-style color name, or a color integer (0xaarrggbb).\n"
+                        "opacity : int, optional\n"
+                        "    Brush opacity. Default 255.\n";
+
 static PyObject*
 brush_new(PyObject* self_, PyObject* args, PyObject* kw)
 {
@@ -1571,6 +1877,20 @@ brush_dealloc(BrushObject* self)
 
 /* -------------------------------------------------------------------- */
 
+const char *font_doc = "Create a font object from a truetype font file for use with `text` and `textsize`.\n"
+                       "\n"
+                       "Parameters\n"
+                       "----------\n"
+                       "color : tuple or str or int\n"
+                       "    Font color. This can be a color tuple (R, G, B) or (R, G, B, A), \n"
+                       "    a CSS-style color name, or a color integer (0xaarrggbb).\n"
+                       "file : str\n"
+                       "    Font source file.\n"
+                       "size : int, optional\n"
+                       "    Font size in pixels. Default 12.\n"
+                       "opacity : int, optional\n"
+                       "    Font opacity. Default 255.\n";
+
 static PyObject*
 font_new(PyObject* self_, PyObject* args, PyObject* kw)
 {
@@ -1731,6 +2051,8 @@ font_dealloc(FontObject* self)
 
 /* -------------------------------------------------------------------- */
 
+const char *path_doc = "Path factory (experimental).\n";
+
 static PyObject*
 path_new(PyObject* self_, PyObject* args)
 {
@@ -1761,6 +2083,17 @@ path_new(PyObject* self_, PyObject* args)
     return (PyObject*) self;
 }
 
+const char *symbol_doc = "Create a Symbol object for use with :meth:`Draw.symbol`.\n"
+                         "\n"
+                         "Parameters\n"
+                         "----------\n"
+                         "path : str\n"
+                         "    An SVG-style path descriptor. The following operators\n"
+                         "    are supported: M (move), L (line), H (horizontal line), V (vertical line),\n"
+                         "    C (cubic bezier), S (smooth cubic bezier), Q (quadratic bezier),\n"
+                         "    T (smooth quadratic bezier), and Z (close path). Use lower-case\n"
+                         "    operators for relative coordinates, upper-case for absolute coordinates.\n";
+
 static PyObject*
 symbol_new(PyObject* self_, PyObject* args)
 {
@@ -1955,6 +2288,13 @@ void expandPaths(PathObject *self)
     delete path;
 }
 
+const char *path_moveto_doc = "Move the path pointer to the given location.\n"
+                              "\n"
+                              "Parameters\n"
+                              "----------\n"
+                              "x\n"
+                              "y\n";
+
 static PyObject*
 path_moveto(PathObject* self, PyObject* args)
 {
@@ -1968,6 +2308,13 @@ path_moveto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_rmoveto_doc = "Move the path pointer to the given location, relative to the current position.\n"
+                               "\n"
+                               "Parameters\n"
+                               "----------\n"
+                               "x\n"
+                               "y\n";
+
 static PyObject*
 path_rmoveto(PathObject* self, PyObject* args)
 {
@@ -1982,6 +2329,13 @@ path_rmoveto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_lineto_doc = "Adds a line segment to the path.\n"
+                              "\n"
+                              "Parameters\n"
+                              "----------\n"
+                              "x\n"
+                              "y\n";
+
 static PyObject*
 path_lineto(PathObject* self, PyObject* args)
 {
@@ -1995,6 +2349,15 @@ path_lineto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_rlineto_doc = "Adds a line segment to the path, using relative coordinates.\n"
+                               "\n"
+                               "Same as lineto, but the coordinates are relative to the current position.\n"
+                               "\n"
+                               "Parameters\n"
+                               "----------\n"
+                               "x\n"
+                               "y\n";
+
 static PyObject*
 path_rlineto(PathObject* self, PyObject* args)
 {
@@ -2009,6 +2372,17 @@ path_rlineto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_curveto_doc = "Adds a line segment to the path.\n"
+                               "\n"
+                               "Parameters\n"
+                               "----------\n"
+                               "x1\n"
+                               "y1\n"
+                               "x2\n"
+                               "y2\n"
+                               "x\n"
+                               "y\n";
+
 static PyObject*
 path_curveto(PathObject* self, PyObject* args)
 {
@@ -2024,6 +2398,19 @@ path_curveto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_rcurveto_doc = "Adds a bezier curve segment to the path, using relative coordinates.\n"
+                                "\n"
+                                "Same as curveto, but the coordinates are relative to the current position.\n"
+                                "\n"
+                                "Parameters\n"
+                                "----------\n"
+                                "x1\n"
+                                "y1\n"
+                                "x2\n"
+                                "y2\n"
+                                "x\n"
+                                "y\n";
+
 static PyObject*
 path_rcurveto(PathObject* self, PyObject* args)
 {
@@ -2041,6 +2428,8 @@ path_rcurveto(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_close_doc = "Close the current path.";
+
 static PyObject*
 path_close(PathObject* self, PyObject* args)
 {
@@ -2085,6 +2474,10 @@ path_polygon(PathObject* self, PyObject* args)
     return Py_None;
 }
 
+const char *path_coords_doc = "Returns the coordinates for this path.\n"
+                              "\n"
+                              "Curves are flattened before being returned.\n";
+
 static PyObject*
 path_coords(PathObject* self, PyObject* args)
 {
@@ -2125,18 +2518,18 @@ path_dealloc(PathObject* self)
 
 static PyMethodDef path_methods[] = {
 
-    {"lineto", (PyCFunction) path_lineto, METH_VARARGS},
-    {"rlineto", (PyCFunction) path_rlineto, METH_VARARGS},
-    {"curveto", (PyCFunction) path_curveto, METH_VARARGS},
-    {"rcurveto", (PyCFunction) path_rcurveto, METH_VARARGS},
-    {"moveto", (PyCFunction) path_moveto, METH_VARARGS},
-    {"rmoveto", (PyCFunction) path_rmoveto, METH_VARARGS},
+    {"lineto", (PyCFunction) path_lineto, METH_VARARGS, path_lineto_doc},
+    {"rlineto", (PyCFunction) path_rlineto, METH_VARARGS, path_rlineto_doc},
+    {"curveto", (PyCFunction) path_curveto, METH_VARARGS, path_curveto_doc},
+    {"rcurveto", (PyCFunction) path_rcurveto, METH_VARARGS, path_rcurveto_doc},
+    {"moveto", (PyCFunction) path_moveto, METH_VARARGS, path_moveto_doc},
+    {"rmoveto", (PyCFunction) path_rmoveto, METH_VARARGS, path_rmoveto_doc},
 
-    {"close", (PyCFunction) path_close, METH_VARARGS},
+    {"close", (PyCFunction) path_close, METH_VARARGS, path_close_doc},
 
     {"polygon", (PyCFunction) path_polygon, METH_VARARGS},
 
-    {"coords", (PyCFunction) path_coords, METH_VARARGS},
+    {"coords", (PyCFunction) path_coords, METH_VARARGS, path_coords_doc},
 
     {NULL, NULL}
 };
@@ -2159,23 +2552,47 @@ path_getattr(PathObject* self, char* name)
 /* -------------------------------------------------------------------- */
 
 static PyMethodDef aggdraw_functions[] = {
-    {"Pen", (PyCFunction) pen_new, METH_VARARGS|METH_KEYWORDS},
-    {"Brush", (PyCFunction) brush_new, METH_VARARGS|METH_KEYWORDS},
-    {"Font", (PyCFunction) font_new, METH_VARARGS|METH_KEYWORDS},
-    {"Symbol", (PyCFunction) symbol_new, METH_VARARGS},
-    {"Path", (PyCFunction) path_new, METH_VARARGS},
-    {"Draw", (PyCFunction) draw_new, METH_VARARGS},
+    {"Pen", (PyCFunction) pen_new, METH_VARARGS|METH_KEYWORDS, pen_doc},
+    {"Brush", (PyCFunction) brush_new, METH_VARARGS|METH_KEYWORDS, brush_doc},
+    {"Font", (PyCFunction) font_new, METH_VARARGS|METH_KEYWORDS, font_doc},
+    {"Symbol", (PyCFunction) symbol_new, METH_VARARGS, symbol_doc},
+    {"Path", (PyCFunction) path_new, METH_VARARGS, path_doc},
+    {"Draw", (PyCFunction) draw_new, METH_VARARGS, draw_doc},
 #if defined(WIN32)
-    {"Dib", (PyCFunction) draw_dib, METH_VARARGS},
+    {"Dib", (PyCFunction) draw_dib, METH_VARARGS, dib_doc},
 #endif
     {NULL, NULL}
 };
 
+const char *mod_doc = "Python interface to the Anti-Grain Graphics Drawing library\n"
+                      "\n"
+                      "The aggdraw module implements the basic WCK 2D Drawing Interface on top\n"
+                      "of `the AGG library <http://www.antigrain.com/>`_. This library supports\n"
+                      "anti-aliasing and alpha compositing,\n"
+                      "but is otherwise fully compatible with the WCK renderer.\n"
+                      "\n"
+                      "Examples\n"
+                      "--------\n"
+                      "\n"
+                      "    >>> # draw cross on top of PIL image\n"
+                      "    >>> d = aggdraw.Draw(im)\n"
+                      "    >>> p = aggdraw.Pen(\"black\", 0.5)\n"
+                      "    >>> d.line((0, 0, 500, 500), p)\n"
+                      "    >>> d.line((0, 500, 500, 0), p)\n"
+                      "    >>> d.flush()\n"
+                      "\n"
+                      "    >>> # draw cross on internal image memory\n"
+                      "    >>> d = aggdraw.Draw(\"RGB\", (320, 200), \"white\")\n"
+                      "    >>> p = aggdraw.Pen(\"black\", 0.5)\n"
+                      "    >>> d.line((0, 0, 500, 500), p)\n"
+                      "    >>> d.line((0, 500, 500, 0), p)\n"
+                      "    >>> s = d.tostring()\n";
+
 #ifdef IS_PY3K
 static struct PyModuleDef moduledef = {
         PyModuleDef_HEAD_INIT,
         "aggdraw",
-        "Python interface to the Anti-Grain Graphics Drawing library",
+        mod_doc,
         -1,
         aggdraw_functions,
         NULL,
@@ -2209,8 +2626,7 @@ aggdraw_init(void)
     DrawType.ob_type = PathType.ob_type = &PyType_Type;
     PenType.ob_type = BrushType.ob_type = FontType.ob_type = &PyType_Type;
 
-    PyObject *module = Py_InitModule3("aggdraw", aggdraw_functions,
-                                      "Python interface to the Anti-Grain Graphics Drawing library");
+    PyObject *module = Py_InitModule3("aggdraw", aggdraw_functions, mod_doc);
     PyObject *version = PyBytes_FromString(QUOTE(VERSION));
     PyObject_SetAttrString(module, "VERSION", version);
     PyObject_SetAttrString(module, "__version__", version);


=====================================
appveyor.yml
=====================================
@@ -5,49 +5,63 @@ environment:
     CMD_IN_ENV: "cmd /E:ON /V:ON /C .\\ci-helpers\\appveyor\\windows_sdk.cmd"
     CONDA_DEPENDENCIES: "sphinx pillow coveralls coverage"
     CONDA_CHANNELS: "conda-forge"
+    TWINE_USERNAME: "dhoese"
+    TWINE_PASSWORD:
+      secure: zws6RrJGZ5XULrqXQDF/Cw==
 
   matrix:
+
+    - CIBW_TEST_REQUIRES: "numpy pillow"
+      CIBW_TEST_COMMAND: "python {project}\\selftest.py"
+      CIBUILDWHEEL: 1
+
     - PYTHON: "C:\\Python27_32"
       PYTHON_VERSION: "2.7"
       PYTHON_ARCH: "32"
       NUMPY_VERSION: "stable"
+      CIBUILDWHEEL: 0
 
     - PYTHON: "C:\\Python27_64"
       PYTHON_VERSION: "2.7"
       PYTHON_ARCH: "64"
       NUMPY_VERSION: "stable"
+      CIBUILDWHEEL: 0
 
     - PYTHON: "C:\\Python36_32"
       PYTHON_VERSION: "3.6"
       PYTHON_ARCH: "32"
       NUMPY_VERSION: "stable"
+      CIBUILDWHEEL: 0
 
     - PYTHON: "C:\\Python36_64"
       PYTHON_VERSION: "3.6"
       PYTHON_ARCH: "64"
       NUMPY_VERSION: "stable"
+      CIBUILDWHEEL: 0
 
 install:
-    - "git clone --depth 1 git://github.com/astropy/ci-helpers.git"
-    - "powershell ci-helpers/appveyor/install-miniconda.ps1"
-    - "SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%"
-    - "activate test"
-
+  - if [%CIBUILDWHEEL%]==[0] git clone --depth 1 git://github.com/astropy/ci-helpers.git
+  - if [%CIBUILDWHEEL%]==[0] powershell ci-helpers/appveyor/install-miniconda.ps1
+  - if [%CIBUILDWHEEL%]==[0] SET PATH=%PYTHON%;%PYTHON%\\Scripts;%PATH%
+  - if [%CIBUILDWHEEL%]==[0] call activate test
+  
 build: false  # Not a C# project, build stuff at the test step instead.
 
+build_script:
+  - if [%CIBUILDWHEEL%]==[1] pip install cibuildwheel==0.10.0
+  - if [%CIBUILDWHEEL%]==[1] cibuildwheel --output-dir dist
+  - if [%CIBUILDWHEEL%]==[1] powershell ci/appveyor-twine.ps1
+
+
 test_script:
-  - "%CMD_IN_ENV% pip install -e ."
-  - "%CMD_IN_ENV% python selftest.py"
+  - if [%CIBUILDWHEEL%]==[0] conda info --envs
+  - if [%CIBUILDWHEEL%]==[0] %CMD_IN_ENV% pip install -e .
+  - if [%CIBUILDWHEEL%]==[0] %CMD_IN_ENV% python selftest.py
 
 after_test:
-  # If tests are successful, create a whl package for the project.
-  - "%CMD_IN_ENV% python setup.py bdist_wheel bdist_wininst"
+  - if [%CIBUILDWHEEL%]==[0] %CMD_IN_ENV% python setup.py bdist_wheel bdist_wininst
   - ps: "ls dist"
 
 artifacts:
   # Archive the generated wheel package in the ci.appveyor.com build report.
   - path: dist\*
-
-#on_success:
-#  - TODO: upload the content of dist/*.whl to a public wheelhouse
-#


=====================================
ci/appveyor-twine.ps1
=====================================
@@ -0,0 +1,6 @@
+# Small script for uploading wheels to pypi with twine
+
+if($env:appveyor_repo_tag -eq "true") {
+    python -m pip install twine
+    python -m twine upload --skip-existing dist/*.whl
+}
\ No newline at end of file


=====================================
ci/travis-build.sh
=====================================
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+
+set -ex
+
+if [ "${BUILDMODE}" = "ASTROPY" ]; then
+    
+    pip install -e .
+    python selftest.py
+
+elif [ "${BUILDMODE}" = "CIBUILDWHEEL" ]; then
+
+    export PIP=pip
+    if [ $(uname) = "Darwin" ]; then
+      export PIP=pip2
+    fi
+    cibuildwheel --output-dir wheelhouse
+    if [[ $TRAVIS_TAG ]]; then
+        python -m pip install twine
+        python -m twine upload --skip-existing wheelhouse/*.whl
+        if [ $(uname) = "Darwin" ]; then # so we only do this once
+            python setup.py sdist
+            python -m twine upload --skip-existing dist/*.tar.gz
+        fi
+    fi
+fi
\ No newline at end of file


=====================================
ci/travis-install.sh
=====================================
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+
+if [ "${BUILDMODE}" = "ASTROPY" ]; then
+
+    git clone --depth 1 git://github.com/astropy/ci-helpers.git
+    source ci-helpers/travis/setup_conda.sh
+
+elif [ "${BUILDMODE}" = "CIBUILDWHEEL" ]; then
+
+  export PIP=pip
+  if [ $(uname) = "Darwin" ]; then
+    export PIP=pip2
+  fi
+  $PIP install cibuildwheel==0.10.0
+
+fi
\ No newline at end of file


=====================================
debian/changelog
=====================================
@@ -1,3 +1,10 @@
+aggdraw (1.3.9+ds-1) unstable; urgency=medium
+
+  * New upstream release.
+  * Update debian/copyright file.
+
+ -- Antonio Valentino <antonio.valentino at tiscali.it>  Thu, 06 Dec 2018 17:04:08 +0000
+
 aggdraw (1.3.7+ds-1) unstable; urgency=medium
 
   * Initial release (Closes: #913943).


=====================================
debian/copyright
=====================================
@@ -13,6 +13,10 @@ Copyright: 2011-2018 AggDraw Developers
            2003      Hansruedi Baer (MacOS support)
 License: aggdraw
 
+Files: agg2/*
+Copyright: 2002 Maxim Shemanarev (McSeem)
+License: agg2
+
 Files: debian/*
 Copyright: 2018 Antonio Valentino <antonio.valentino at tiscali.it>
 License: aggdraw
@@ -44,16 +48,12 @@ License: aggdraw
  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
  OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- .
- The AggDraw repository and source distributions bundle other libraries that
- are compatibly license. We list these here.
- .
- Name: Anti-Grain Geometry - Version 2.0
- Files: agg2/*
- .
-     Copyright (c) 2002 Maxim Shemanarev (McSeem)
- .
-     Permission to copy, use, modify, sell and distribute this software
-     is granted provided this copyright notice appears in all copies.
-     This software is provided "as is" without express or implied
-     warranty, and with no claim as to its suitability for any purpose.
+
+License: agg2
+ Anti-Grain Geometry - Version 2.0
+ Copyright (c) 2002 Maxim Shemanarev (McSeem)
+ .
+ Permission to copy, use, modify, sell and distribute this software
+ is granted provided this copyright notice appears in all copies.
+ This software is provided "as is" without express or implied
+ warranty, and with no claim as to its suitability for any purpose.


=====================================
doc/Makefile
=====================================
@@ -0,0 +1,19 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+SOURCEDIR     = .
+BUILDDIR      = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file


=====================================
doc/conf.py
=====================================
@@ -0,0 +1,195 @@
+# -*- coding: utf-8 -*-
+#
+# Configuration file for the Sphinx documentation builder.
+#
+# This file does only contain a selection of the most common options. For a
+# full list see the documentation:
+# http://www.sphinx-doc.org/en/master/config
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# To generate apidoc modules:
+#     sphinx-apidoc -f -T -o source/api ../aggdraw ../aggdraw/tests
+
+import os
+import sys
+sys.path.append(os.path.abspath('../../'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'aggdraw'
+copyright = '2018, aggdraw Developers'
+author = 'aggdraw Developers'
+
+# The short X.Y version
+version = '1.3.8'
+# The full version, including alpha/beta/rc tags
+release = '1.3.8'
+
+
+# -- General configuration ---------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#
+# needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.doctest',
+    'sphinx.ext.intersphinx',
+    'sphinx.ext.todo',
+    'sphinx.ext.imgmath',
+    'sphinx.ext.napoleon',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = None
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'alabaster'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#
+# html_theme_options = {}
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# The default sidebars (for documents that don't match any pattern) are
+# defined by theme itself.  Builtin themes are using these templates by
+# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
+# 'searchbox.html']``.
+#
+# html_sidebars = {}
+
+
+# -- Options for HTMLHelp output ---------------------------------------------
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'aggdrawdoc'
+
+
+# -- Options for LaTeX output ------------------------------------------------
+
+latex_elements = {
+    # The paper size ('letterpaper' or 'a4paper').
+    #
+    # 'papersize': 'letterpaper',
+
+    # The font size ('10pt', '11pt' or '12pt').
+    #
+    # 'pointsize': '10pt',
+
+    # Additional stuff for the LaTeX preamble.
+    #
+    # 'preamble': '',
+
+    # Latex figure (float) alignment
+    #
+    # 'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+    (master_doc, 'aggdraw.tex', 'aggdraw Documentation',
+     'aggdraw Developers', 'manual'),
+]
+
+
+# -- Options for manual page output ------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'aggdraw', 'aggdraw Documentation',
+     [author], 1)
+]
+
+
+# -- Options for Texinfo output ----------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+    (master_doc, 'aggdraw', 'aggdraw Documentation',
+     author, 'aggdraw', 'One line description of project.',
+     'Miscellaneous'),
+]
+
+
+# -- Options for Epub output -------------------------------------------------
+
+# Bibliographic Dublin Core info.
+epub_title = project
+
+# The unique identifier of the text. This can be a ISBN number
+# or the project homepage.
+#
+# epub_identifier = ''
+
+# A unique identification for the text.
+#
+# epub_uid = ''
+
+# A list of files that should not be packed into the epub file.
+epub_exclude_files = ['search.html']
+
+
+# -- Extension configuration -------------------------------------------------
+
+# -- Options for intersphinx extension ---------------------------------------
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'https://docs.python.org/': None}
+
+# -- Options for todo extension ----------------------------------------------
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
\ No newline at end of file


=====================================
doc/index.rst
=====================================
@@ -0,0 +1,19 @@
+.. aggdraw documentation master file, created by
+   sphinx-quickstart on Sun Nov 25 14:38:56 2018.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+AggDraw's documentation
+=======================
+
+.. automodule:: aggdraw
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`


=====================================
doc/make.bat
=====================================
@@ -0,0 +1,35 @@
+ at ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+	echo.installed, then set the SPHINXBUILD environment variable to point
+	echo.to the full path of the 'sphinx-build' executable. Alternatively you
+	echo.may add the Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.http://sphinx-doc.org/
+	exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+
+:end
+popd


=====================================
setup.py
=====================================
@@ -20,7 +20,7 @@ try:
 except ImportError:
     from distutils.core import setup, Extension
 
-VERSION = "1.3.7"
+VERSION = "1.3.9"
 
 SUMMARY = "High quality drawing interface for PIL."
 



View it on GitLab: https://salsa.debian.org/debian-gis-team/aggdraw/compare/578056fae7c8fd1a91272ae6243d32f8dbfefbe2...2042d51acd38b61fc08b5bd92afad8d879a9b569

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/aggdraw/compare/578056fae7c8fd1a91272ae6243d32f8dbfefbe2...2042d51acd38b61fc08b5bd92afad8d879a9b569
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20181206/73678c85/attachment-0001.html>


More information about the Pkg-grass-devel mailing list