80 lines
1.5 KiB
Go
80 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var pxRegex = regexp.MustCompile(`(\d+\.?\d*)px`)
|
|
|
|
func pxToRem(pxStr string) string {
|
|
px, err := strconv.ParseFloat(pxStr, 64)
|
|
if err != nil {
|
|
return pxStr + "px"
|
|
}
|
|
if px == 0 {
|
|
return "0"
|
|
}
|
|
rem := px / 16.0
|
|
if rem == float64(int(rem)) {
|
|
return fmt.Sprintf("%drem", int(rem))
|
|
}
|
|
return fmt.Sprintf("%.2frem", rem)
|
|
}
|
|
|
|
func convertFile(filePath string) error {
|
|
content, err := ioutil.ReadFile(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
original := string(content)
|
|
converted := pxRegex.ReplaceAllStringFunc(original, func(match string) string {
|
|
num := strings.TrimSuffix(match, "px")
|
|
return pxToRem(num)
|
|
})
|
|
|
|
if original == converted {
|
|
return nil
|
|
}
|
|
|
|
return ioutil.WriteFile(filePath, []byte(converted), 0644)
|
|
}
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
fmt.Println("Usage: go run convert_units.go <directory>")
|
|
os.Exit(1)
|
|
}
|
|
|
|
dir := os.Args[1]
|
|
count := 0
|
|
|
|
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() && strings.HasSuffix(path, ".html") {
|
|
err := convertFile(path)
|
|
if err != nil {
|
|
fmt.Printf("Error converting %s: %v\n", path, err)
|
|
return nil
|
|
}
|
|
count++
|
|
fmt.Printf("Converted: %s\n", path)
|
|
}
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
fmt.Printf("Error walking directory: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
fmt.Printf("\nTotal files converted: %d\n", count)
|
|
} |