modernc.org/knuth@v0.0.4/mf/generate.go (about) 1 // Copyright 2023 The Knuth Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build ignore 6 // +build ignore 7 8 package main 9 10 import ( 11 "fmt" 12 "os" 13 "path/filepath" 14 15 "modernc.org/knuth" 16 "modernc.org/knuth/web" 17 ) 18 19 func fail(s string, args ...interface{}) { 20 fmt.Fprintf(os.Stderr, s, args...) 21 os.Exit(1) 22 } 23 24 func main() { 25 prod() 26 test() 27 } 28 29 func prod() { 30 const ( 31 base = "mf" 32 33 chFn = base + ".ch" 34 goFn = base + ".go" 35 pasFn = base + ".pas" 36 poolFn = base + ".pool" 37 webFn = base + ".web" 38 ) 39 40 dest, err := os.Create(filepath.FromSlash(goFn)) 41 if err != nil { 42 fail("creating %s: %v\n", goFn, err) 43 } 44 45 defer func() { 46 if err = dest.Close(); err != nil { 47 fail("closing %s: %v\n", goFn, err) 48 } 49 }() 50 51 pas, err := os.Create(filepath.FromSlash(pasFn)) 52 if err != nil { 53 fail("creating %s: %v\n", pasFn, err) 54 } 55 56 defer func() { 57 if err = pas.Close(); err != nil { 58 fail("closing %s: %v\n", pasFn, err) 59 } 60 }() 61 62 pool, err := os.Create(filepath.FromSlash(poolFn)) 63 if err != nil { 64 fail("creating %s: %v\n", poolFn, err) 65 } 66 67 defer func() { 68 if err = pool.Close(); err != nil { 69 fail("closing %s: %v\n", poolFn, err) 70 } 71 }() 72 73 webSrc, err := os.ReadFile(filepath.FromSlash(webFn)) 74 if err != nil { 75 fail("reading %v: %v\n", webFn, err) 76 } 77 78 chSrc, err := os.ReadFile(filepath.FromSlash(chFn)) 79 if err != nil { 80 fail("reading %v: %v\n", chFn, err) 81 } 82 83 src, err := knuth.NewChanger( 84 knuth.NewRuneSource(webFn, webSrc, knuth.Unicode), 85 knuth.NewRuneSource(chFn, chSrc, knuth.Unicode), 86 ) 87 if err != nil { 88 fail("processing %s and %s: %v\n", webFn, chFn, err) 89 } 90 91 if err := web.Go(dest, pas, pool, src, base); err != nil { 92 fail("generate: %v\n", err) 93 } 94 } 95 96 func test() { 97 if err := os.Chdir(filepath.FromSlash("internal/trap/")); err != nil { 98 fail("cannot chdir: %v", err) 99 } 100 101 const ( 102 base = "mf" 103 104 chFn = base + ".ch" 105 goFn = base + ".go" 106 pasFn = base + ".pas" 107 poolFn = base + ".pool" 108 webFn = "../../" + base + ".web" 109 ) 110 111 dest, err := os.Create(filepath.FromSlash(goFn)) 112 if err != nil { 113 fail("creating %s: %v\n", goFn, err) 114 } 115 116 defer func() { 117 if err = dest.Close(); err != nil { 118 fail("closing %s: %v\n", goFn, err) 119 } 120 }() 121 122 pas, err := os.Create(filepath.FromSlash(pasFn)) 123 if err != nil { 124 fail("creating %s: %v\n", pasFn, err) 125 } 126 127 defer func() { 128 if err = pas.Close(); err != nil { 129 fail("closing %s: %v\n", pasFn, err) 130 } 131 }() 132 133 pool, err := os.Create(filepath.FromSlash(poolFn)) 134 if err != nil { 135 fail("creating %s: %v\n", poolFn, err) 136 } 137 138 defer func() { 139 if err = pool.Close(); err != nil { 140 fail("closing %s: %v\n", poolFn, err) 141 } 142 }() 143 144 webSrc, err := os.ReadFile(filepath.FromSlash(webFn)) 145 if err != nil { 146 fail("reading %v: %v\n", webFn, err) 147 } 148 149 chSrc, err := os.ReadFile(filepath.FromSlash(chFn)) 150 if err != nil { 151 fail("reading %v: %v\n", chFn, err) 152 } 153 154 src, err := knuth.NewChanger( 155 knuth.NewRuneSource(webFn, webSrc, knuth.Unicode), 156 knuth.NewRuneSource(chFn, chSrc, knuth.Unicode), 157 ) 158 if err != nil { 159 fail("processing %s and %s: %v\n", webFn, chFn, err) 160 } 161 162 if err := web.Go(dest, pas, pool, src, "trap"); err != nil { 163 fail("generate: %v\n", err) 164 } 165 }