예제 #1
0
파일: tplengin.go 프로젝트: catgatp/gol
func parseTag(source []byte) (tag interface{}) {
	defer func() {
		if e := recover(); e != nil {
			v := e.(*err.OpenErr)
			v.Text += "err parse tpl: " + string(source)
			err.Panic(v)
		}
	}()

	list := parser.SplitWord(source, 32)
	switch list[0] {
	// основные теги
	case "!":
	case "inc":
		tag = parseTagInclude(list[1:])
	case "i18n":
		tag = parseTagi18n(list[1:])
	case "for":
		tag = parseTagFor(list[1:])
	default:
		// переменная контекста
		// либо функция (расширенные теги)
		slice := []byte(list[0])
		if bytes.HasPrefix(slice, []byte(".")) {
			tag = tTagVar(list[0][1:])
		} else if bytes.HasPrefix(slice, []byte("@.")) {
			tag = tTagVarHtmlEsc(list[0][2:])
		} else {
			tag = parseTagFunc(list)
		}
	}
	return
}
예제 #2
0
파일: i18n.go 프로젝트: catgatp/gol
func parseTag(source []byte) interface{} {
	defer func() {
		if e := recover(); e != nil {
			panic(err.New("err parse i18n: "+string(source), 0))
		}
	}()

	list := parser.SplitWord(source, 32)
	switch list[0] {
	case "plural":
		return parseTagPlural(list[1:])
	case "f":
		return parseTagFunc(list[1:])
	default:
		return parseTagVar(list)
	}
}