mirror of
				https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
				synced 2025-10-31 02:05:33 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Xml.Linq;
 | |
| 
 | |
| namespace HaDocument.Models {
 | |
|     public class Backlink : IHaElement {
 | |
|         public string ElementName { get; } = "link";
 | |
|         public string[] XPath { get; } = { 
 | |
|             "/opus/data/marginalien/marginal//link", 
 | |
|             "/opus/marginalien/marginal//link", 
 | |
|             "/opus/kommentare/kommentar//link", 
 | |
|             "/opus/data/kommentare/kommentar//link",
 | |
|             "/opus/traditions/letterTradition//link", 
 | |
|             "/opus/data/traditions/letterTradition//link",
 | |
|         };
 | |
|         public string ElementRules { get; } = "Pfad: /opus/marginalien, /opus/kommentare, /opus/traditions. Pflicht-Attribute: letter.";
 | |
|         public bool Searchable { get; } = false;
 | |
|         public XElement? XElement { get; } = null;
 | |
| 
 | |
|         public string Href { get; } = "";
 | |
|         public string? Letter { get; } = "";
 | |
|         public string? Page { get; } = "";
 | |
|         public string? Line { get; } = "";
 | |
|         public string? Comment { get; }
 | |
| 
 | |
|         public Backlink(
 | |
|             string href,
 | |
|             string? letter,
 | |
|             string? page,
 | |
|             string? line,
 | |
|             string? comment = null,
 | |
|             XElement? xElement = null
 | |
|         ) {
 | |
|             Href = href;
 | |
|             Letter = letter;
 | |
|             Page = page;
 | |
|             Line = line;
 | |
|             Comment = comment;
 | |
|             XElement = xElement;
 | |
|         }
 | |
| 
 | |
|         public static Backlink? FromXElement(XElement element) { 
 | |
|             if (!element.HasAttributes || element.Name != "link") return null;
 | |
|             if (element.Attribute("ref")?.Value == null && element.Attribute("subref")?.Value == null) return null;
 | |
|             
 | |
|             if (element.Ancestors("marginal") == null || !element.Ancestors("marginal").Any()) {
 | |
|                 var marginal = element.Ancestors("marginal").First();
 | |
|                 if (Marginal.FromXElement(marginal) == null) return null;
 | |
|                 return new Backlink(
 | |
|                     element.Attribute("subref")?.Value ?? element.Attribute("ref")!.Value,
 | |
|                     marginal.Attribute("letter")!.Value,
 | |
|                     marginal.Attribute("page")!.Value,
 | |
|                     marginal.Attribute("line")!.Value,
 | |
|                     null,
 | |
|                     element
 | |
|                 );
 | |
|             }
 | |
| 
 | |
|             if (element.Ancestors("subsection") != null || !element.Ancestors("subsection").Any()) {
 | |
|                 var subsection = element.Ancestors("subsection").First();
 | |
|                 if (subsection.Attribute("id")?.Value == null) return null;
 | |
|                 return new Backlink(
 | |
|                     element.Attribute("subref")?.Value ?? element.Attribute("ref")!.Value,
 | |
|                     null,
 | |
|                     null,
 | |
|                     null,
 | |
|                     subsection.Attribute("id")!.Value,
 | |
|                     element
 | |
|                 );
 | |
|             }
 | |
| 
 | |
|             if (element.Ancestors("kommentar") != null || !element.Ancestors("kommentar").Any()) {
 | |
|                 var kommentar = element.Ancestors("kommentar").First();
 | |
|                 if (kommentar.Attribute("id")?.Value == null) return null;
 | |
|                 return new Backlink(
 | |
|                     element.Attribute("subref")?.Value ?? element.Attribute("ref")!.Value,
 | |
|                     null,
 | |
|                     null,
 | |
|                     null,
 | |
|                     kommentar.Attribute("id")!.Value,
 | |
|                     element
 | |
|                 );
 | |
|             }
 | |
| 
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         public string GetKey() {
 | |
|             return string.Empty;
 | |
|         }
 | |
| 
 | |
|         public int CompareTo(object? obj) {
 | |
|             return 0;
 | |
|         }
 | |
|     }
 | |
| } | 
