Changeset 33 in code


Ignore:
Timestamp:
Sep 2, 2015, 3:00:14 PM (10 years ago)
Author:
zaitsev.serge
Message:

removed funcs, ext and utils

Location:
trunk
Files:
2 deleted
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zs.go

    r32 r33  
    88        "log"
    99        "os"
     10        "os/exec"
    1011        "path"
    1112        "path/filepath"
     
    2526
    2627type Vars map[string]string
    27 type Funcs template.FuncMap
     28
     29func renameExt(path, from, to string) string {
     30        if from == "" {
     31                from = filepath.Ext(path)
     32        }
     33        if strings.HasSuffix(path, from) {
     34                return strings.TrimSuffix(path, from) + to
     35        } else {
     36                return path
     37        }
     38}
     39
     40func globals() Vars {
     41        vars := Vars{}
     42        for _, e := range os.Environ() {
     43                pair := strings.Split(e, "=")
     44                if strings.HasPrefix(pair[0], "ZS_") {
     45                        vars[strings.ToLower(pair[0][3:])] = pair[1]
     46                }
     47        }
     48        return vars
     49}
     50
     51// Converts zs markdown variables into environment variables
     52func env(vars Vars) []string {
     53        env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR}
     54        env = append(env, os.Environ()...)
     55        if vars != nil {
     56                for k, v := range vars {
     57                        env = append(env, "ZS_"+strings.ToUpper(k)+"="+v)
     58                }
     59        }
     60        return env
     61}
     62
     63// Runs command with given arguments and variables, intercepts stderr and
     64// redirects stdout into the given writer
     65func run(cmd string, args []string, vars Vars, output io.Writer) error {
     66        var errbuf bytes.Buffer
     67        c := exec.Command(cmd, args...)
     68        c.Env = env(vars)
     69        c.Stdout = output
     70        c.Stderr = &errbuf
     71
     72        err := c.Run()
     73
     74        if errbuf.Len() > 0 {
     75                log.Println("ERROR:", errbuf.String())
     76        }
     77
     78        if err != nil {
     79                return err
     80        }
     81        return nil
     82}
     83
     84// Splits a string in exactly two parts by delimiter
     85// If no delimiter is found - the second string is be empty
     86func split2(s, delim string) (string, string) {
     87        parts := strings.SplitN(s, delim, 2)
     88        if len(parts) == 2 {
     89                return parts[0], parts[1]
     90        } else {
     91                return parts[0], ""
     92        }
     93}
    2894
    2995// Parses markdown content. Returns parsed header variables and content
     
    67133
    68134// Use standard Go templates
    69 func render(s string, funcs Funcs, vars Vars) (string, error) {
    70         f := makeFuncs(funcs, vars)
    71         tmpl, err := template.New("").Funcs(template.FuncMap(f)).Parse(s)
     135func render(s string, vars Vars) (string, error) {
     136        tmpl, err := template.New("").Parse(s)
    72137        if err != nil {
    73138                return "", err
     
    81146
    82147// Renders markdown with the given layout into html expanding all the macros
    83 func buildMarkdown(path string, w io.Writer, funcs Funcs, vars Vars) error {
     148func buildMarkdown(path string, w io.Writer, vars Vars) error {
    84149        v, body, err := md(path, vars)
    85150        if err != nil {
    86151                return err
    87152        }
    88         content, err := render(body, funcs, v)
     153        content, err := render(body, v)
    89154        if err != nil {
    90155                return err
     
    100165        }
    101166        if strings.HasSuffix(v["layout"], ".amber") {
    102                 return buildAmber(filepath.Join(ZSDIR, v["layout"]), w, funcs, v)
    103         } else {
    104                 return buildHTML(filepath.Join(ZSDIR, v["layout"]), w, funcs, v)
     167                return buildAmber(filepath.Join(ZSDIR, v["layout"]), w, v)
     168        } else {
     169                return buildHTML(filepath.Join(ZSDIR, v["layout"]), w, v)
    105170        }
    106171}
    107172
    108173// Renders text file expanding all variable macros inside it
    109 func buildHTML(path string, w io.Writer, funcs Funcs, vars Vars) error {
     174func buildHTML(path string, w io.Writer, vars Vars) error {
    110175        b, err := ioutil.ReadFile(path)
    111176        if err != nil {
    112177                return err
    113178        }
    114         content, err := render(string(b), funcs, vars)
     179        content, err := render(string(b), vars)
    115180        if err != nil {
    116181                return err
     
    129194
    130195// Renders .amber file into .html
    131 func buildAmber(path string, w io.Writer, funcs Funcs, vars Vars) error {
     196func buildAmber(path string, w io.Writer, vars Vars) error {
    132197        a := amber.New()
    133198        err := a.ParseFile(path)
     
    140205                data[k] = v
    141206        }
    142         for k, v := range makeFuncs(funcs, Vars{}) {
    143                 data[k] = v
    144         }
    145207
    146208        t, err := a.Compile()
     
    199261}
    200262
    201 func build(path string, w io.Writer, funcs Funcs, vars Vars) error {
     263func build(path string, w io.Writer, vars Vars) error {
    202264        ext := filepath.Ext(path)
    203265        if ext == ".md" || ext == ".mkd" {
    204                 return buildMarkdown(path, w, funcs, vars)
     266                return buildMarkdown(path, w, vars)
    205267        } else if ext == ".html" || ext == ".xml" {
    206                 return buildHTML(path, w, funcs, vars)
     268                return buildHTML(path, w, vars)
    207269        } else if ext == ".amber" {
    208                 return buildAmber(path, w, funcs, vars)
     270                return buildAmber(path, w, vars)
    209271        } else if ext == ".gcss" {
    210272                return buildGCSS(path, w)
     
    221283        for {
    222284                os.Mkdir(PUBDIR, 0755)
    223                 funcs := builtins()
    224285                err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
    225286                        // ignore hidden files and directories
     
    244305                                }
    245306                                log.Println("build: ", path)
    246                                 return build(path, nil, funcs, vars)
     307                                return build(path, nil, vars)
    247308                        }
    248309                        return nil
     
    277338                        buildAll(false)
    278339                } else if len(args) == 1 {
    279                         if err := build(args[0], os.Stdout, builtins(), globals()); err != nil {
     340                        if err := build(args[0], os.Stdout, globals()); err != nil {
    280341                                fmt.Println("ERROR: " + err.Error())
    281342                        }
     
    286347                buildAll(true)
    287348        case "var":
    288                 fmt.Println(Var(args...))
    289         case "lorem":
    290                 fmt.Println(Lorem(args...))
    291         case "dateparse":
    292                 fmt.Println(DateParse(args...))
    293         case "datefmt":
    294                 fmt.Println(DateFmt(args...))
    295         case "wc":
    296                 fmt.Println(WordCount(args...))
    297         case "ttr":
    298                 fmt.Println(TimeToRead(args...))
    299         case "ls":
    300                 fmt.Println(strings.Join(List(args...), "\n"))
    301         case "sort":
    302                 fmt.Println(strings.Join(Sort(args...), "\n"))
    303         case "exec":
    304                 // TODO
     349                if len(args) == 0 {
     350                        fmt.Println("var: filename expected")
     351                } else {
     352                        s := ""
     353                        if vars, _, err := md(args[0], globals()); err != nil {
     354                                fmt.Println("var: " + err.Error())
     355                        } else {
     356                                if len(args) > 1 {
     357                                        for _, a := range args[1:] {
     358                                                s = s + vars[a] + "\n"
     359                                        }
     360                                } else {
     361                                        for k, v := range vars {
     362                                                s = s + k + ":" + v + "\n"
     363                                        }
     364                                }
     365                        }
     366                        fmt.Println(strings.TrimSpace(s))
     367                }
    305368        default:
    306369                err := run(path.Join(ZSDIR, cmd), args, globals(), os.Stdout)
Note: See TracChangeset for help on using the changeset viewer.