hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

inflect.go (2263B)

    1 // Copyright 2017 The Hugo Authors. All rights reserved.
    2 //
    3 // Licensed under the Apache License, Version 2.0 (the "License");
    4 // you may not use this file except in compliance with the License.
    5 // You may obtain a copy of the License at
    6 // http://www.apache.org/licenses/LICENSE-2.0
    7 //
    8 // Unless required by applicable law or agreed to in writing, software
    9 // distributed under the License is distributed on an "AS IS" BASIS,
   10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   11 // See the License for the specific language governing permissions and
   12 // limitations under the License.
   13 
   14 // Package inflect provides template functions for the inflection of words.
   15 package inflect
   16 
   17 import (
   18 	"strconv"
   19 	"strings"
   20 
   21 	_inflect "github.com/gobuffalo/flect"
   22 	"github.com/spf13/cast"
   23 )
   24 
   25 // New returns a new instance of the inflect-namespaced template functions.
   26 func New() *Namespace {
   27 	return &Namespace{}
   28 }
   29 
   30 // Namespace provides template functions for the "inflect" namespace.
   31 type Namespace struct{}
   32 
   33 // Humanize returns the humanized form of a single parameter.
   34 //
   35 // If the parameter is either an integer or a string containing an integer
   36 // value, the behavior is to add the appropriate ordinal.
   37 //
   38 //     Example:  "my-first-post" -> "My first post"
   39 //     Example:  "103" -> "103rd"
   40 //     Example:  52 -> "52nd"
   41 func (ns *Namespace) Humanize(in any) (string, error) {
   42 	word, err := cast.ToStringE(in)
   43 	if err != nil {
   44 		return "", err
   45 	}
   46 
   47 	if word == "" {
   48 		return "", nil
   49 	}
   50 
   51 	_, ok := in.(int)           // original param was literal int value
   52 	_, err = strconv.Atoi(word) // original param was string containing an int value
   53 	if ok || err == nil {
   54 		return _inflect.Ordinalize(word), nil
   55 	}
   56 
   57 	str := _inflect.Humanize(word)
   58 	return _inflect.Humanize(strings.ToLower(str)), nil
   59 }
   60 
   61 // Pluralize returns the plural form of a single word.
   62 func (ns *Namespace) Pluralize(in any) (string, error) {
   63 	word, err := cast.ToStringE(in)
   64 	if err != nil {
   65 		return "", err
   66 	}
   67 
   68 	return _inflect.Pluralize(word), nil
   69 }
   70 
   71 // Singularize returns the singular form of a single word.
   72 func (ns *Namespace) Singularize(in any) (string, error) {
   73 	word, err := cast.ToStringE(in)
   74 	if err != nil {
   75 		return "", err
   76 	}
   77 
   78 	return _inflect.Singularize(word), nil
   79 }