internal List <X3DNode> ParseSFNodeOrMFNodeValue() { // nodeStatement | [ ] | [ nodeStatements ] try { object token = PeekNextToken(); List <X3DNode> ret = new List <X3DNode>(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == '[') { char ts = GetNextTerminalSymbolToken(); for (; ;) { token = PeekNextToken(); tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { ts = GetNextTerminalSymbolToken(); break; } X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } else { VRMLTokenIdKeywordOrFieldType nullToken = token as VRMLTokenIdKeywordOrFieldType; if (nullToken != null && nullToken.id == "NULL") { GetNextIDToken(); // consume NULL ErrorParsing(VRMLReaderError.ImproperInitializationOfMFNode); } else { X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } } return(ret); } catch (UserCancellationException) { throw; } catch (Exception ex) { ErrorParsingField(VRMLReaderError.MFNodeInvalid, ex); } return(null); }
protected override X3DContainer ParseContainer (X3DNode[] children, XElement elem) { Vector3? translation = ParseVectorAttribute (elem.Attribute ("translation")); Rotation rotatinon = ParseRotationAttribute (elem.Attribute ("rotation")); Vector3? scale = ParseVectorAttribute (elem.Attribute ("scale")); return new X3DTransform (children, translation, rotatinon, scale); }
public X3DTransform (X3DNode[] nodes, Vector3? translation, Rotation rotatio, Vector3? scale) : base (nodes) { this.Translation = translation; this.Rotation = rotatio; this.Scale = scale; }
void ParseStatement() { // nodeStatement | protoStatement | exportStatement | importStatement | routeStatement object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("statement keyword or node id", "", "statement"); } switch (idToken.id) { case "PROTO": case "EXTERNPROTO": string nodeTypeId; int lineOfProtoStart = line; X3DPrototypeInstance proto = ParseProtoStatement(out nodeTypeId); if (protoDefinitions.ContainsKey(nodeTypeId)) { ErrorParsing(VRMLReaderError.PROTOAlreadyDefined, lineOfProtoStart); } else { protoDefinitions.Add(nodeTypeId, proto); } break; case "EXPORT": ParseExportStatement(); break; case "IMPORT": ParseImportStatement(); break; case "ROUTE": ParseRouteStatement(); break; default: X3DNode node = ParseNodeStatement(); if (node != null) { nodes.Add(node); } break; } }
X3DNode ParseNodeStatement() { // node | DEF nodeNameId node | USE nodeNameId object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("DEF, USE or node id", "", "node statement"); } switch (idToken.id) { case "DEF": { string tokenDEF = GetNextIDToken(); string nodeNameId = GetNextIDToken(); X3DNode node = ParseNode(nodeNameId); if (node == null) { ErrorUnexpectedEndOfStream(); } instances[nodeNameId] = node; return(node); } case "USE": { string tokenUSE = GetNextIDToken(); string nodeNameId = GetNextIDToken(); if (instances.ContainsKey(nodeNameId)) { return(instances[nodeNameId]); } ErrorParsing(VRMLReaderError.USENameNotDefined); return(null); } default: return(ParseNode(null)); } }
List <X3DNode> ParseUntypedFieldValueNodeArray() { List <X3DNode> ret = new List <X3DNode>(); for (; ;) { object token = PeekNextToken(); VRMLTokenTerminalSymbol tsToken = token as VRMLTokenTerminalSymbol; if (tsToken != null && tsToken.symbol == ']') { return(ret); // done } X3DNode node = ParseNodeStatement(); if (node != null) { ret.Add(node); } } }
internal void ErrorParsingNode(VRMLReaderError error, Exception reason, X3DNode node, string fieldName, X3DNode value, int line) { if (error == VRMLReaderError.UnexpectedNodeType) { if (errorHandling.UnexpectedNodeType != ErrorWarnIgnore.Ignore) { string msg = "Error parsing node: Unexpected type while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "'"; if (value != null) { msg += " found: '" + value.GetNodeName() + "'"; } msg += " in line: " + line; WriteWarning(msg); } if (errorHandling.UnexpectedNodeType != ErrorWarnIgnore.Error) { return; } } else if (error == VRMLReaderError.UnknownFieldInNode) { if (errorHandling.UnknownFieldInNode != ErrorWarnIgnore.Ignore) { string msg = "Error parsing node: Unknown field while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "' in line: " + line; WriteWarning(msg); } if (errorHandling.UnknownFieldInNode != ErrorWarnIgnore.Error) { return; } } else if (error == VRMLReaderError.SFImageInvalid) { string msg = "Error parsing node: Could not parse SFImage value while parsing node: '" + node.GetNodeName() + "' field: '" + fieldName + "' in line: " + line; WriteWarning(msg); } throw new VRMLReaderException(error, reason, line); }
X3DNode ParseRootNodeStatement() { // node | DEF nodeNameId node object token = PeekNextToken(); if (token == null) { ErrorUnexpectedEndOfStream(); } VRMLTokenIdKeywordOrFieldType idToken = token as VRMLTokenIdKeywordOrFieldType; if (idToken == null) { ErrorParsingToken("DEF or node id", "", "root node statement"); } switch (idToken.id) { case "DEF": { string tokenDEF = GetNextIDToken(); string nodeNameId = GetNextIDToken(); X3DNode node = ParseNode(nodeNameId); if (node == null) { ErrorUnexpectedEndOfStream(); } instances[nodeNameId] = node; return(node); } default: return(ParseNode(null)); } }
protected override X3DContainer ParseContainer (X3DNode[] nodes, XElement elem) { return new X3DScene (nodes); }
public X3DScene (X3DNode[] nodes) : base (nodes) { }
internal void ErrorParsingNode(VRMLReaderError error, X3DNode node, string fieldName, X3DNode value, int line) { ErrorParsingNode(error, null, node, fieldName, value, line); }