Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 

51 righe
2.3 KiB

  1. $ErrorActionPreference = 'Stop'
  2. $ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  3. $fontsDir = Join-Path $PSScriptRoot "..\data\fonts"
  4. $fontsDir = (Resolve-Path $fontsDir).Path
  5. $families = @(
  6. @{ name = 'Inter'; query = 'Inter' },
  7. @{ name = 'Lora'; query = 'Lora' },
  8. @{ name = 'Merriweather'; query = 'Merriweather' },
  9. @{ name = 'OpenSans'; query = 'Open+Sans' },
  10. @{ name = 'PlayfairDisplay'; query = 'Playfair+Display' },
  11. @{ name = 'Roboto'; query = 'Roboto' },
  12. @{ name = 'WorkSans'; query = 'Work+Sans' }
  13. )
  14. foreach ($f in $families) {
  15. $cssUrl = "https://fonts.googleapis.com/css2?family=$($f.query):ital,wght@0,400;0,700;1,400;1,700&display=swap"
  16. Write-Host "=== $($f.name) ===" -ForegroundColor Cyan
  17. Write-Host "CSS: $cssUrl"
  18. $css = (Invoke-WebRequest -Uri $cssUrl -UserAgent $ua -UseBasicParsing).Content
  19. $pattern = '/\*\s*latin\s*\*/\s*@font-face\s*\{([^}]+)\}'
  20. $matches = [regex]::Matches($css, $pattern)
  21. Write-Host "Found $($matches.Count) latin @font-face blocks"
  22. foreach ($m in $matches) {
  23. $block = $m.Groups[1].Value
  24. $weight = [regex]::Match($block, 'font-weight:\s*(\d+)').Groups[1].Value
  25. $style = [regex]::Match($block, 'font-style:\s*(\w+)').Groups[1].Value
  26. $url = [regex]::Match($block, 'url\(([^)]+\.woff2)\)').Groups[1].Value
  27. if (-not $url) { Write-Host " skip block: no woff2 url"; continue }
  28. $suffix = ''
  29. if ($style -eq 'italic' -and $weight -eq '700') { $suffix = '-BoldItalic' }
  30. elseif ($style -eq 'italic') { $suffix = '-Italic' }
  31. elseif ($weight -eq '700') { $suffix = '-Bold' }
  32. $outFile = Join-Path $fontsDir "$($f.name)$suffix.woff2"
  33. Invoke-WebRequest -Uri $url -OutFile $outFile -UserAgent $ua -UseBasicParsing
  34. $size = (Get-Item $outFile).Length
  35. Write-Host (" -> {0} ({1} bytes)" -f (Split-Path $outFile -Leaf), $size)
  36. }
  37. }
  38. Write-Host "`nDone." -ForegroundColor Green
  39. Write-Host "Files in ${fontsDir}:"
  40. Get-ChildItem $fontsDir -Filter '*.woff2' | Sort-Object Name | ForEach-Object { Write-Host (" {0,-30} {1,8} bytes" -f $_.Name, $_.Length) }