blob: 281d85cfea16a4ebde479107345430a3b2538775 [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
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
//go:generate embed --package main
package main
import (
// Entry represents a single stringtable entry.
type Entry struct {
Key string // Name of the stringtable key.
Parameters []string // 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(pkg string, entries []Entry, w io.Writer) error {
funcs := map[string]interface{}{
"ToCamel": underscoredToCamel,
tmpl, err := template.New("StringDef").Funcs(funcs).Parse(stringdef_tmpl)
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, "")