diff --git a/doc/Dependencies/Platform.Data.Doublets.cpp.svg b/doc/Dependencies/Platform.Data.Doublets.cpp.svg
index 615000a..544337b 100644
--- a/doc/Dependencies/Platform.Data.Doublets.cpp.svg
+++ b/doc/Dependencies/Platform.Data.Doublets.cpp.svg
@@ -14,7 +14,7 @@
Platform.Delegates
-Platform.Delegates
+Platform.Delegates
@@ -23,52 +23,52 @@
Platform.Exceptions
-Platform.Exceptions
+Platform.Exceptions
Platform.Delegates->Platform.Exceptions
-
-
+
+
Platform.Ranges
-Platform.Ranges
+Platform.Ranges
Platform.Exceptions->Platform.Ranges
-
-
+
+
Platform.Collections
-Platform.Collections
+Platform.Collections
Platform.Exceptions->Platform.Collections
-
-
+
+
Platform.Numbers
-Platform.Numbers
+Platform.Numbers
@@ -77,153 +77,153 @@
Platform.Collections.Methods
-Platform.Collections.Methods
+Platform.Collections.Methods
Platform.Numbers->Platform.Collections.Methods
-
-
+
+
Platform.Data.Doublets
-Platform.Data.Doublets
+Platform.Data.Doublets
Platform.Collections.Methods->Platform.Data.Doublets
-
-
+
+
Platform.Random
-Platform.Random
+Platform.Random
Platform.Ranges->Platform.Random
-
-
+
+
Platform.Random->Platform.Collections
-
-
+
+
Platform.Converters
-Platform.Converters
+Platform.Converters
Platform.Converters->Platform.Ranges
-
-
+
+
Platform.Hashing
-Platform.Hashing
+Platform.Hashing
Platform.Hashing->Platform.Ranges
-
-
+
+
Platform.Hashing->Platform.Collections
-
-
+
+
Platform.Data
-Platform.Data
+Platform.Data
Platform.Collections->Platform.Data
-
-
+
+
Platform.Data->Platform.Data.Doublets
-
-
+
+
Platform.Memory
-Platform.Memory
+Platform.Memory
Platform.Memory->Platform.Data.Doublets
-
-
+
+
Platform.Equality
-Platform.Equality
+Platform.Equality
Platform.Equality->Platform.Collections
-
-
+
+
Platform.Interfaces
-Platform.Interfaces
+Platform.Interfaces
Platform.Interfaces->Platform.Collections
-
-
+
+
diff --git a/doc/Dependencies/Platform.Data.Doublets.cpp.svg.backup b/doc/Dependencies/Platform.Data.Doublets.cpp.svg.backup
new file mode 100644
index 0000000..615000a
--- /dev/null
+++ b/doc/Dependencies/Platform.Data.Doublets.cpp.svg.backup
@@ -0,0 +1,229 @@
+
+
+
+
+
diff --git a/doc/Dependencies/Platform.Data.Doublets.svg b/doc/Dependencies/Platform.Data.Doublets.svg
index 3c9222c..651e788 100644
--- a/doc/Dependencies/Platform.Data.Doublets.svg
+++ b/doc/Dependencies/Platform.Data.Doublets.svg
@@ -8,7 +8,7 @@
Platform.Exceptions
-Platform.Exceptions
+Platform.Exceptions
@@ -17,184 +17,184 @@
Platform.Disposables
-Platform.Disposables
+Platform.Disposables
Platform.Exceptions->Platform.Disposables
-
-
+
+
Platform.Ranges
-Platform.Ranges
+Platform.Ranges
Platform.Exceptions->Platform.Ranges
-
-
+
+
Platform.Collections
-Platform.Collections
+Platform.Collections
Platform.Disposables->Platform.Collections
-
-
+
+
System.Numerics.Vectors
-System.Numerics.Vectors
+System.Numerics.Vectors
System.Numerics.Vectors->Platform.Collections
-
-
+
+
Platform.Reflection
-Platform.Reflection
+Platform.Reflection
Platform.Collections->Platform.Reflection
-
-
+
+
Platform.Threading
-Platform.Threading
+Platform.Threading
Platform.Collections->Platform.Threading
-
-
+
+
Platform.Interfaces
-Platform.Interfaces
+Platform.Interfaces
Platform.Interfaces->Platform.Collections
-
-
+
+
Platform.Timestamps
-Platform.Timestamps
+Platform.Timestamps
Platform.Interfaces->Platform.Timestamps
-
-
+
+
Platform.Setters
-Platform.Setters
+Platform.Setters
Platform.Interfaces->Platform.Setters
-
-
+
+
Platform.Ranges->Platform.Collections
-
-
+
+
Platform.Random
-Platform.Random
+Platform.Random
Platform.Ranges->Platform.Random
-
-
+
+
Platform.Random->Platform.Collections
-
-
+
+
Platform.Data.Doublets
-Platform.Data.Doublets
+Platform.Data.Doublets
Platform.Random->Platform.Data.Doublets
-
-
+
+
System.Runtime.CompilerServices.Unsafe
-System.Runtime.CompilerServices.Unsafe
+System.Runtime.CompilerServices.Unsafe
@@ -203,219 +203,219 @@
Platform.Unsafe
-Platform.Unsafe
+Platform.Unsafe
System.Runtime.CompilerServices.Unsafe->Platform.Unsafe
-
-
+
+
Platform.IO
-Platform.IO
+Platform.IO
Platform.Unsafe->Platform.IO
-
-
+
+
Platform.Numbers
-Platform.Numbers
+Platform.Numbers
Platform.Numbers->Platform.Unsafe
-
-
+
+
Platform.Collections.Methods
-Platform.Collections.Methods
+Platform.Collections.Methods
Platform.Numbers->Platform.Collections.Methods
-
-
+
+
Platform.Data
-Platform.Data
+Platform.Data
Platform.Numbers->Platform.Data
-
-
+
+
Platform.Converters
-Platform.Converters
+Platform.Converters
Platform.Reflection->Platform.Converters
-
-
+
+
Platform.Singletons
-Platform.Singletons
+Platform.Singletons
Platform.Reflection->Platform.Singletons
-
-
+
+
Platform.Converters->Platform.Numbers
-
-
+
+
System.Reflection.Emit
-System.Reflection.Emit
+System.Reflection.Emit
System.Reflection.Emit->Platform.Reflection
-
-
+
+
System.Reflection.Emit.Lightweight
-System.Reflection.Emit.Lightweight
+System.Reflection.Emit.Lightweight
System.Reflection.Emit.Lightweight->Platform.Reflection
-
-
+
+
Platform.Threading->Platform.IO
-
-
+
+
Platform.Threading->Platform.Data
-
-
+
+
Platform.Memory
-Platform.Memory
+Platform.Memory
Platform.IO->Platform.Memory
-
-
+
+
Platform.Collections.Methods->Platform.Data.Doublets
-
-
+
+
Platform.Timestamps->Platform.Data.Doublets
-
-
+
+
Platform.Setters->Platform.Data
-
-
+
+
Platform.Singletons->Platform.Data.Doublets
-
-
+
+
System.IO.MemoryMappedFiles
-System.IO.MemoryMappedFiles
+System.IO.MemoryMappedFiles
System.IO.MemoryMappedFiles->Platform.Memory
-
-
+
+
Platform.Memory->Platform.Data.Doublets
-
-
+
+
Platform.Data->Platform.Data.Doublets
-
-
+
+
\ No newline at end of file
diff --git a/doc/Dependencies/Platform.Data.Doublets.svg.backup b/doc/Dependencies/Platform.Data.Doublets.svg.backup
new file mode 100644
index 0000000..3c9222c
--- /dev/null
+++ b/doc/Dependencies/Platform.Data.Doublets.svg.backup
@@ -0,0 +1,421 @@
+
\ No newline at end of file
diff --git a/doc/Intro/1.svg b/doc/Intro/1.svg
index c3f27fd..bfb0826 100644
--- a/doc/Intro/1.svg
+++ b/doc/Intro/1.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/1.svg.backup b/doc/Intro/1.svg.backup
new file mode 100644
index 0000000..c3f27fd
--- /dev/null
+++ b/doc/Intro/1.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/10.svg b/doc/Intro/10.svg
index d31ee2f..4dda3a0 100644
--- a/doc/Intro/10.svg
+++ b/doc/Intro/10.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/10.svg.backup b/doc/Intro/10.svg.backup
new file mode 100644
index 0000000..d31ee2f
--- /dev/null
+++ b/doc/Intro/10.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/11.svg b/doc/Intro/11.svg
index 8e35dd8..e1f3f49 100644
--- a/doc/Intro/11.svg
+++ b/doc/Intro/11.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/11.svg.backup b/doc/Intro/11.svg.backup
new file mode 100644
index 0000000..8e35dd8
--- /dev/null
+++ b/doc/Intro/11.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/12.svg b/doc/Intro/12.svg
index 384d82d..51c075d 100644
--- a/doc/Intro/12.svg
+++ b/doc/Intro/12.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/12.svg.backup b/doc/Intro/12.svg.backup
new file mode 100644
index 0000000..384d82d
--- /dev/null
+++ b/doc/Intro/12.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/2.svg b/doc/Intro/2.svg
index 1c9ceff..f911e8d 100644
--- a/doc/Intro/2.svg
+++ b/doc/Intro/2.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/2.svg.backup b/doc/Intro/2.svg.backup
new file mode 100644
index 0000000..1c9ceff
--- /dev/null
+++ b/doc/Intro/2.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/3.svg b/doc/Intro/3.svg
index 05084dc..8845024 100644
--- a/doc/Intro/3.svg
+++ b/doc/Intro/3.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/3.svg.backup b/doc/Intro/3.svg.backup
new file mode 100644
index 0000000..05084dc
--- /dev/null
+++ b/doc/Intro/3.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/4.svg b/doc/Intro/4.svg
index 4279e6a..53fcf1d 100644
--- a/doc/Intro/4.svg
+++ b/doc/Intro/4.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/4.svg.backup b/doc/Intro/4.svg.backup
new file mode 100644
index 0000000..4279e6a
--- /dev/null
+++ b/doc/Intro/4.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/5.svg b/doc/Intro/5.svg
index c9fcf3a..e1e4fdf 100644
--- a/doc/Intro/5.svg
+++ b/doc/Intro/5.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/5.svg.backup b/doc/Intro/5.svg.backup
new file mode 100644
index 0000000..c9fcf3a
--- /dev/null
+++ b/doc/Intro/5.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/6.svg b/doc/Intro/6.svg
index 384dcc5..65d344c 100644
--- a/doc/Intro/6.svg
+++ b/doc/Intro/6.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/6.svg.backup b/doc/Intro/6.svg.backup
new file mode 100644
index 0000000..384dcc5
--- /dev/null
+++ b/doc/Intro/6.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/7.svg b/doc/Intro/7.svg
index 367f58c..ccf0aa9 100644
--- a/doc/Intro/7.svg
+++ b/doc/Intro/7.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/7.svg.backup b/doc/Intro/7.svg.backup
new file mode 100644
index 0000000..367f58c
--- /dev/null
+++ b/doc/Intro/7.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/8.svg b/doc/Intro/8.svg
index 2d034ac..1495bf7 100644
--- a/doc/Intro/8.svg
+++ b/doc/Intro/8.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/8.svg.backup b/doc/Intro/8.svg.backup
new file mode 100644
index 0000000..2d034ac
--- /dev/null
+++ b/doc/Intro/8.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Intro/9.svg b/doc/Intro/9.svg
index e9fceae..7eeccbc 100644
--- a/doc/Intro/9.svg
+++ b/doc/Intro/9.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/Intro/9.svg.backup b/doc/Intro/9.svg.backup
new file mode 100644
index 0000000..e9fceae
--- /dev/null
+++ b/doc/Intro/9.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/Math/Links_Set_Cartesian_Product.svg b/doc/Math/Links_Set_Cartesian_Product.svg
index ca4701a..669bfa2 100644
--- a/doc/Math/Links_Set_Cartesian_Product.svg
+++ b/doc/Math/Links_Set_Cartesian_Product.svg
@@ -87,13 +87,13 @@
rx="70"
ry="70" />
1)
2)
3)
1)
2)
3)
1)
2)
3)
1
2
3
3
2
L
+ style="font-style:oblique;font-size:40px;line-height:1.25;-inkscape-font-specification:'Arial Oblique';fill:#666666">L
L
+ style="font-style:oblique;font-size:40px;line-height:1.25;-inkscape-font-specification:'Arial Oblique';fill:#666666">L
L
+
+
+
diff --git a/doc/Math/Links_Set_Cartesian_Product_Selected.svg b/doc/Math/Links_Set_Cartesian_Product_Selected.svg
index 611d61e..c3af1a0 100644
--- a/doc/Math/Links_Set_Cartesian_Product_Selected.svg
+++ b/doc/Math/Links_Set_Cartesian_Product_Selected.svg
@@ -87,13 +87,13 @@
rx="70"
ry="70" />
1)
2)
3)
1)
)
3)
)
)
3)
1
2
3
3
2
L
+ style="font-style:oblique;font-size:40px;line-height:1.25;-inkscape-font-specification:'Arial Oblique';fill:#666666">L
L
+ style="font-style:oblique;font-size:40px;line-height:1.25;-inkscape-font-specification:'Arial Oblique';fill:#666666">L
L
+
+
+
diff --git a/doc/TheoriesComparison/graph_theory.svg b/doc/TheoriesComparison/graph_theory.svg
index 078d886..78fdf23 100644
--- a/doc/TheoriesComparison/graph_theory.svg
+++ b/doc/TheoriesComparison/graph_theory.svg
@@ -114,10 +114,10 @@
refY="0">
+
diff --git a/doc/TheoriesComparison/links_theory.svg b/doc/TheoriesComparison/links_theory.svg
index 8dcaa04..a18ffc2 100644
--- a/doc/TheoriesComparison/links_theory.svg
+++ b/doc/TheoriesComparison/links_theory.svg
@@ -197,10 +197,10 @@
refY="0">
+
diff --git a/doc/TheoriesComparison/links_theory_3_links.svg b/doc/TheoriesComparison/links_theory_3_links.svg
index 20a5104..3a524e8 100644
--- a/doc/TheoriesComparison/links_theory_3_links.svg
+++ b/doc/TheoriesComparison/links_theory_3_links.svg
@@ -162,10 +162,10 @@
refY="0">
1
2
+
diff --git a/doc/TheoriesComparison/theories_comparison.svg b/doc/TheoriesComparison/theories_comparison.svg
index cf6551e..b3bd54e 100644
--- a/doc/TheoriesComparison/theories_comparison.svg
+++ b/doc/TheoriesComparison/theories_comparison.svg
@@ -132,10 +132,10 @@
refY="0">
+
diff --git a/doc/links-edge-to-edge.svg b/doc/links-edge-to-edge.svg
index def7991..c7350e2 100644
--- a/doc/links-edge-to-edge.svg
+++ b/doc/links-edge-to-edge.svg
@@ -103,7 +103,7 @@
@@ -117,7 +117,7 @@
@@ -131,7 +131,7 @@
diff --git a/doc/links-edge-to-edge.svg.backup b/doc/links-edge-to-edge.svg.backup
new file mode 100644
index 0000000..def7991
--- /dev/null
+++ b/doc/links-edge-to-edge.svg.backup
@@ -0,0 +1,205 @@
+
+
diff --git a/doc/links-en.svg b/doc/links-en.svg
index c4ed3a6..04abe83 100644
--- a/doc/links-en.svg
+++ b/doc/links-en.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/links-en.svg.backup b/doc/links-en.svg.backup
new file mode 100644
index 0000000..c4ed3a6
--- /dev/null
+++ b/doc/links-en.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/links-ru.svg b/doc/links-ru.svg
index de6643b..06634c3 100644
--- a/doc/links-ru.svg
+++ b/doc/links-ru.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/doc/links-ru.svg.backup b/doc/links-ru.svg.backup
new file mode 100644
index 0000000..de6643b
--- /dev/null
+++ b/doc/links-ru.svg.backup
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/doc/links.svg b/doc/links.svg
index 3475844..c0db7c7 100644
--- a/doc/links.svg
+++ b/doc/links.svg
@@ -90,7 +90,7 @@
@@ -104,7 +104,7 @@
diff --git a/doc/links.svg.backup b/doc/links.svg.backup
new file mode 100644
index 0000000..3475844
--- /dev/null
+++ b/doc/links.svg.backup
@@ -0,0 +1,183 @@
+
+
diff --git a/experiments/analyze_svg_colors.py b/experiments/analyze_svg_colors.py
new file mode 100644
index 0000000..20f49ae
--- /dev/null
+++ b/experiments/analyze_svg_colors.py
@@ -0,0 +1,57 @@
+#!/usr/bin/env python3
+"""
+Script to analyze SVG files for black colors that need to be changed to gray
+"""
+import os
+import re
+import glob
+
+def find_black_patterns_in_svg(filepath):
+ """Find black color patterns in SVG file"""
+ try:
+ with open(filepath, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ # Patterns to look for:
+ # #000, #000000, black, rgb(0,0,0)
+ patterns = [
+ r'#000(?![0-9a-fA-F])', # #000 not followed by more hex digits
+ r'#000000',
+ r'\bblack\b',
+ r'rgb\(\s*0\s*,\s*0\s*,\s*0\s*\)'
+ ]
+
+ found_patterns = []
+ for i, pattern in enumerate(patterns):
+ matches = re.finditer(pattern, content, re.IGNORECASE)
+ for match in matches:
+ found_patterns.append({
+ 'pattern': pattern,
+ 'match': match.group(),
+ 'start': match.start(),
+ 'end': match.end()
+ })
+
+ return found_patterns
+ except Exception as e:
+ print(f"Error reading {filepath}: {e}")
+ return []
+
+def main():
+ svg_files = glob.glob("./doc/**/*.svg", recursive=True)
+
+ files_with_black = {}
+
+ for svg_file in svg_files:
+ patterns = find_black_patterns_in_svg(svg_file)
+ if patterns:
+ files_with_black[svg_file] = patterns
+ print(f"\n{svg_file}:")
+ for pattern in patterns:
+ print(f" - Found: {pattern['match']}")
+
+ print(f"\nSummary: {len(files_with_black)} SVG files contain black colors")
+ return files_with_black
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/experiments/links-edge-to-edge-updated.svg b/experiments/links-edge-to-edge-updated.svg
new file mode 100644
index 0000000..c7350e2
--- /dev/null
+++ b/experiments/links-edge-to-edge-updated.svg
@@ -0,0 +1,205 @@
+
+
diff --git a/experiments/test_single_file.py b/experiments/test_single_file.py
new file mode 100644
index 0000000..085c7bc
--- /dev/null
+++ b/experiments/test_single_file.py
@@ -0,0 +1,88 @@
+#!/usr/bin/env python3
+"""
+Test script to update a single SVG file and check the result
+"""
+import os
+import re
+import shutil
+
+# Gray color to use instead of black
+GRAY_COLOR = "#666666"
+
+def backup_file(filepath):
+ """Create a backup of the original file"""
+ backup_path = filepath + ".backup"
+ if not os.path.exists(backup_path):
+ shutil.copy2(filepath, backup_path)
+ print(f"Created backup: {backup_path}")
+
+def update_svg_colors(filepath):
+ """Update black colors to gray in SVG file"""
+ try:
+ with open(filepath, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ original_content = content
+ print(f"Original file size: {len(content)} characters")
+
+ # Show some examples of what we're replacing
+ black_000 = len(re.findall(r'#000(?![0-9a-fA-F])', content))
+ black_000000 = len(re.findall(r'#000000', content))
+ black_word = len(re.findall(r'\bblack\b', content, re.IGNORECASE))
+ rgb_black = len(re.findall(r'rgb\(\s*0\s*,\s*0\s*,\s*0\s*\)', content, re.IGNORECASE))
+
+ print(f"Found patterns:")
+ print(f" #000: {black_000}")
+ print(f" #000000: {black_000000}")
+ print(f" 'black': {black_word}")
+ print(f" rgb(0,0,0): {rgb_black}")
+
+ # Replace patterns:
+ content = re.sub(r'#000(?![0-9a-fA-F])', GRAY_COLOR, content)
+ content = re.sub(r'#000000', GRAY_COLOR, content)
+ content = re.sub(r'\bblack\b', GRAY_COLOR, content, flags=re.IGNORECASE)
+ content = re.sub(r'rgb\(\s*0\s*,\s*0\s*,\s*0\s*\)', GRAY_COLOR, content, flags=re.IGNORECASE)
+
+ if content != original_content:
+ print(f"Content changed! New size: {len(content)} characters")
+
+ # Show a few examples of the changes
+ lines = content.split('\n')
+ print("\nFirst few lines with gray color:")
+ for i, line in enumerate(lines[:50]):
+ if GRAY_COLOR in line:
+ print(f" Line {i+1}: {line.strip()}")
+ break
+
+ return content
+ else:
+ print("No changes needed")
+ return None
+
+ except Exception as e:
+ print(f"Error processing {filepath}: {e}")
+ return None
+
+def main():
+ # Test with links-edge-to-edge.svg first
+ test_file = "./doc/links-edge-to-edge.svg"
+
+ if not os.path.exists(test_file):
+ print(f"Test file not found: {test_file}")
+ return
+
+ print(f"Testing with: {test_file}")
+ print("=" * 50)
+
+ new_content = update_svg_colors(test_file)
+
+ if new_content:
+ # Write to a test output file instead of overwriting
+ test_output = "./experiments/links-edge-to-edge-updated.svg"
+ with open(test_output, 'w', encoding='utf-8') as f:
+ f.write(new_content)
+ print(f"\nTest output written to: {test_output}")
+ print("You can compare the original and updated files to verify the changes are correct.")
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/experiments/test_svg_result.py b/experiments/test_svg_result.py
new file mode 100644
index 0000000..ef6bc39
--- /dev/null
+++ b/experiments/test_svg_result.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+"""
+Test script to verify the SVG updates worked correctly
+"""
+import os
+import glob
+
+def test_svg_updates():
+ """Test that SVG files were updated correctly"""
+ updated_files = [
+ "./doc/links-edge-to-edge.svg",
+ "./doc/links-ru.svg",
+ "./doc/links.svg",
+ "./doc/Intro/1.svg",
+ "./doc/Math/Links_Set_Cartesian_Product.svg",
+ "./doc/Dependencies/Platform.Data.Doublets.svg"
+ ]
+
+ print("Testing SVG updates...")
+
+ for filepath in updated_files:
+ if os.path.exists(filepath):
+ with open(filepath, 'r') as f:
+ content = f.read()
+
+ # Check that we no longer have #000 (short black)
+ if '#000"' in content or '#000 ' in content or '#000;' in content:
+ print(f"❌ {filepath}: Still contains '#000'")
+ else:
+ print(f"✅ {filepath}: No '#000' found")
+
+ # Check that we have our gray color
+ if '#666666' in content:
+ print(f"✅ {filepath}: Contains gray color '#666666'")
+ else:
+ print(f"❌ {filepath}: No gray color '#666666' found")
+
+ # Check backup exists
+ backup_file = filepath + ".backup"
+ if os.path.exists(backup_file):
+ print(f"✅ {filepath}: Backup exists")
+ else:
+ print(f"❌ {filepath}: No backup found")
+ else:
+ print(f"❌ {filepath}: File not found")
+
+ print()
+
+def check_remaining_images():
+ """Check what non-SVG images we have"""
+ png_files = glob.glob("./doc/**/*.png", recursive=True)
+ jpg_files = glob.glob("./doc/**/*.jpg", recursive=True) + glob.glob("./doc/**/*.jpeg", recursive=True)
+
+ print(f"Found {len(png_files)} PNG files")
+ print(f"Found {len(jpg_files)} JPG/JPEG files")
+
+ # Show some examples
+ if png_files:
+ print("\nSample PNG files:")
+ for i, png in enumerate(png_files[:5]):
+ print(f" {png}")
+ if len(png_files) > 5:
+ print(f" ... and {len(png_files) - 5} more")
+
+ if jpg_files:
+ print("\nSample JPG files:")
+ for i, jpg in enumerate(jpg_files[:5]):
+ print(f" {jpg}")
+ if len(jpg_files) > 5:
+ print(f" ... and {len(jpg_files) - 5} more")
+
+if __name__ == "__main__":
+ test_svg_updates()
+ print("\n" + "="*50)
+ check_remaining_images()
\ No newline at end of file
diff --git a/experiments/update_log.txt b/experiments/update_log.txt
new file mode 100644
index 0000000..ff52d5c
--- /dev/null
+++ b/experiments/update_log.txt
@@ -0,0 +1,56 @@
+Updating 27 SVG files...
+Using gray color: #666666
+
+Created backup: ./doc/links-edge-to-edge.svg.backup
+Updated: ./doc/links-edge-to-edge.svg
+Created backup: ./doc/Intro/8.svg.backup
+Updated: ./doc/Intro/8.svg
+Created backup: ./doc/Intro/1.svg.backup
+Updated: ./doc/Intro/1.svg
+Created backup: ./doc/Intro/7.svg.backup
+Updated: ./doc/Intro/7.svg
+Created backup: ./doc/Intro/3.svg.backup
+Updated: ./doc/Intro/3.svg
+Created backup: ./doc/Intro/2.svg.backup
+Updated: ./doc/Intro/2.svg
+Created backup: ./doc/Intro/6.svg.backup
+Updated: ./doc/Intro/6.svg
+Created backup: ./doc/Intro/11.svg.backup
+Updated: ./doc/Intro/11.svg
+Created backup: ./doc/Intro/5.svg.backup
+Updated: ./doc/Intro/5.svg
+Created backup: ./doc/Intro/12.svg.backup
+Updated: ./doc/Intro/12.svg
+Created backup: ./doc/Intro/9.svg.backup
+Updated: ./doc/Intro/9.svg
+Created backup: ./doc/Intro/4.svg.backup
+Updated: ./doc/Intro/4.svg
+Created backup: ./doc/Intro/10.svg.backup
+Updated: ./doc/Intro/10.svg
+Created backup: ./doc/links-ru.svg.backup
+Updated: ./doc/links-ru.svg
+Created backup: ./doc/links.svg.backup
+Updated: ./doc/links.svg
+Created backup: ./doc/Math/Links_Set_Cartesian_Product.svg.backup
+Updated: ./doc/Math/Links_Set_Cartesian_Product.svg
+Created backup: ./doc/Math/Links_Set_Cartesian_Product_Selected.svg.backup
+Updated: ./doc/Math/Links_Set_Cartesian_Product_Selected.svg
+No changes needed: ./doc/TheoriesComparison/point_link.svg
+Created backup: ./doc/TheoriesComparison/theories_comparison.svg.backup
+Updated: ./doc/TheoriesComparison/theories_comparison.svg
+Created backup: ./doc/TheoriesComparison/links_theory_3_links.svg.backup
+Updated: ./doc/TheoriesComparison/links_theory_3_links.svg
+Created backup: ./doc/TheoriesComparison/links_theory.svg.backup
+Updated: ./doc/TheoriesComparison/links_theory.svg
+Created backup: ./doc/TheoriesComparison/graph_theory.svg.backup
+Updated: ./doc/TheoriesComparison/graph_theory.svg
+No changes needed: ./doc/ST-dots.svg
+Created backup: ./doc/links-en.svg.backup
+Updated: ./doc/links-en.svg
+No changes needed: ./doc/SLT-dots.svg
+Created backup: ./doc/Dependencies/Platform.Data.Doublets.cpp.svg.backup
+Updated: ./doc/Dependencies/Platform.Data.Doublets.cpp.svg
+Created backup: ./doc/Dependencies/Platform.Data.Doublets.svg.backup
+Updated: ./doc/Dependencies/Platform.Data.Doublets.svg
+
+Summary: Updated 24 files
diff --git a/experiments/update_svg_colors.py b/experiments/update_svg_colors.py
new file mode 100644
index 0000000..968d4fd
--- /dev/null
+++ b/experiments/update_svg_colors.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+"""
+Script to update SVG files by replacing black colors with gray
+"""
+import os
+import re
+import glob
+import shutil
+
+# Gray color to use instead of black (this matches what's already used in some files)
+GRAY_COLOR = "#666666" # Medium gray that works well on both light and dark backgrounds
+
+def backup_file(filepath):
+ """Create a backup of the original file"""
+ backup_path = filepath + ".backup"
+ if not os.path.exists(backup_path):
+ shutil.copy2(filepath, backup_path)
+ print(f"Created backup: {backup_path}")
+
+def update_svg_colors(filepath):
+ """Update black colors to gray in SVG file"""
+ try:
+ with open(filepath, 'r', encoding='utf-8') as f:
+ content = f.read()
+
+ original_content = content
+
+ # Replace patterns:
+ # #000 (not followed by more hex digits) -> gray
+ content = re.sub(r'#000(?![0-9a-fA-F])', GRAY_COLOR, content)
+
+ # #000000 -> gray
+ content = re.sub(r'#000000', GRAY_COLOR, content)
+
+ # "black" -> gray (case insensitive)
+ content = re.sub(r'\bblack\b', GRAY_COLOR, content, flags=re.IGNORECASE)
+
+ # rgb(0,0,0) -> gray
+ content = re.sub(r'rgb\(\s*0\s*,\s*0\s*,\s*0\s*\)', GRAY_COLOR, content, flags=re.IGNORECASE)
+
+ if content != original_content:
+ # Create backup before modifying
+ backup_file(filepath)
+
+ # Write updated content
+ with open(filepath, 'w', encoding='utf-8') as f:
+ f.write(content)
+
+ print(f"Updated: {filepath}")
+ return True
+ else:
+ print(f"No changes needed: {filepath}")
+ return False
+
+ except Exception as e:
+ print(f"Error processing {filepath}: {e}")
+ return False
+
+def main():
+ # Get all SVG files that contain black colors
+ svg_files_with_black = [
+ "./doc/links-edge-to-edge.svg",
+ "./doc/Intro/8.svg",
+ "./doc/Intro/1.svg",
+ "./doc/Intro/7.svg",
+ "./doc/Intro/3.svg",
+ "./doc/Intro/2.svg",
+ "./doc/Intro/6.svg",
+ "./doc/Intro/11.svg",
+ "./doc/Intro/5.svg",
+ "./doc/Intro/12.svg",
+ "./doc/Intro/9.svg",
+ "./doc/Intro/4.svg",
+ "./doc/Intro/10.svg",
+ "./doc/links-ru.svg",
+ "./doc/links.svg",
+ "./doc/Math/Links_Set_Cartesian_Product.svg",
+ "./doc/Math/Links_Set_Cartesian_Product_Selected.svg",
+ "./doc/TheoriesComparison/point_link.svg",
+ "./doc/TheoriesComparison/theories_comparison.svg",
+ "./doc/TheoriesComparison/links_theory_3_links.svg",
+ "./doc/TheoriesComparison/links_theory.svg",
+ "./doc/TheoriesComparison/graph_theory.svg",
+ "./doc/ST-dots.svg",
+ "./doc/links-en.svg",
+ "./doc/SLT-dots.svg",
+ "./doc/Dependencies/Platform.Data.Doublets.cpp.svg",
+ "./doc/Dependencies/Platform.Data.Doublets.svg"
+ ]
+
+ updated_count = 0
+
+ print(f"Updating {len(svg_files_with_black)} SVG files...")
+ print(f"Using gray color: {GRAY_COLOR}")
+ print()
+
+ for svg_file in svg_files_with_black:
+ if os.path.exists(svg_file):
+ if update_svg_colors(svg_file):
+ updated_count += 1
+ else:
+ print(f"File not found: {svg_file}")
+
+ print(f"\nSummary: Updated {updated_count} files")
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file