2 * CDE - Common Desktop Environment
4 * Copyright (c) 1993-2012, The Open Group. All rights reserved.
6 * These libraries and programs are free software; you can
7 * redistribute them and/or modify them under the terms of the GNU
8 * Lesser General Public License as published by the Free Software
9 * Foundation; either version 2 of the License, or (at your option)
12 * These libraries and programs are distributed in the hope that
13 * they will be useful, but WITHOUT ANY WARRANTY; without even the
14 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU Lesser General Public License for more
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with these librararies and programs; if not, write
20 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21 * Floor, Boston, MA 02110-1301 USA
23 /* $XConsortium: Group.C /main/1 1996/07/29 16:52:27 cde-hp $ */
24 // Copyright (c) 1994 James Clark
25 // See the file COPYING for copying permission.
28 #pragma implementation
32 #include "MessageBuilder.h"
33 #include "ParserMessages.h"
37 namespace SP_NAMESPACE {
40 AllowedGroupTokens::AllowedGroupTokens(GroupToken::Type t1, GroupToken::Type t2,
41 GroupToken::Type t3, GroupToken::Type t4)
50 AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1)
56 AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1,
57 GroupConnector::Type c2)
64 AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1,
65 GroupConnector::Type c2,
66 GroupConnector::Type c3)
74 AllowedGroupConnectors::AllowedGroupConnectors(GroupConnector::Type c1,
75 GroupConnector::Type c2,
76 GroupConnector::Type c3,
77 GroupConnector::Type c4)
87 AllowedGroupConnectorsMessageArg::AllowedGroupConnectorsMessageArg(
88 const AllowedGroupConnectors &allow,
89 const ConstPtr<Syntax> &syntax)
95 MessageArg *AllowedGroupConnectorsMessageArg::copy() const
97 return new AllowedGroupConnectorsMessageArg(*this);
100 void AllowedGroupConnectorsMessageArg::append(MessageBuilder &builder) const
102 static GroupConnector::Type types[] = {
103 GroupConnector::andGC, GroupConnector::orGC, GroupConnector::seqGC,
104 GroupConnector::grpcGC, GroupConnector::dtgcGC
106 static Syntax::DelimGeneral delims[] = {
107 Syntax::dAND, Syntax::dOR, Syntax::dSEQ,
108 Syntax::dGRPC, Syntax::dDTGC
111 for (size_t i = 0; i < SIZEOF(types); i++)
112 if (allow_.groupConnector(types[i])) {
114 builder.appendFragment(ParserMessages::listSep);
117 const StringC &delim = syntax_->delimGeneral(delims[i]);
118 builder.appendFragment(ParserMessages::delimStart);
119 builder.appendChars(delim.data(), delim.size());
120 builder.appendFragment(ParserMessages::delimEnd);
124 AllowedGroupTokensMessageArg::AllowedGroupTokensMessageArg(
125 const AllowedGroupTokens &allow,
126 const ConstPtr<Syntax> &syntax)
132 MessageArg *AllowedGroupTokensMessageArg::copy() const
134 return new AllowedGroupTokensMessageArg(*this);
137 void AllowedGroupTokensMessageArg::append(MessageBuilder &builder) const
139 const MessageFragment *fragment[4];
141 if (allow_.groupToken(GroupToken::dataTagLiteral))
142 fragment[nFragments++] = &ParserMessages::parameterLiteral;
143 if (allow_.groupToken(GroupToken::dataTagGroup))
144 fragment[nFragments++] = &ParserMessages::dataTagGroup;
145 switch (allow_.group()) {
146 case GroupToken::modelGroup:
147 fragment[nFragments++] = &ParserMessages::modelGroup;
149 case GroupToken::dataTagTemplateGroup:
150 fragment[nFragments++] = &ParserMessages::dataTagTemplateGroup;
155 switch (allow_.nameStart()) {
156 case GroupToken::name:
157 fragment[nFragments++] = &ParserMessages::name;
159 case GroupToken::nameToken:
160 fragment[nFragments++] = &ParserMessages::nameToken;
162 case GroupToken::elementToken:
163 fragment[nFragments++] = &ParserMessages::elementToken;
169 for (int i = 0; i < nFragments; i++) {
171 builder.appendFragment(ParserMessages::listSep);
174 builder.appendFragment(*fragment[i]);
176 if (allow_.groupToken(GroupToken::pcdata)) {
178 builder.appendFragment(ParserMessages::listSep);
179 StringC pcdata(syntax_->delimGeneral(Syntax::dRNI));
180 pcdata += syntax_->reservedName(Syntax::rPCDATA);
181 builder.appendChars(pcdata.data(), pcdata.size());