func filterTruncatesentences(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) { count := param.Integer() if count <= 0 { return pongo2.AsValue(""), nil } sentencens := filterTruncatesentencesRe.FindAllString(strings.TrimSpace(in.String()), -1) return pongo2.AsValue(strings.TrimSpace(strings.Join(sentencens[:min(count, len(sentencens))], ""))), nil }
func filterTruncatesentencesHtml(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) { count := param.Integer() if count <= 0 { return pongo2.AsValue(""), nil } value := in.String() newLen := max(param.Integer(), 0) new_output := bytes.NewBuffer(nil) sentencefilter := 0 filterTruncateHtmlHelper(value, new_output, func() bool { return sentencefilter >= newLen }, func(_ rune, _ int, idx int) int { // Get next word word_found := false for idx < len(value) { c2, size2 := utf8.DecodeRuneInString(value[idx:]) if c2 == utf8.RuneError { idx += size2 continue } if c2 == '<' { // HTML tag start, don't consume it return idx } new_output.WriteRune(c2) idx += size2 if (c2 == '.' && !(idx+1 < len(value) && value[idx+1] >= '0' && value[idx+1] <= '9')) || c2 == '!' || c2 == '?' || c2 == '\n' { // Sentence ends here, stop capturing it now break } else { word_found = true } } if word_found { sentencefilter++ } return idx }, func() {}) return pongo2.AsSafeValue(new_output.String()), nil }
func filterFilesizeformat(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) { return pongo2.AsValue(humanize.IBytes(uint64(in.Integer()))), nil }
func filterOrdinal(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) { return pongo2.AsValue(humanize.Ordinal(in.Integer())), nil }
func filterIntcomma(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) { return pongo2.AsValue(humanize.Comma(int64(in.Integer()))), nil }