blob: 46521f4d9c41e0d7d807a824fd1355060daef707 [file] [log] [blame]
// Copyright (C) 2016 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"io"
"strings"
"text/template"
"android.googlesource.com/platform/tools/gpu/framework/reflow"
"android.googlesource.com/platform/tools/gpu/tools/copyright"
)
// EntryParameter represents a parameter for a specific stringtable entry.
type EntryParameter struct {
Identifier string // Name of the parameter.
Type string // Type of the parameter. Default is "string".
}
// Entry represents a single stringtable entry.
type Entry struct {
Key string // Name of the stringtable key.
Parameters []EntryParameter // List of parameters.
}
// EntryList is a sortable slice of entries.
type EntryList []Entry
// Len returns the number of elements in the list.
func (l EntryList) Len() int { return len(l) }
// Less returns true if the i'th element's key is less than the j'th element's
// key.
func (l EntryList) Less(i, j int) bool { return l[i].Key < l[j].Key }
// Swap switches the i'th and j'th element.
func (l EntryList) Swap(i, j int) { l[i], l[j] = l[j], l[i] }
// context is the template execution context.
type context struct {
Entries []Entry
Package string
Copyright string
}
// Execute executes the template with the given list of entries.
func Execute(templateRoutine, templateStr, pkg string, entries []Entry, w io.Writer) error {
funcs := map[string]interface{}{
"ToCamel": underscoredToCamel,
}
tmpl, err := template.New(templateRoutine).Funcs(funcs).Parse(templateStr)
if err != nil {
return err
}
ctx := context{
Entries: entries,
Package: pkg,
Copyright: copyright.Build("generated_by", copyright.Info{Year: "2016", Tool: "stringgen"}),
}
r := reflow.New(w)
r.Indent = "\t"
defer r.Flush()
return tmpl.Execute(r, ctx)
}
func underscoredToCamel(s string) string {
parts := strings.Split(s, "_")
for i := range parts {
parts[i] = strings.Title(strings.ToLower(parts[i]))
}
return strings.Join(parts, "")
}