2023-11-11
    Updated docs to v0.90
2023-11-02
    Added support for comment elements, the EID_TITLE and EID_DESC elements defined
    in the SVG standard and also XML comments as the virtual element EID_V_COMMENT.
    Comment elements are supported only if they are direct children of a container
    element: EID_SVG, EID_DEFS, EID_G or EID_FONT.
2023-11-01
    Solved stack buffer overflow in cook2raw.c in the addColorExtRawAttr function,
    reported by personnumber3377 (https://github.com/personnumber3377 )
2023-05-08
    Updated docs to v0.81
2023-04-17
    Solved problem rendering with GD, it seems that fill primitives take the
    stroke width in account ¿why? so set it to "1" before fill.
2023-04-12
    Added -z -rt and -dp parameters to gd/svg2png.c and mgrx/svg2png.c
    in GD rendering use a gray color when a gradient is nedeed for fill or stroke.
    in GD rendering calculate the pixel per unit instead of using a fixed value.
2023-04-10
    In the GD example programs use the gdImageSX and gdImageSY funtions to
    get the image dimensions.
2023-04-11
    The MGRX example programs are using the new multi-polygon functions in
    MGRX v1.4.3 if available, so paths with multiple subpaths are filled at
    once like it must be.
2023-04-03
    Updated docs to v0.80
2023-04-03
    The MGRX test programs showsvg and svg2png call MsvgNormalizeRawGradients
    before render.
    Added some gradient examples to svgpic subdir.
2023-04-01
    The MGRX test programs can render now gradients.
2023-04-01
    Added genbps parameter to MsvgSerCookedTree to generate binary paint servers
    when possible. MsvgTransformCookedElement adjust binary paint servers units
    if they are present.
2023-03-31
    Modified gd and mgrx makefiles to use the include and library files in the src
    subdirectory, so it isn't necesary to install the lib previosly.
2023-03-31
    New MsvgBPServer structure to store a binary representation of a linear or radial
    gradient. Added fill_bps and stroke_bps members to the MsvgPaintCtx struct to
    store pointers to binary paint servers for fill and stroke operations.
    New functions:
        MsvgBPServer *MsvgNewBPServer(MsvgElement *el);
        creates a binary paint server from an EID_LINEARGRADIENT or EID_RADIALGRADIENT
        cooked element and their EID_STOP children.
        void MsvgDestroyBPServer(MsvgBPServer *bps);
        destroys a binary paint server.
        int MsvgCalcUnitsBPServer(MsvgBPServer *bps, MsvgBox *bbox, TMatrix *);
        transforms coordinates of a binary paint server, first if the gradient units
        are GRADUNIT_BBOX and a bbox is provided transform the units to GRADUNIT_USER,
        after that if the t matrix is not NULL the transformation is applied.
    Solved bug cooking EID_LINEARGRADIENT and EID_RADIALGRADIENT when cheking for
    gradient units.
    Solved bug calculating ellipse bounding box.
    MsvgSerCookedTree fills the fill_bps and stroke_bps members of the constructed
    context with binary paint servers if necesary.
    New test/tbpsrv.c test program.
2023-03-15
    New MsvgBox generic box structure, used for bounding box calculations and others
    New function:
        MsvgGetCookedBoundingBox(MsvgElement *el, MsvgBox *box, int inibox);
        It will be necesary to convert gradient bbox units to user units.
        Note, at this time it makes a rough estimation for PATH and TEXT elements.
2023-02-28
    Solved bug parsing compacted lists of points such as 8.2.3 (must be 8.2 and 0.3).
    Reported by gtoal on Github.
2022-12-12
    Updated docs to v0.72
2022-12-05
    Added the mode parameter to the MsvgTransformCookedElement function, it can be
    0 (or MSVGTCE_NORMAL) or a ored combination of MSVGTCE_CIR2PATH, MSVGTCE_ELL2PATH
    the first create path elements for circle elements, the second create path
    elements for ellipse elements. It can be used for graphics libraries that doesn't
    have primitives to draw circles and ellipses, like GD.
2022-11-20
    Updated docs to v0.71
2022-11-19
    New gd subdirectory with examples to render svg files using the GD library
    and libmgrx. A bit incomplete but it works
2022-11-18
    Added svg2png.c program to MGRX test programs
2022-10-20
    Hack to MGRX for drawing path elements with subpaths, check if every polygon
    is inside the last polygon and use the background color, so glyphs like "ià"
    can be rendered.
2022-08-01
    Updated docs to v0.70
2022-07-10
    New functions:
      void MsvgGetInheritedFontFamily(const MsvgElement *el, int *ifont_family,
                                      char **sfont_family);
    Added bfontlib funcionality with new functions:
      int MsvgBFontLibLoad(MsvgElement *el);
      int MsvgBFontLibLoadFromFile(char *fname);
      MsvgBFont *MsvgBFontLibFind(char *sfont_family, int ifont_family);
      void MsvgBFontLibFree(void);
      MsvgElement *MsvgTextToPathGroupUsingBFontLib(MsvgElement *el);
      int MsvgBFontLibGetNumOfFonts(void);
      MsvgBFont *MsvgBFontLibGetBFontByNumber(int nfont);
      void MsvgBFontLibSetDefaultBfont(int nfont);
    Changed test/tfont.c and mgrx/showsvg.c to use the fontlib functions.
2022-07-06
    Moved MsvgProcPaintCtxInheritance(MsvgPaintCtx and
    MsvgProcPaintCtxDefaults from sec/serializ.c to src/paintctx.c
    New functions:
      double MsvgGetCharAdvx(long unicode, double font_size, MsvgBFont *bfont);
      double MsvgGetStrAdvx(char *text, double font_size, MsvgBFont *bfont);
      int MsvgGetInheritedTextAnchor(const MsvgElement *el);
      double MsvgGetInheritedFontSize(const MsvgElement *el);
    MsvgTextToPathGroup now have inheritance in account for font_size and
    text_anchor.
2022-07-04
    Changes to the MGRX tests:
    reworked rendmgrx.c to use transformation for rotating, pan and zooming.
2022-07-02
    Updated docs to v0.60
2022-07-02
    Added gfont subdir with three svg fonts, derived from Free GNU fonts.
    When converting from cooked to raw tree path and poly data do a line
    break every MAX_COORD_PER_LINE.
    Solved bug in MsvgPruneElement.
    Changed function name MsvgPathEltoPolyEl to MsvgSubPathToPoly.
    New function:
      MsvgElement *MsvgPathToPolyGroup(MsvgElement *el, double px_x_unit);
    When writing a svg file convert [&"'<>] to the xml entities for parameter
    values and contents.
    New test/tpa2poly.c program to test MsvgPathToPolyGroup.
2022-06-23
    New funtion to walk a tree:
      void MsvgWalkTree(MsvgElement *root, MsvgWalkUserFn wufn, void *udata);
    New function to replace an element:
      int MsvgReplaceElement(MsvgElement *old, MsvgElement *newe);
    New funtion to undefine text properties in a MsvgPaintCtx:
      void MsvgUndefPaintCtxTextAttr(MsvgPaintCtx *pctx);
    The raw atrribute font-family now generates two cooked attributes:
    sfont_family and ifont_family
    New struct MsvgBfont to hold a binary representation of a svg font
    and functions to convert a text element to a group of path elements:
      MsvgBFont *MsvgNewBFont(MsvgElement *el);
      void MsvgDestroyBFont(MsvgBFont *bfont);
      MsvgElement *MsvgCharToPath(long unicode, double font_size, double *advx, MsvgBFont *bfont);
      MsvgElement *MsvgTextToPathGroup(MsvgElement *el, MsvgBFont *bfont);
    Added the test program test/tfont.c and svgpics/font01.svg example to
    exercise the text to path conversion
2022-06-16
    Finish integration of EID_FONT, EID_FONTFACE, EID_MISSINGGLYPH
      and EID_GLYPH.
2022-06-05
    Added text_anchor cooked attr to MsvgPaintCtx.
    Aditional parameter int copytree to the MsvgDupElement function.
    Initial work to add new elements EID_FONT, EID_FONTFACE,
      EID_MISSINGGLYPH and EID_GLYPH.
2022-06-05
    Updated docs to v0.50
2022-05-31
    Added fill_iri and stroke_iri members to the MsvgPaintCtx struct
    and populate them if fill or stroke are IRI_COLOR
    Added functions to manage MsvgPaintCtx structs
      MsvgPaintCtx *MsvgNewPaintCtx(const MsvgPaintCtx *src);
      void MsvgCopyPaintCtx(MsvgPaintCtx *des, const MsvgPaintCtx *src);
      void MsvgDestroyPaintCtx(MsvgPaintCtx *pctx);
    Added function to find raw attributes
      char *MsvgFindRawAttribute(const MsvgElement *el, const char *key);
    Added function to normalize gradients to the Tiny specs
      int MsvgNormalizeRawGradients(MsvgElement *el);
    More use of the "const" keyword
    Added option "-ng" to test/tcook.c to test the gradient normalization
2022-05-26
    Changes to the MGRX tests:
    added mouse interaction to showsvg.c
2022-05-21
    API change: in the MsvgElement changed the MsvgPaintCtx member to a pointer,
    because not all elements need one, only EID_SVG, EID_G, EID_USE, EID_RECT,
    EID_CIRCLE, EID_ELLIPSE, EID_LINE, EID_POLYLINE, EID_POLYGON, EID_PATH and
    EID_TEXT
    Added new supported elements: EID_LINEARGRADIENT, EID_RADIALGRADIENT (can
    be only sons of an EID_DEF element) and EID_STOP (can only be son of a
    gradient element), TODO: reference gradients for fill and stroke
2022-05-14
    Changes to the MGRX tests:
    - renamed rsvg2.c to showsvg.c
2022-05-14
    test/tread.c admit the parameter "-r" to show debug info in stdout when reading
    a svg file
2022-05-14
    Solved bug in MsvgGetCookedDims
    New rgbcolor define URL_COLOR for gradients (TODO) by now it fills with silver color
    Second function version to read a svg file:
      MsvgElement *MsvgReadSvgFile2(const char *fname, int *error, FILE *report);
    it has a extra parameter, if not NULL it prints debug info of the rading process
2022-05-03
    Updated docs to v0.22
    Added px_x_unit parameter to MsvgPathEltoPolyEl
2022-05-02
    Changes to the MGRX tests:
    - renderize paths by its own, using integer arithmetic
    - do not calculate bezier curves if they are out of the clip area
    - rsvg2 prints calculated image dimensions, so you can edit the svg file if
    the reported dimensions are bad values
    - rsvg2 checks for overflow when zooming
2022-05-01
    In MsvgPathEltoPolyEl limit the number of points generated for a bezier curve
    to MAX_BEZPOINTS
    Added an user-data parameter to MsvgSerCookedTree
    Added MsvgGetCookedDims, makes a rough estimation of the svg dimensions in a
    cooked tree
2022-04-22 
    corrections to the prog guide
2020-06-10 
    updated docs to v0.21
2020-06-09 
    Solving bugs
2020-06-04 
    updated docs to v0.20
2020-06-04 
    move svg examples to svgpics subfdir
2020-06-04 
    Solving bugs some tests improvements
2020-05-31 
    Upadted docs to v0.19
2020-05-31 
    Completed the EID_TEXT integration Added the inheritable text atributtes to
    MsvgPaintCtx Solving bugs
2020-05-30 
    Agregate TEXT contens in a unique string New virtual element EID_V_CONTENT,
    but no used by now Trasnlate &,<,> writing contents
2020-05-28 
    Changed license to the Expat license
2020-05-28 
    bug corrected
2020-05-27 
    updated docs v0.17
2020-05-27 
    solving bugs
2020-05-27 
    Completed the EID_PATH integration Not a tiny 1.2 spec but process the "style"
    parameter the MGRX example programs now can process EID_PATH and roumded EID_RECT
2020-05-22 
    Revert "Revert "v0.16""
2020-05-22 
    Revert "v0.16"
2020-05-22 
    updated programmer's guide to v0.16
2020-05-21 
    added MsvgCooked2RawTree function first work to integrate EID_PATH
2020-05-19 
    The serialize process has the ID_USE elements in account Functions to find
    elements Updated the programmer's guide to v0.15
2020-05-16 
    improvements to the mgrx rasterize code
2020-05-10 
    Continue integration of EID_TEXT, EID_DEFS, EID_USE Update programmer's guide
2020-05-10 
    Inital support of EID_TEXT, EID_DEFS and EID_USE elements Added fcontent
    variable to the MsvgElement structure, a limkend list of MsvgContent structs,
    by now only the EID_TEXT element can have contents For EID_ELLIPSE changed
    rx, ry cooked parameters to rx_x, rx_y, ry_x, ry_y the two points that defines
    the two ellipse axis, now apply a trasnformation is easier and te user program
    has all the information necesary to render The MGRX render demo now can handle
    transformation matrix
2020-05-02 
    updated programmer's guide to v0.13
2020-05-01 
    Better MGRX renderize and take advantage of MsvgTransformCookedElement
2020-05-01 
    transformation matrix supported as a cooked parameter the serialize process
    calculates the current transformation matrix added MsvgTransformCookedElement
    funtion to help rasterize
2020-04-28 
    updated programmer's guide to v0.12 added MsvgDelAllTreeRawAttributes funtion
2020-04-28 
    New mgrx/rsvg2.c test program
2020-04-25 
    updated programe's guide to v0.11
2020-04-25 
    Added MsvgSerCookedTree Lot of changes to inherit and initialize cooked
    parameters
2020-04-23 
    Added MsvgDupElement
2020-04-22 
    upfated prog_guide
2020-04-22 
    changed denomination generic attributes to raw attributes cooked attributes
    are now generic and specific
2019-04-21 
    MsvgDeleteElement now works ok, no memory leaks New functions MsvgDelAttribute
    and MsvgDelAllAttributes New tdel demo program to test delete attributes and
    elements
2019-04-19 
    added members for inheritance
2019-04-10 
    first use of stroke_width in mgrx demos stroke_width bug corrected in library
2019-04-09 
    Added lines & polylines to the mgrx demo
2011-01-22 
    cook polyline and polygon specific attributes points
2011-01-15 
    Structure the mgrx test programs
2010-12-25 
    Added circles to the mgrx demo
2010-12-12 
    Added a mgrx dirty test program
2010-12-12 
    Corrected some bugs in MsvgRaw2CookedTree
2010-12-11 
    Finished the v0.02 prog guide
2010-12-08 
    Updated readme
2010-12-08 
    Renamed prog guide
2010-12-08 
    Added manielem.c
2010-12-08 
    More work in the prog guide
2010-12-07 
    Working in the prog guide
2010-11-20 
    Added the MsvgRaw2CookedTree function
2010-11-13 
    Use double instead float for storing numbers Begin with the conversion from
    raw to cooked tree
2010-11-03 
    Deleted old user's guide version
2010-11-03 
    Programmer's guide update
2010-10-29 
    Begin with the svg tree type infrastructure
2010-10-10 
    first commit
