11using System . Buffers ;
22using System . Net ;
3+ using System . Xml . Linq ;
34using AngleSharp . Dom ;
45using AngleSharp . Html . Dom ;
56using AngleSharp . Html . Parser ;
@@ -11,6 +12,8 @@ internal abstract partial class DocToStaticPagesTransformer : DocTransformer
1112{
1213 public const int MaxSiblingNodes = 10 * 2 ;
1314
15+ private readonly Dictionary < string , ( string book , string url , string titleEn ) > PageLinks ;
16+
1417 private readonly bool UseWebp ;
1518
1619 #region Language specific members
@@ -25,6 +28,25 @@ internal abstract partial class DocToStaticPagesTransformer : DocTransformer
2528
2629 protected DocToStaticPagesTransformer ( DocToStaticPagesTransformerArgs args , ProblemRecorder problems ) : base ( args , problems )
2730 {
31+ var pages = new List < ( string file , string book , string url , string title ) > ( ) ;
32+
33+ foreach ( var xmlFile in Directory . EnumerateFiles ( BooksXmlFolder , "*.xml" ) )
34+ {
35+ var dirName = Path . GetFileNameWithoutExtension ( xmlFile ) ;
36+
37+ foreach ( var p in XElement . Load ( xmlFile ) . Descendants ( "page" ) )
38+ {
39+ var file = $ "{ dirName } /{ p . Attribute ( "file" ) ! . Value } ";
40+ var url = p . Attribute ( "url" ) ! . Value ;
41+ var sep = url . IndexOf ( '/' ) ;
42+ var title = p . Attribute ( "title" ) ! . Value ;
43+
44+ pages . Add ( ( file , book : sep < 0 ? url : url [ ..sep ] , url : sep < 0 ? "" : url [ ( sep + 1 ) ..] , title ) ) ;
45+ }
46+ }
47+
48+ PageLinks = pages . ToDictionary ( p => p . file , p => ( p . book . ToLowerInvariant ( ) , p . url . ToLowerInvariant ( ) , p . title ) , StringComparer . OrdinalIgnoreCase ) ;
49+
2850 UseWebp = args . UseWebp ;
2951 }
3052
0 commit comments