/// <summary> /// Smíðar Wiki-kóða sem svarar til SOAP-skeytis. /// </summary> /// <param name="message">Nafn SOAP-skeytis.</param> /// <param name="message_schema">Nafn WSDL-skjals eða skemaskrár sem skilgreinir þjónustaðgerir Torg-þjónustu.</param> /// <param name="type_schema">Nafn skemaskrár sem skilgreinir týpur Torg-þjónustu.</param> /// <param name="common_type_schema">Nafn skemaskrár sem skilgreinir samnýttar týpur Torg-þjónustu.</param> /// <param name="include_dictionary_approval_status">Á Wiki-kóðinn að innihalda upplýsingar um stöðu í Orðabók RB?</param> /// <param name="language">Tungumál Wiki-kóða: WikiCodeLangage.Icelandic, WikiCodeLanguage.English, ...</param> /// <returns>Wiki-kóði fyrir viðkomandi SOAP-skeyti.</returns> private static string GenerateMessage(string message, string message_schema, string type_schema, string common_type_schema, bool include_dictionary_approval_status, string language) { string wikicode = String.Format(LIST_ITEM_MARKUP, String.Format(EMPHASIS_MARKUP, message)); XDocument wsdl_document = XDocument.Load(message_schema); XDocument schema_document = XDocument.Load(type_schema); XDocument common_schema_document = XDocument.Load(common_type_schema); List <XElement> elements = XDocumentParser.GetMessageElements(wsdl_document, message); string sub_wikicode = string.Empty; foreach (XElement element in elements) { XDocument current_document = GetCurrentDocument(element, schema_document, common_schema_document); List <XElement> descendants = XDocumentParser.GetDescendants(element, current_document); sub_wikicode += (descendants.Count > 0) ? GenerateType(element, schema_document, common_schema_document, include_dictionary_approval_status, language) : GenerateTerminalElement(element, current_document, include_dictionary_approval_status, language); } wikicode += String.Format(UNORDERED_LIST_MARKUP, sub_wikicode); wikicode = String.Format(UNORDERED_LIST_MARKUP, wikicode); return(wikicode); }
/// <summary> /// Smíðar Wiki-kóða fyrir skemastak sem hefur ekki frekari undirstök. /// </summary> /// <param name="element">Skemastak.</param> /// <param name="current_document">Skema sem skilgreinir stakið.</param> /// <param name="include_dictionary_approval_status">Á Wiki-kóðinn að innihalda upplýsingar um stöðu í Orðabók RB?</param> /// <param name="language">Tungumál Wiki-kóða: WikiCodeLangage.Icelandic, WikiCodeLanguage.English, ...</param> /// <returns>Wiki-kóði fyrir viðkomandi skemastak.</returns> private static string GenerateTerminalElement(XElement element, XDocument current_document, bool include_dictionary_approval_status, string language) { string wikicode = string.Empty; XElement type = XDocumentParser.GetType(element, current_document); #region grein gerð fyrir viðkomandi staki ... string description = XDocumentParser.GetElementDocumentation(element, language) == string.Empty ? (XDocumentParser.GetType(element, current_document) == null ? string.Empty : XDocumentParser.GetElementDocumentation(XDocumentParser.GetType(element, current_document), language)) : XDocumentParser.GetElementDocumentation(element, language); if (element.Name.LocalName != SCHEMA_ATTRIBUTE) { if (type != null) { wikicode += GenerateElement(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, String.Format("{0} {1}", element.Attribute(SCHEMA_TYPE_ATTRIBUTE).Value, String.Format(SIMPLE_TYPE_MARKUP, XDocumentParser.GetRestriction(type))), XDocumentParser.GetElementOccurance(element), XDocumentParser.GetElementNillable(element), description, include_dictionary_approval_status ? GenerateDictionaryApprovalStatus(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value) : string.Empty); } else { type = XDocumentParser.GetEmbeddedType(element); wikicode += (type != null) ? GenerateElement(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, String.Format(SIMPLE_TYPE_MARKUP, XDocumentParser.GetRestriction(type)), XDocumentParser.GetElementOccurance(element), XDocumentParser.GetElementNillable(element), description, include_dictionary_approval_status ? GenerateDictionaryApprovalStatus(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value) : string.Empty) : element.Attribute(SCHEMA_TYPE_ATTRIBUTE) != null? GenerateElement(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, element.Attribute(SCHEMA_TYPE_ATTRIBUTE).Value, XDocumentParser.GetElementOccurance(element), XDocumentParser.GetElementNillable(element), description, include_dictionary_approval_status?GenerateDictionaryApprovalStatus(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value) : string.Empty) : WikiCodeLanguage.SpecialElementMarkup[language]; } } #endregion #region grein gerð fyrir upplistunargildum staks ... foreach (var enumerator in XDocumentParser.GetEnumerators(type != null ? type : element, language)) { wikicode += GenerateEnumeration(enumerator.Item1, enumerator.Item2); } #endregion return(wikicode); }
/// <summary> /// Smíðar Wiki-kóða fyrir skematýpu. /// </summary> /// <param name="element">Skematýpa.</param> /// <param name="schema_document">Skema sem skilgreinir týpur Torg-þjónustu.</param> /// <param name="common_schema_document">Skema sem skilgreinir samnýttar týpur Torg-þjónustu.</param> /// <param name="include_dictionary_approval_status">Á Wiki-kóðinn að innihalda upplýsingar um stöðu í Orðabók RB?</param> /// <param name="language">Tungumál Wiki-kóða: WikiCodeLangage.Icelandic, WikiCodeLanguage.English, ...</param> /// <returns>Wiki-kóði fyrir viðkomandi skematýpu.</returns> private static string GenerateType(XElement element, XDocument schema_document, XDocument common_schema_document, bool include_dictionary_approval_status, string language) { string wikicode = string.Empty; XDocument current_document = GetCurrentDocument(element, schema_document, common_schema_document); List <XElement> descendants = XDocumentParser.GetDescendants(element, current_document); #region grein gerð fyrir viðkomandi staki ... string description = XDocumentParser.GetElementDocumentation(element, language) == string.Empty ? (XDocumentParser.GetType(element, current_document) == null ? string.Empty : XDocumentParser.GetElementDocumentation(XDocumentParser.GetType(element, current_document), language)) : XDocumentParser.GetElementDocumentation(element, language); if (element.Name.LocalName == SCHEMA_ATTRIBUTE) { wikicode += GenerateAttribute(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, element.Attribute(SCHEMA_TYPE_ATTRIBUTE).Value, XDocumentParser.GetAttributeOccurance(element), description, include_dictionary_approval_status ? GenerateDictionaryApprovalStatus(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value) : string.Empty); } else if (element.Name.LocalName == SCHEMA_ELEMENT && descendants.Count() > 0) { wikicode += GenerateElement(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, element.Attribute(SCHEMA_TYPE_ATTRIBUTE).Value, XDocumentParser.GetElementOccurance(element), XDocumentParser.GetElementNillable(element), description, include_dictionary_approval_status ? GenerateDictionaryApprovalStatus(element.Attribute(SCHEMA_NAME_ATTRIBUTE).Value) : string.Empty); } // TODO: hvað ef embedded element er með önnur element ... ? #endregion #region grein gerð fyrir börnum viðkomandi staks ... #region grein gerð fyrir valstökum ... if (element.Name.LocalName == SCHEMA_CHOICE) { descendants = XDocumentParser.GetElements(element); string choices = string.Empty; int number_of_choices = 0; foreach (var decendant in descendants) { if (decendant.Name.LocalName == SCHEMA_ELEMENT) { choices += GenerateChoice(decendant.Attribute(SCHEMA_NAME_ATTRIBUTE).Value, GenerateType(decendant, schema_document, common_schema_document, include_dictionary_approval_status, language)); number_of_choices++; } } wikicode += GenerateChoicePrefix(number_of_choices, language); wikicode += choices; wikicode += GenerateChoicePostfix(); } #endregion #region grein gerð fyrir öðrum stökum ... else { wikicode += (descendants.Count() == 0) ? GenerateTerminalElement(element, current_document, include_dictionary_approval_status, language) : string.Empty; foreach (var decendant in descendants) { wikicode += String.Format(UNORDERED_LIST_MARKUP, GenerateType(decendant, schema_document, common_schema_document, include_dictionary_approval_status, language)); } } #endregion #endregion return(wikicode); }