public static void print_gradient_definition(GradientBase element)
    {
        if (element is LinearGradient)
        {
            LinearGradient grad = (LinearGradient)element;
            Console.WriteLine("\tLinear Gradient: " + grad.getId()
                              + " start: " + toString(grad.getXPoint1()) + ", " +
                              toString(grad.getYPoint1())
                              + " end: " + toString(grad.getXPoint2()) + ", " +
                              toString(grad.getYPoint2())
                              );
        }
        else if (element is RadialGradient)
        {
            RadialGradient grad = (RadialGradient)element;
            Console.WriteLine("\tRadial Gradient: " + grad.getId()
                              + " center: " + toString(grad.getCenterX()) + ", " +
                              toString(grad.getCenterY())
                              + " focal: " + toString(grad.getFocalPointX()) + ", " +
                              toString(grad.getFocalPointY())
                              );
        }

        for (int k = 0; k < element.getNumGradientStops(); ++k)
        {
            GradientStop stop = element.getGradientStop(k);
            if (stop == null)
            {
                continue;
            }
            Console.WriteLine("\t\tstop " + k.ToString() + " id: " + stop.getId() + " stop-color: " +
                              stop.getStopColor());
        }
    }
    public static void print_render_info(RenderInformationBase info)
    {
        if (info.isSetId())
        {
            Console.WriteLine("  Id: " + info.getId());
        }
        if (info.isSetName())
        {
            Console.WriteLine("  Name: " + info.getName());
        }
        if (info.isSetProgramName())
        {
            Console.WriteLine("  Program Name: " + info.getProgramName());
        }
        if (info.isSetProgramVersion())
        {
            Console.WriteLine("  Program Version: " + info.getProgramVersion());
        }
        if (info.isSetBackgroundColor())
        {
            Console.WriteLine("  Background color: " + info.getBackgroundColor());
        }

        Console.WriteLine("\nColor Definitions:");
        for (int j = 0; j < info.getNumColorDefinitions(); ++j)
        {
            ColorDefinition color = info.getColorDefinition(j);
            Console.WriteLine("\tcolor: " + j.ToString() +
                              " id: " + color.getId() +
                              " color: " + color.getValue());
        }

        Console.WriteLine("\nGradientDefinitions: ");
        for (int j = 0; j < info.getNumGradientDefinitions(); ++j)
        {
            GradientBase grad = info.getGradientDefinition(j);

            print_gradient_definition(grad);
        }

        // similarly for the remaining elements
        Console.WriteLine("\nNumber of Line Endings: {0}", info.getNumLineEndings());
    }