174 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			174 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#ifndef BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// MS compatible compilers support #pragma once
							 | 
						||
| 
								 | 
							
								#if defined(_MSC_VER)
							 | 
						||
| 
								 | 
							
								# pragma once
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
							 | 
						||
| 
								 | 
							
								// basic_xml_grammar.hpp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . 
							 | 
						||
| 
								 | 
							
								// Use, modification and distribution is subject to the Boost Software
							 | 
						||
| 
								 | 
							
								// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
							 | 
						||
| 
								 | 
							
								// http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//  See http://www.boost.org for updates, documentation, and revision history.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// this module is derived from simplexml.cpp - an example shipped as part of
							 | 
						||
| 
								 | 
							
								// the spirit parser.  This example contains the following notice:
							 | 
						||
| 
								 | 
							
								/*=============================================================================
							 | 
						||
| 
								 | 
							
								    simplexml.cpp
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Spirit V1.3
							 | 
						||
| 
								 | 
							
								    URL: http://spirit.sourceforge.net/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Copyright (c) 2001, Daniel C. Nuffer
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    This software is provided 'as-is', without any express or implied
							 | 
						||
| 
								 | 
							
								    warranty. In no event will the copyright holder be held liable for
							 | 
						||
| 
								 | 
							
								    any damages arising from the use of this software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Permission is granted to anyone to use this software for any purpose,
							 | 
						||
| 
								 | 
							
								    including commercial applications, and to alter it and redistribute
							 | 
						||
| 
								 | 
							
								    it freely, subject to the following restrictions:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    1.  The origin of this software must not be misrepresented; you must
							 | 
						||
| 
								 | 
							
								        not claim that you wrote the original software. If you use this
							 | 
						||
| 
								 | 
							
								        software in a product, an acknowledgment in the product documentation
							 | 
						||
| 
								 | 
							
								        would be appreciated but is not required.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    2.  Altered source versions must be plainly marked as such, and must
							 | 
						||
| 
								 | 
							
								        not be misrepresented as being the original software.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    3.  This notice may not be removed or altered from any source
							 | 
						||
| 
								 | 
							
								        distribution.
							 | 
						||
| 
								 | 
							
								=============================================================================*/
							 | 
						||
| 
								 | 
							
								#include <string>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/config.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/detail/workaround.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/spirit/include/classic_rule.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/spirit/include/classic_chset.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/archive/basic_archive.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/tracking.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/serialization/version.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost {
							 | 
						||
