1 /* $XConsortium: Group.h /main/1 1996/07/29 16:52:34 cde-hp $ */
2 // Copyright (c) 1994 James Clark
3 // See the file COPYING for copying permission.
6 #define Group_INCLUDED 1
12 #include "ContentToken.h"
14 #include "MessageArg.h"
20 namespace SP_NAMESPACE {
30 dataTagLiteral, // data tag (padding) template
38 StringC token; // name nameToken; with substitution
39 Owner<ModelGroup> model;
40 Owner<ContentToken> contentToken; // elementToken pcdata dataTagGroup
42 Vector<Text> textVector;
44 GroupToken(const GroupToken &); // undefined
45 void operator=(const GroupToken &); // undefined
48 class AllowedGroupTokens {
50 AllowedGroupTokens(GroupToken::Type,
51 GroupToken::Type = GroupToken::invalid,
52 GroupToken::Type = GroupToken::invalid,
53 GroupToken::Type = GroupToken::invalid);
54 Boolean groupToken(GroupToken::Type) const;
55 // modelGroup, dataTagTemplateGroup
56 GroupToken::Type group() const;
57 GroupToken::Type nameStart() const;
59 void allow(GroupToken::Type);
63 struct GroupConnector {
74 class AllowedGroupConnectors {
76 AllowedGroupConnectors(GroupConnector::Type);
77 AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type);
78 AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type,
79 GroupConnector::Type);
80 AllowedGroupConnectors(GroupConnector::Type, GroupConnector::Type,
81 GroupConnector::Type, GroupConnector::Type);
82 Boolean groupConnector(GroupConnector::Type) const;
84 void allow(GroupConnector::Type);
88 class AllowedGroupTokensMessageArg : public MessageArg {
90 AllowedGroupTokensMessageArg(const AllowedGroupTokens &allow,
91 const ConstPtr<Syntax> &syntax);
92 MessageArg *copy() const;
93 void append(MessageBuilder &) const;
95 AllowedGroupTokens allow_;
96 ConstPtr<Syntax> syntax_;
99 class AllowedGroupConnectorsMessageArg : public MessageArg {
101 AllowedGroupConnectorsMessageArg(const AllowedGroupConnectors &allow,
102 const ConstPtr<Syntax> &syntax);
103 MessageArg *copy() const;
104 void append(MessageBuilder &) const;
106 AllowedGroupConnectors allow_;
107 ConstPtr<Syntax> syntax_;
111 Boolean AllowedGroupTokens::groupToken(GroupToken::Type i) const
113 return ((1 << i) & flags_) != 0;
117 GroupToken::Type AllowedGroupTokens::group() const
119 if (groupToken(GroupToken::modelGroup))
120 return GroupToken::modelGroup;
121 else if (groupToken(GroupToken::dataTagTemplateGroup))
122 return GroupToken::dataTagTemplateGroup;
124 return GroupToken::invalid;
128 GroupToken::Type AllowedGroupTokens::nameStart() const
130 if (groupToken(GroupToken::elementToken))
131 return GroupToken::elementToken;
132 else if (groupToken(GroupToken::nameToken))
133 return GroupToken::nameToken;
134 else if (groupToken(GroupToken::name))
135 return GroupToken::name;
137 return GroupToken::invalid;
141 void AllowedGroupTokens::allow(GroupToken::Type t)
148 Boolean AllowedGroupConnectors::groupConnector(GroupConnector::Type c) const
150 return (flags_ & (1 << c)) != 0;
154 void AllowedGroupConnectors::allow(GroupConnector::Type c)
164 #endif /* not Group_INCLUDED */