/* libcroco - Library for parsing and applying CSS
 * Copyright (C) 2006-2019 Free Software Foundation, Inc.
 *
 * This file is not part of the GNU gettext program, but is used with
 * GNU gettext.
 *
 * The original copyright notice is as follows:
 */

/*
 * This file is part of The Croco Library
 *
 * Copyright (C) 2002-2003 Dodji Seketeli <dodji@seketeli.org>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of version 2.1 of the GNU Lesser General Public
 * License as published by the Free Software Foundation.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 * USA
 */

#ifndef __LIBCROCO_H__
#define __LIBCROCO_H__

#include "libcroco-config.h"

#include "cr-utils.h"
#include "cr-pseudo.h"
#include "cr-term.h"
#include "cr-attr-sel.h"
#include "cr-simple-sel.h"
#include "cr-selector.h"
#include "cr-enc-handler.h"
#include "cr-doc-handler.h"
#include "cr-input.h"
#include "cr-parser.h"
#include "cr-statement.h"
#include "cr-stylesheet.h"
#include "cr-om-parser.h"
#include "cr-prop-list.h"
#include "cr-sel-eng.h"
#include "cr-style.h"
#include "cr-string.h"

#endif /*__LIBCROCO_H__*/
