/*
 * Copyright (C) 2011 Leo Yang <leoyang@webkit.org>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

module svg {

    interface [Conditional=SVG&SVG_FONTS] SVGGlyphRefElement : SVGElement,
                                                               SVGURIReference,
                                                               SVGStylable {
        // FIXME: Use [Reflect] after https://bugs.webkit.org/show_bug.cgi?id=64843 is fixed.
        attribute DOMString glyphRef
            setter raises(DOMException);
        attribute [Reflect] DOMString format;
        attribute float x
            setter raises(DOMException);
        attribute float y
            setter raises(DOMException);
        attribute float dx
            setter raises(DOMException);
        attribute float dy
            setter raises(DOMException);
    };

}