| 
								 | 
							
								namespace archive {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
							 | 
						||
| 
								 | 
							
								// XML grammar parsing
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								template<class CharType>
							 | 
						||
| 
								 | 
							
								class basic_xml_grammar {
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    // The following is not necessary according to DR45, but at least
							 | 
						||
| 
								 | 
							
								    // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise.
							 | 
						||
| 
								 | 
							
								    struct return_values;
							 | 
						||
| 
								 | 
							
								    friend struct return_values;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    typedef typename std::basic_istream<CharType> IStream;
							 | 
						||
| 
								 | 
							
								    typedef typename std::basic_string<CharType> StringType;
							 | 
						||
| 
								 | 
							
								    typedef typename boost::spirit::classic::chset<CharType> chset_t;
							 | 
						||
| 
								 | 
							
								    typedef typename boost::spirit::classic::chlit<CharType> chlit_t;
							 | 
						||
| 
								 | 
							
								    typedef typename boost::spirit::classic::scanner<
							 | 
						||
| 
								 | 
							
								        typename  std::basic_string<CharType>::iterator
							 | 
						||
| 
								 | 
							
								    > scanner_t;
							 | 
						||
| 
								 | 
							
								    typedef typename boost::spirit::classic::rule<scanner_t> rule_t;
							 | 
						||
| 
								 | 
							
								    // Start grammar definition
							 | 
						||
| 
								 | 
							
								    rule_t    
							 | 
						||
| 
								 | 
							
								        Reference,
							 | 
						||
| 
								 | 
							
								        Eq, 
							 | 
						||
| 
								 | 
							
								        STag,
							 | 
						||
| 
								 | 
							
								        ETag,
							 | 
						||
| 
								 | 
							
								        LetterOrUnderscoreOrColon,
							 | 
						||
| 
								 | 
							
								        AttValue, 
							 | 
						||
| 
								 | 
							
								        CharRef1, 
							 | 
						||
| 
								 | 
							
								        CharRef2, 
							 | 
						||
| 
								 | 
							
								        CharRef, 
							 | 
						||
| 
								 | 
							
								        AmpRef,
							 | 
						||
| 
								 | 
							
								        LTRef,
							 | 
						||
| 
								 | 
							
								        GTRef,
							 | 
						||
| 
								 | 
							
								        AposRef,
							 | 
						||
| 
								 | 
							
								        QuoteRef,
							 | 
						||
| 
								 | 
							
								        CharData,
							 | 
						||
| 
								 | 
							
								        CharDataChars,
							 | 
						||
| 
								 | 
							
								        content,
							 | 
						||
| 
								 | 
							
								        AmpName,
							 | 
						||
| 
								 | 
							
								        LTName,
							 | 
						||
| 
								 | 
							
								        GTName,
							 | 
						||
| 
								 | 
							
								        ClassNameChar,
							 | 
						||
| 
								 | 
							
								        ClassName,
							 | 
						||
| 
								 | 
							
								        Name,
							 | 
						||
| 
								 | 
							
								        XMLDecl,
							 | 
						||
| 
								 | 
							
								        XMLDeclChars,
							 | 
						||
| 
								 | 
							
								        DocTypeDecl,
							 | 
						||
| 
								 | 
							
								        DocTypeDeclChars,
							 | 
						||
| 
								 | 
							
								        ClassIDAttribute,
							 | 
						||
| 
								 | 
							
								        ObjectIDAttribute,
							 | 
						||
| 
								 | 
							
								        ClassNameAttribute,
							 | 
						||
| 
								 | 
							
								        TrackingAttribute,
							 | 
						||
| 
								 | 
							
								        VersionAttribute,
							 | 
						||
| 
								 | 
							
								        UnusedAttribute,
							 | 
						||
| 
								 | 
							
								        Attribute,
							 | 
						||
| 
								 | 
							
								        SignatureAttribute,
							 | 
						||
| 
								 | 
							
								        SerializationWrapper,
							 | 
						||
| 
								 | 
							
								        NameHead,
							 | 
						||
| 
								 | 
							
								        NameTail,
							 | 
						||
| 
								 | 
							
								        AttributeList,
							 | 
						||
| 
								 | 
							
								        S;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // XML Character classes
							 | 
						||
| 
								 | 
							
								    chset_t
							 | 
						||
| 
								 | 
							
								        BaseChar,
							 | 
						||
| 
								 | 
							
								        Ideographic,
							 | 
						||
| 
								 | 
							
								        Char, 
							 | 
						||
| 
								 | 
							
								        Letter, 
							 | 
						||
| 
								 | 
							
								        Digit,
							 | 
						||
| 
								 | 
							
								        CombiningChar,
							 | 
						||
| 
								 | 
							
								        Extender, 
							 | 
						||
| 
								 | 
							
								        Sch,
							 | 
						||
| 
								 | 
							
								        NameChar;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void init_chset();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    bool my_parse(
							 | 
						||
| 
								 | 
							
								        IStream & is,
							 | 
						||
| 
								 | 
							
								        const rule_t &rule_, 
							 | 
						||
| 
								 | 
							
								        const CharType delimiter = L'>'
							 | 
						||
| 
								 | 
							
								    ) const ;
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    struct return_values {
							 | 
						||
| 
								 | 
							
								        StringType object_name;
							 | 
						||
| 
								 | 
							
								        StringType contents;
							 | 
						||
| 
								 | 
							
								        //class_id_type class_id;
							 | 
						||
| 
								 | 
							
								        int_least16_t class_id;
							 | 
						||
| 
								 | 
							
								        //object_id_type object_id;
							 | 
						||
| 
								 | 
							
								        uint_least32_t object_id;
							 | 
						||
| 
								 | 
							
								        //version_type version;
							 | 
						||
| 
								 | 
							
								        unsigned int version;
							 | 
						||
| 
								 | 
							
								        tracking_type tracking_level;
							 | 
						||
| 
								 | 
							
								        StringType class_name;
							 | 
						||
| 
								 | 
							
								        return_values() :
							 | 
						||
| 
								 | 
							
								            version(0),
							 | 
						||
| 
								 | 
							
								            tracking_level(false)
							 | 
						||
| 
								 | 
							
								        {}
							 | 
						||
| 
								 | 
							
								    } rv;
							 | 
						||
| 
								 | 
							
								    bool parse_start_tag(IStream & is) /*const*/;
							 | 
						||
| 
								 | 
							
								    bool parse_end_tag(IStream & is) const;
							 | 
						||
| 
								 | 
							
								    bool parse_string(IStream & is, StringType & s) /*const*/;
							 | 
						||
| 
								 | 
							
								    void init(IStream & is);
							 | 
						||
| 
								 | 
							
								    bool windup(IStream & is);
							 | 
						||
| 
								 | 
							
								    basic_xml_grammar();
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace archive
							 | 
						||
| 
								 | 
							
								} // namespace boost
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // BOOST_ARCHIVE_BASIC_XML_GRAMMAR_HPP
							 |