Save samovar, v5.
authorsgf <sgf.dma@gmail.com>
Tue, 21 Jun 2022 21:17:35 +0000 (00:17 +0300)
committersgf <sgf.dma@gmail.com>
Tue, 21 Jun 2022 21:17:35 +0000 (00:17 +0300)
samovar.go

index 98ac486..6c7baf3 100644 (file)
@@ -22,36 +22,61 @@ type renFile struct {
 var renamedFiles []renFile
 var yetToCopyFiles []renFile
 
-// Create directories and copy files, which don't need editing.
-func copyToLower(p0 string, d fs.DirEntry, err error) error {
-    if err != nil { return err }
+var editFileExts = map[string]bool {
+        ".html": true,
+        ".htm": true,
+        ".asp": true,
+        ".css": true,
+        ".dwt": true,
+    }
 
-    log.Println("Path: ", p0)
+func convertFileName(p0 string, newExt string) (string, error) {
     rel0, err := filepath.Rel(rootPath, p0)
-    if err != nil { return err }
+    if err != nil { return "", err }
 
     rel1 := strings.ToLower(rel0)
     //rel1 := rel0
-
     p1 := filepath.Join(newRootPath, rel1)
-    log.Println("New name ", p1)
-    inf0, err := d.Info()
-    if err != nil { return err }
-
     if rel0 != rel1 {
         renamedFiles = append(renamedFiles, renFile{oldName: p0, newName: p1})
     }
 
-    log.Println(inf0.Mode())
     ext1 := filepath.Ext(p1)
-    log.Println(ext1)
+    if newExt != "" && ext1 != newExt {
+        log.Printf("Replacing extension from %q to %q\n", ext1, newExt)
+        x := p1
+        p1 = strings.TrimSuffix(p1, ext1) + newExt
+        renamedFiles = append(renamedFiles, renFile{oldName: x, newName: p1})
+    }
+    log.Printf("Convert %q to %q\n", p0, p1)
+    return p1, nil
+}
+
+// Create directories and copy files, which don't need editing.
+func copyFiles(p0 string, d fs.DirEntry, err error) error {
+    if err != nil { return err }
+    log.Println("Path: ", p0)
+
+    var p1 string
+    if strings.ToLower(filepath.Ext(p0)) == ".asp" {
+        p1, err = convertFileName(p0, ".htm")
+    } else {
+        p1, err = convertFileName(p0, "")
+    }
+    if err != nil { return err }
+    //rel1 := rel0
+
+    ext1 := filepath.Ext(p1)
+    inf0, err := d.Info()
+    if err != nil { return err }
+
     if d.IsDir() {
         log.Printf("Creating dir %v\n", p1)
         err = os.Mkdir(p1, inf0.Mode())
         if err != nil && !errors.Is(err, fs.ErrExist) {
             return err
         }
-    } else if ext1 != ".html" && ext1 != ".htm" && ext1 != ".asp" && ext1 != ".css" {
+    } else if !editFileExts[ext1] {
         log.Printf("Copying file %v\n", p1)
         h0, err := os.Open(p0)
         if err != nil { return err }
@@ -68,16 +93,97 @@ func copyToLower(p0 string, d fs.DirEntry, err error) error {
         //yetToCopyFiles = append(yetToCopyFiles, renFile{oldName: p0, newName: filepath.Join(newRootPath, rel0)})
     }
     return nil
+}
 
-    /*
-    err = os.Rename(p0, filepath.Join(newRootPath, relL))
-    if err != nil { return err }*/
+func fixRenamedPathes(s0 string) string {
+    s1 := s0
+
+    //log.Printf("Started with %q\n", s0)
+    for _, v := range renamedFiles {
+        x := strings.SplitAfter(v.oldName, "/")
+        //log.Printf("Split old name: %q\n", x)
+        y := strings.SplitAfter(v.newName, "/")
+        //log.Printf("Split new name: %q\n", y)
+
+        if len(x) > 2 { x = x[len(x)-2:] }
+        //log.Printf("Work on old name: %q\n", x)
+        if len(y) > 2 { y = y[len(y)-2:] }
+        //log.Printf("Work on new name: %q\n", y)
+        for i, j := 0, 0; i < len(x) && j < len(y); i, j = i+1, j+1 {
+            s1 = strings.ReplaceAll(s1, x[i], y[j])
+            if s0 != s1 {
+                //log.Printf("Replaced at %q, %q, %q\n", x[i], y[j], s1)
+            }
+        }
+    }
+    return s1
 }
 
-func rewritePathes(p0 string, _ fs.DirEntry, err error) error {
-    return nil
+func main() {
+    /*
+    h0, err := os.Open("int.go")
+    if err != nil { panic("huynya") }
+    defer h0.Close()
+
+    h1, err := os.OpenFile("2.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+    if err != nil { panic("huynya") }
+    defer h1.Close()
+
+    v := LineByLine{input: h0}
+    for {
+        l, err := v.ReadLine()
+        if err == io.EOF { break }
+        fmt.Printf("Received %q\n", l)
+        h1.Write(l)
+    }
+    */
+
+    var err error
+
+    /*
+    renamedFiles = []renFile{ {"ABC", "abc"}, {"ABC/DEF", "abc/def"}, {"ABC/DEF/HUY.TXT", "abc/def/huy.txt"}, {"ABC/DEF/GHI/NYA.TXT", "abc/def/ghi/nya.txt"}}
+    res := fixRenamedPathes("file=NYA.TXT")
+    fmt.Printf("Result: %q\n", res)
+
+    return*/
+    _, ok := editFileExts[".html"]
+    fmt.Println(ok)
+    err = filepath.WalkDir(rootPath, copyFiles)
+    if err != nil {
+        fmt.Println(err)
+        fmt.Println("huynya bro")
+    }
+    //fmt.Printf("%#v", yetToCopyFiles)
+    for _, fn := range yetToCopyFiles {
+        log.Printf("Rewriting %q\n", fn.newName)
+        h0, err := os.Open(fn.oldName)
+        if err != nil { log.Fatal(err) }
+        defer h0.Close()
+
+        h1, err := os.OpenFile(fn.newName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+        if err != nil { log.Fatal(err) }
+        defer h1.Close()
+
+        s := bufio.NewScanner(h0)
+        for s.Scan() {
+            //log.Printf("Scanner read %q\n", s.Text())
+            //l := strings.ReplaceAll(s.Text(), "main", "NYAAA") + "\n"
+            l := s.Text()
+            if l == "<%@ language=JavaScript %>" { continue }
+            l = fixRenamedPathes(l) + "\n"
+            //l = l + "\n"
+            h1.Write([]byte(l))
+        }
+    }
 }
 
+
+
+
+
+
+
+
 type LineByLine struct {
     input io.Reader
     buf []byte
@@ -134,50 +240,3 @@ func (r *LineByLine) ReadLine() (line []byte, err error) {
     }
 }
 
-func main() {
-    /*
-    h0, err := os.Open("int.go")
-    if err != nil { panic("huynya") }
-    defer h0.Close()
-
-    h1, err := os.OpenFile("2.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
-    if err != nil { panic("huynya") }
-    defer h1.Close()
-
-    v := LineByLine{input: h0}
-    for {
-        l, err := v.ReadLine()
-        if err == io.EOF { break }
-        fmt.Printf("Received %q\n", l)
-        h1.Write(l)
-    }
-    */
-
-    var err error
-
-    err = filepath.WalkDir(rootPath, copyToLower)
-    if err != nil {
-        fmt.Println(err)
-        fmt.Println("huynya bro")
-    }
-    fmt.Printf("%#v", yetToCopyFiles)
-    for _, fn := range yetToCopyFiles {
-        h0, err := os.Open(fn.oldName)
-        if err != nil { log.Fatal(err) }
-        defer h0.Close()
-
-        h1, err := os.OpenFile(fn.newName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
-        if err != nil { log.Fatal(err) }
-        defer h1.Close()
-
-        s := bufio.NewScanner(h0)
-        for s.Scan() {
-            //log.Printf("Scanner read %q\n", s.Text())
-            //l := strings.ReplaceAll(s.Text(), "main", "NYAAA") + "\n"
-            l := s.Text()
-            if l == "<%@ language=JavaScript %>" { continue }
-            l = l + "\n"
-            h1.Write([]byte(l))
-        }
-    }
-}