// Copyright © 2014 Steve Francia . // // Licensed under the Simple Public 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://opensource.org/licenses/Simple-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 helpers implements general utility functions that work with and on content. The helper functions defined here //lay down the foundation of how Hugo works with files, filepaths and does string operations on content. package helpers import ( "bytes" "html/template" "os/exec" "github.com/russross/blackfriday" "github.com/spf13/viper" jww "github.com/spf13/jwalterweatherman" "strings" ) // Length of the summary that Hugo extracts from a content. var SummaryLength = 70 // Custom divider let's user define where summarization ends. var SummaryDivider = []byte("") //StripHTML accepts a string, strips out all HTML tags and returns it. func StripHTML(s string) string { output := "" // Shortcut strings with no tags in them if !strings.ContainsAny(s, "<>") { output = s } else { s = strings.Replace(s, "\n", " ", -1) s = strings.Replace(s, "

", "\n", -1) s = strings.Replace(s, "
", "\n", -1) s = strings.Replace(s, "
", "\n", -1) //
is the xhtml line break tag // Walk through the string removing all tags b := new(bytes.Buffer) inTag := false for _, r := range s { switch r { case '<': inTag = true case '>': inTag = false default: if !inTag { b.WriteRune(r) } } } output = b.String() } return output } // StripEmptyNav strips out empty