emsApplication/sdk/include/cgicc/HTMLAttributeList.h

212 lines
6.0 KiB
C
Raw Normal View History

2024-05-24 12:23:42 +08:00
/* -*-mode:c++; c-file-style: "gnu";-*- */
/*
* $Id: HTMLAttributeList.h,v 1.8 2014/04/23 20:55:05 sebdiaz Exp $
*
* Copyright (C) 1996 - 2004 Stephen F. Booth <sbooth@gnu.org>
* 2007 Sebastien DIAZ <sebastien.diaz@gmail.com>
* Part of the GNU cgicc library, http://www.gnu.org/software/cgicc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*/
#ifndef _HTMLATTRIBUTELIST_H_
#define _HTMLATTRIBUTELIST_H_ 1
#ifdef __GNUG__
# pragma interface
#endif
/*! \file HTMLAttributeList.h
* \brief Class containing a list of HTMLAttribute objects
*
* The list is expandable and uses the STL vector class for storage
*/
#include <string>
#include <iostream>
#include <vector>
#include "CgiDefs.h"
#include "MStreamable.h"
#include "HTMLAttribute.h"
namespace cgicc {
// ============================================================
// Class HTMLAttributeList
// ============================================================
#ifdef WIN32
template class CGICC_API std::vector<HTMLAttribute>;
#endif
/*! \class HTMLAttributeList HTMLAttributeList.h cgicc/HTMLAttributeList.h
* \brief An expandable list of HTMLAttribute objects
*
* An HTMLAttributeList represents any number of HTMLAttribute objects
* which may be embedded in an HTMLElement. To add HTMLAttribute objects
* to an HTMLAttributeList, use the set() methods or functions.
* For example,
* \code
* cgicc::HTMLAttributeList list = cgicc::set("HEIGHT", "100").set("WIDTH", "100");
* \endcode
* generates an HTMLAttributeList with two elements.
* \see HTMLAttribute
* \see HTMLElement
*/
class CGICC_API HTMLAttributeList
{
public:
// ============================================================
/*! \name Constructors and Destructor */
//@{
/*!
* \brief Create an empty HTMLAttributeList.
*
* HTMLAttributeLists are most often created with the set functions
*/
HTMLAttributeList();
/*!
* \brief Create a new HTMLAttributeList, specifying the first element.
*
* The first attribute in the list is set to \c head
* \param head The first element of the list
*/
HTMLAttributeList(const HTMLAttribute& head);
/*!
* \brief Copy constructor.
*
* Sets the elements in this list to those in \c list
* \param list The HTMLAttributeList to copy.
*/
HTMLAttributeList(const HTMLAttributeList& list);
/*!
* \brief Destructor
*
* Delete this HTMLAttributeList object
*/
~HTMLAttributeList();
//@}
// ============================================================
/*! \name Overloaded Operators */
//@{
/*!
* \brief Assign one HTMLAttributeList to another.
*
* Sets the elements in this list to those in \c list
* \param list The HTMLAttributeList to copy
*/
HTMLAttributeList&
operator= (const HTMLAttributeList &list);
//@}
// ============================================================
/*! \name List Management
* Add attributes to the list
*/
//@{
/*!
* \brief Add an atomic HTMLAttribute to this list
*
* \c isindex is an example of an atomic attribute.
* \param name The name of the HTMLAttribute to set.
* \return A reference to \c this
*/
HTMLAttributeList&
set(const std::string& name);
/*!
* \brief Add a HTMLAttribute to this list
*
* For a list of possible attributes see http://www.w3.org/TR/REC-html40/
* \param name The name of the HTMLAttribute to set.
* \param value The value of the HTMLAttribute to set.
* \return A reference to \c this
*/
HTMLAttributeList&
set(const std::string& name,
const std::string& value);
//@}
/*! \name Utility Methods */
//@{
/*!
* \brief Render this HTMLAttributeList to an ostream
*
* This is used for output
* \param out The ostream to which to write
*/
void
render(std::ostream& out) const;
//@}
private:
std::vector<HTMLAttribute> fAttributes;
};
// ============================================================
// List manipulators
// ============================================================
/*!
* \brief Create a new HTMLAttributeList, and set an HTMLAttribute.
*
* This function is usually called from within the constructor of an
* HTMLElement:
* \code
* out << img(set("ISINDEX")) << endl;
* \endcode
* \param name The name of the HTMLAttribute to set.
* \return A reference to the list.
*/
inline HTMLAttributeList
set(const std::string& name)
{ return HTMLAttributeList(HTMLAttribute(name)); }
/*!
* \brief Create a new HTMLAttributeList, and set an HTMLAttribute.
*
* This function is usually called from within the constructor of an
* HTMLElement:
* \code
* out << a("link text", set("HREF","http://www.foo.com")) << endl;
* \endcode
* \param name The name of the HTMLAttribute to set.
* \param value The value of the HTMLAttribute to set.
* \return A reference to the list.
*/
inline HTMLAttributeList
set(const std::string& name,
const std::string& value)
{ return HTMLAttributeList(HTMLAttribute(name, value)); }
} // namespace cgicc
#endif /* ! _HTMLATTRIBUTES_H_ */