Пример #1
0
        private static void ParseRootElement(Specification S, XmlElement rootElement)
        {
            ParseRootElementAttributes(S, rootElement.Attributes);

            XmlNode _E = rootElement.FirstChild;
            while (_E != null)
            {
                XmlElement E = _E as XmlElement;
                if (E != null)
                {
                    switch (E.Name)
                    {
                        case XML_CUSTOM_LICENSE:
                            {
                                if (S.m_license != XML_CUSTOM)
                                    throw new G25.UserException("License was not set to '" + XML_CUSTOM + "' but there still is a '" + XML_CUSTOM_LICENSE + "' in the specification");
                                XmlText T = E.FirstChild as XmlText;
                                if (T != null)
                                    S.m_license = T.Value;
                            }
                            break;
                        case XML_OUTPUT_DIRECTORY:
                            S.SetOutputDir(E.GetAttribute(XML_PATH));
                            break;
                        case XML_OUTPUT_FILENAME:
                            S.SetOutputFilename(E.GetAttribute(XML_DEFAULT_NAME), E.GetAttribute(XML_CUSTOM_NAME));
                            break;

                        case XML_INLINE:
                            ParseInlineAttributes(S, E.Attributes);
                            break;
                        case XML_FLOAT_TYPE:
                            ParseFloatTypeAttributes(S, E.Attributes);
                            break;
                        case XML_UNARY_OPERATOR:
                        case XML_BINARY_OPERATOR:
                            ParseOperatorAttributes(S, E.Name, E.Attributes);
                            break;
                        case XML_BASIS_VECTOR_NAMES:
                            ParseBasisVectorNamesAttributes(S, E.Attributes);
                            break;
                        case XML_METRIC:
                            {
                                // name
                                string name = E.GetAttribute(XML_NAME);
                                if (name == null) name = "default";

                                // parse actual metric:
                                XmlText T = E.FirstChild as XmlText;
                                if (T == null) throw new G25.UserException("Invalid  '" + XML_METRIC + "' element in specification.");
                                ParseMetric(S, name, T.Value);

                                // round?
                                if (E.GetAttribute(XML_ROUND) != null)
                                {
                                    S.GetMetric(name).m_round = !(E.GetAttribute(XML_ROUND).ToLower() == XML_FALSE);
                                }

                            }
                            break;
                        case XML_MV:
                            ParseMVelementAndAttributes(S, E);
                            break;
                        case XML_SMV:
                            ParseSMVelementAndAttributes(S, E);
                            break;
                        case XML_OM:
                            ParseGOMelementAndAttributes(S, E);
                            break;
                        case XML_SOM:
                            ParseSOMelementAndAttributes(S, E);
                            break;
                        case XML_CONSTANT:
                            ParseConstantElementAndAttributes(S, E);
                            break;
                        case XML_FUNCTION:
                            ParseFunction(S, E);
                            break;
                        case XML_VERBATIM:
                            ParseVerbatim(S, E);
                            break;
                        default:
                            System.Console.WriteLine("Specification.ParseRootElement(): warning: unknown element '" + E.Name + "' in specification");
                            break;
                    }
                }

                _E = _E.NextSibling;
            }
        }