@@ -29,7 +29,7 @@ internal abstract class DocTransformer
2929
3030 private static Dictionary < string , string > SharedImages => field ??= GetSharedImages ( ) ;
3131
32- private readonly Dictionary < string , ( long size , ulong hash , string url ) > ImagesEn = new ( StringComparer . OrdinalIgnoreCase ) ;
32+ private readonly Dictionary < string , ( long size , ulong hash , string url ) > VisitedImages = new ( StringComparer . OrdinalIgnoreCase ) ;
3333
3434 private readonly Dictionary < string , INode [ ] > LayoutNodes = [ ] ;
3535 private readonly Dictionary < string , List < ( string file , string ? details , TextPosition ? position ) > > Problems = [ ] ;
@@ -391,44 +391,34 @@ protected virtual void TransformImage(IHtmlImageElement img, string sourceFile,
391391 {
392392 img . SetAttribute ( "loading" , "lazy" ) ;
393393
394- var srcImg = Path . GetFullPath ( src , sourceDir ) ;
394+ var srcImg = new FileInfo ( Path . GetFullPath ( src , sourceDir ) ) ;
395395 var copy = true ;
396396
397397 var fileName = Path . GetFileName ( src . AsSpan ( ) ) ;
398398 if ( SharedImages . GetAlternateLookup < ReadOnlySpan < char > > ( ) . TryGetValue ( fileName , out var url ) )
399399 {
400400 copy = false ;
401401 }
402- else if ( File . Exists ( srcImg ) )
402+ else if ( srcImg . Exists )
403403 {
404404 url = $ "/{ BookUrlName } /{ language } /{ srcFull . AsSpan ( "../" . Length ) } ";
405405
406- if ( AvailableLanguages . Length > 1 )
406+ if ( ! VisitedImages . TryGetValue ( src , out var visited ) )
407407 {
408- if ( language == "en" )
409- {
410- if ( ! ImagesEn . ContainsKey ( src ) )
411- {
412- var size = new FileInfo ( srcImg ) . Length ;
413- var hash = FileHash . UInt64FromFile ( srcImg ) ;
408+ var size = srcImg . Length ;
409+ var hash = FileHash . UInt64FromFile ( srcImg . FullName ) ;
414410
415- ImagesEn . Add ( src , ( size , hash , url ) ) ;
416- }
417- else
418- {
419- copy = false ;
420- }
421- }
422- else if ( ImagesEn . TryGetValue ( src , out var enImg ) && new FileInfo ( srcImg ) . Length == enImg . size && FileHash . UInt64FromFile ( srcImg ) == enImg . hash )
423- {
424- url = enImg . url ;
425- copy = false ;
426- }
411+ VisitedImages . Add ( src , ( size , hash , url ) ) ;
412+ }
413+ else if ( srcImg . Length == visited . size && FileHash . UInt64FromFile ( srcImg . FullName ) == visited . hash )
414+ {
415+ url = visited . url ;
416+ copy = false ;
427417 }
428418 }
429419 else
430420 {
431- var srcImgEn = $ "{ SourceFolderEn } { srcImg . AsSpan ( SourceFolderEn . Length ) } ";
421+ var srcImgEn = $ "{ SourceFolderEn } { srcImg . FullName . AsSpan ( SourceFolderEn . Length ) } ";
432422
433423 if ( ! File . Exists ( srcImgEn ) )
434424 {
@@ -447,7 +437,7 @@ protected virtual void TransformImage(IHtmlImageElement img, string sourceFile,
447437
448438 Directory . CreateDirectory ( Path . GetDirectoryName ( dstImg ) ! ) ;
449439
450- File . Copy ( srcImg , dstImg , overwrite : true ) ;
440+ File . Copy ( srcImg . FullName , dstImg , overwrite : true ) ;
451441 }
452442 }
453443 else if ( ! Uri . IsWellFormedUriString ( srcFull , UriKind . Absolute ) )
0 commit comments