mirror of
				https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
				synced 2025-10-31 02:05:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Collections.Immutable;
 | |
| using System.Xml.Linq;
 | |
| 
 | |
| namespace HaDocument.Models {
 | |
|     public class Comment : IHaElement {
 | |
|         public string ElementName { get; } = "link";
 | |
|         public string[] XPath { get; } = { 
 | |
|             "/opus/kommentare/kommentar/kommcat/kommentar", 
 | |
|             "/opus/data/kommentare/kommentar/kommcat/kommentar",
 | |
|         };
 | |
|         public string ElementRules { get; } = "Pfad: /opus/kommentare/kommentar. Pflicht-Attribute: id (einmalig).";
 | |
|         public bool Searchable { get; } = true;
 | |
|         public XElement? XElement { get; }
 | |
| 
 | |
|         public string Element { get; } = "";
 | |
|         public string Index { get; } = "";
 | |
|         public string Type { get; } = "";
 | |
|         public string Lemma { get; } = "";
 | |
|         public string Parent { get; } = "";
 | |
|         public int? Order { get; } = null;
 | |
|         public ImmutableSortedDictionary<string, Comment>? Kommentare { get; } 
 | |
| 
 | |
|         public Comment(
 | |
|             string entry,
 | |
|             string index,
 | |
|             string? type,
 | |
|             string? lemma,
 | |
|             int? order,
 | |
|             ImmutableSortedDictionary<string, Comment>? subComments,
 | |
|             string? parent = null,
 | |
|             XElement? xelement = null
 | |
|         ) {
 | |
|             Element = entry;
 | |
|             Index = index;
 | |
|             Type = type;
 | |
|             Lemma = lemma;
 | |
|             Order = order;
 | |
|             Parent = parent;
 | |
|             XElement = xelement;
 | |
|             Kommentare = subComments;
 | |
|         }
 | |
| 
 | |
|         public String GetKey() => Index;
 | |
| 
 | |
|         public int CompareTo(object? obj) {
 | |
|             if (obj == null) return 1;
 | |
|             var other = (Comment)obj;
 | |
|             if (!String.IsNullOrWhiteSpace(Parent) && !String.IsNullOrWhiteSpace(other.Parent) &&
 | |
|                 (Parent == other.Parent)) {
 | |
|                     if (Order.HasValue && other.Order.HasValue)
 | |
|                         return Order.Value!.CompareTo(other.Order.Value);
 | |
|                     else if (Order.HasValue)
 | |
|                         return 1;
 | |
|                     else if (other.Order.HasValue)
 | |
|                         return -1;
 | |
|                     else
 | |
|                         return 0;
 | |
|             }
 | |
|             return String.Compare(Index, other.Index);
 | |
|         }
 | |
| 
 | |
|         public Comment? FromXElement(XElement? element) {
 | |
|             if (element == null || !element.HasAttributes || element.IsEmpty) return null;
 | |
|             if (element.Attribute("id")?.Value == null) return null;
 | |
|             var cat = element.Ancestors("kommcat");
 | |
|             if (element.Name == "kommentar")
 | |
|                 return new Comment(
 | |
|                     element.ToString(),
 | |
|                     element.Attribute("id")!.Value,
 | |
|                     (cat.Any() ? cat.First().Attribute("value")?.Value : null) ?? element.Attribute("type")?.Value,
 | |
|                     element.Element("lemma")?.Value,
 | |
|                     element.Attribute("sort")?.Value != null ? (Int32.TryParse(element.Attribute("sort")!.Value, out var s) ? s : null) : null,
 | |
|                     element.Elements("subsection").Any() ? element.Elements("subsection").Select(x => FromXElement(x)).ToImmutableSortedDictionary(x => x.Index, y => y) : null,
 | |
|                     null,
 | |
|                     element
 | |
|                 );
 | |
|             else if (element.Name == "subsection") {
 | |
|                 if (element.Ancestors("kommentar").Any() || element.Ancestors("kommentar")!.First().Attribute("id")?.Value == null) return null;
 | |
|                 return new Comment(
 | |
|                     element.ToString(),
 | |
|                     element.Attribute("id")!.Value,
 | |
|                      (cat.Any() ? cat.First().Attribute("value")?.Value : null) ?? element.Attribute("type")?.Value,
 | |
|                     element.Element("lemma")?.Value,
 | |
|                     element.Attribute("sort")?.Value != null ? (Int32.TryParse(element.Attribute("sort")!.Value, out var s) ? s : null) : null,
 | |
|                     null,
 | |
|                     element.Ancestors("kommentar")!.First().Attribute("id")!.Value,
 | |
|                     element
 | |
|                 );
 | |
|             }
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| } | 
