-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Labels
Description
easygen builtin functions
Lines 29 to 103 in 60daafd
| // EgBase -- EasyGen Template Base | |
| /* | |
| stringsCompare is wrapper for strings.Compare | |
| stringsContains is wrapper for strings.Contains | |
| stringsContainsAny is wrapper for strings.ContainsAny | |
| stringsContainsRune is wrapper for strings.ContainsRune | |
| stringsCount is wrapper for strings.Count | |
| stringsEqualFold is wrapper for strings.EqualFold | |
| stringsFields is wrapper for strings.Fields | |
| stringsFieldsFunc is wrapper for strings.FieldsFunc | |
| stringsHasPrefix is wrapper for strings.HasPrefix | |
| stringsHasSuffix is wrapper for strings.HasSuffix | |
| stringsIndex is wrapper for strings.Index | |
| stringsIndexAny is wrapper for strings.IndexAny | |
| stringsIndexByte is wrapper for strings.IndexByte | |
| stringsIndexFunc is wrapper for strings.IndexFunc | |
| stringsIndexRune is wrapper for strings.IndexRune | |
| stringsJoin is wrapper for strings.Join | |
| stringsLastIndex is wrapper for strings.LastIndex | |
| stringsLastIndexAny is wrapper for strings.LastIndexAny | |
| stringsLastIndexByte is wrapper for strings.LastIndexByte | |
| stringsLastIndexFunc is wrapper for strings.LastIndexFunc | |
| stringsMap is wrapper for strings.Map | |
| stringsRepeat is wrapper for strings.Repeat | |
| stringsReplace is wrapper for strings.Replace | |
| stringsSplit is wrapper for strings.Split | |
| stringsSplitAfter is wrapper for strings.SplitAfter | |
| stringsSplitAfterN is wrapper for strings.SplitAfterN | |
| stringsSplitN is wrapper for strings.SplitN | |
| stringsTitle is wrapper for strings.Title | |
| stringsToLower is wrapper for strings.ToLower | |
| stringsToLowerSpecial is wrapper for strings.ToLowerSpecial | |
| stringsToTitle is wrapper for strings.ToTitle | |
| stringsToTitleSpecial is wrapper for strings.ToTitleSpecial | |
| stringsToUpper is wrapper for strings.ToUpper | |
| stringsToUpperSpecial is wrapper for strings.ToUpperSpecial | |
| stringsTrim is wrapper for strings.Trim | |
| stringsTrimFunc is wrapper for strings.TrimFunc | |
| stringsTrimLeft is wrapper for strings.TrimLeft | |
| stringsTrimLeftFunc is wrapper for strings.TrimLeftFunc | |
| stringsTrimPrefix is wrapper for strings.TrimPrefix | |
| stringsTrimRight is wrapper for strings.TrimRight | |
| stringsTrimRightFunc is wrapper for strings.TrimRightFunc | |
| stringsTrimSpace is wrapper for strings.TrimSpace | |
| stringsTrimSuffix is wrapper for strings.TrimSuffix | |
| eqf is wrapper for strings.EqualFold | |
| split is wrapper for strings.Fields | |
| sprintf is wrapper for fmt.Sprintf | |
| regexpFindAllString is template function for RegexpFindAllString | |
| regexpFindAllStringIndex is template function for RegexpFindAllStringIndex | |
| regexpFindAllStringSubmatch is template function for RegexpFindAllStringSubmatch | |
| regexpFindAllStringSubmatchIndex is template function for RegexpFindAllStringSubmatchIndex | |
| regexpFindString is template function for RegexpFindString | |
| regexpFindStringIndex is template function for RegexpFindStringIndex | |
| regexpFindStringSubmatch is template function for RegexpFindStringSubmatch | |
| regexpFindStringSubmatchIndex is template function for RegexpFindStringSubmatchIndex | |
| regexpMatchString is template function for RegexpMatchString | |
| regexpReplaceAllLiteralString is template function for RegexpReplaceAllLiteralString | |
| regexpReplaceAllString is template function for RegexpReplaceAllString | |
| regexpReplaceAllStringFunc is template function for RegexpReplaceAllStringFunc | |
| regexpSplit is template function for RegexpSplit | |
| ENV is template function for os.Getenv | |
| substr is template function for Substr | |
| coalesce is template function for Coalesce | |
| quote4shell is template function for Quote4shell | |
| minus1 is template function for Minus1 | |
| date is template function for Date | |
| timestamp is template function for Timestamp | |
| */ |
Lines 35 to 219 in 23ee694
| // == standard strings functions | |
| { | |
| `{{ stringsContains "seafood" "foo" }}`, | |
| "true", | |
| }, | |
| { | |
| `{{ stringsContains "seafood" "bar" }}`, | |
| "false", | |
| }, | |
| { | |
| `{{ stringsContainsAny "team" "i" }}`, | |
| "false", | |
| }, | |
| { | |
| `{{ stringsContainsAny "failure" "u & i" }}`, | |
| "true", | |
| }, | |
| { | |
| `{{ stringsCount "cheese" "e" }}`, | |
| "3", | |
| }, | |
| { | |
| `{{ stringsEqualFold "Go" "go" }}`, | |
| "true", | |
| }, | |
| { | |
| `{{ stringsFields " foo bar baz " }}`, | |
| "[foo bar baz]", | |
| }, | |
| { | |
| `{{ stringsIndex "go gopher" "go" }}`, | |
| "0", | |
| }, | |
| { | |
| `{{ stringsLastIndex "go gopher" "go" }}`, | |
| "3", | |
| }, | |
| { | |
| `ba{{ stringsRepeat "na" 2 }}`, | |
| "banana", | |
| }, | |
| { | |
| `{{ stringsReplace "oink oink oink" "k" "ky" 2 }}`, | |
| "oinky oinky oink", | |
| }, | |
| { | |
| `{{ stringsReplace "oink oink oink" "oink" "moo" -1 }}`, | |
| "moo moo moo", | |
| }, | |
| { | |
| `{{ stringsSplitN "a,b,c" "," 0 }}`, | |
| `[]`, | |
| }, | |
| { | |
| `{{ stringsSplitAfter "a,b,c" "," }}`, | |
| `[a, b, c]`, | |
| }, | |
| { | |
| `{{ stringsSplitAfterN "a,b,c" "," 2 }}`, | |
| `[a, b,c]`, | |
| }, | |
| { | |
| `{{ stringsTitle "her royal highness" }}`, | |
| "Her Royal Highness", | |
| }, | |
| { | |
| `{{ stringsToLower "Gopher" }}`, | |
| "gopher", | |
| }, | |
| { | |
| `{{ stringsToUpper "Gopher" }}`, | |
| "GOPHER", | |
| }, | |
| { | |
| `{{ stringsTrimSpace " \t\n a lone gopher \n\t\r\n" }}`, | |
| "a lone gopher", | |
| }, | |
| { | |
| `{{ stringsTrim " !!! Achtung !!! " "! " }}`, | |
| "Achtung", | |
| }, | |
| { | |
| `{{ stringsTrimPrefix "Goodbye,, world!" "Goodbye," }}`, | |
| ", world!", | |
| }, | |
| { | |
| `{{ stringsTrimSuffix "Hello, goodbye, etc!" "goodbye, etc!" }}`, | |
| "Hello, ", | |
| }, | |
| // aliases | |
| { | |
| `The {{if eq .StrTest "these rights belong to those people"}}eq says Yea{{else}}eq says Nay{{end}} but {{if eqf .StrTest "these rights belong to those people"}}eqf says Yea{{else}}eqf says Nay{{end}}.`, | |
| "The eq says Nay but eqf says Yea.", | |
| }, | |
| { | |
| `{{$s := sprintf .StrTest}} {{$s}}`, | |
| " These rights belong to those people", | |
| }, | |
| { | |
| `{{$s := sprintf "%s, %.2f" .StrTest 12.3456}} {{$s}}`, | |
| " These rights belong to those people, 12.35", | |
| }, | |
| // == standard regexp functions | |
| { | |
| `{{ regexpFindString "peach punch" "p([a-z]+)ch" }}`, | |
| "peach", | |
| }, | |
| { | |
| `{{ regexpFindAllString "peach punch" "p([a-z]+)ch" -1 }}`, | |
| "[peach punch]", | |
| }, | |
| { | |
| `{{ regexpFindAllString "peach punch" "p([a-z]+)ch" 1 }}`, | |
| "[peach]", | |
| }, | |
| { | |
| `{{ regexpFindStringIndex "peach punch" "p([a-z]+)ch" }}`, | |
| "[0 5]", | |
| }, | |
| { | |
| `{{ regexpFindStringSubmatch "peach punch" "p([a-z]+)ch" }}`, | |
| "[peach ea]", | |
| }, | |
| { | |
| `{{ regexpFindStringSubmatchIndex "peach punch" "p([a-z]+)ch" }}`, | |
| "[0 5 1 3]", | |
| }, | |
| // | |
| { | |
| `{{ regexpMatchString "HTTPS://site/" "(?i)^http" }}`, | |
| "true", | |
| }, | |
| // | |
| { | |
| `{{ regexpReplaceAllLiteralString "html HTML Html aa uml bb Uml" "(?i)html|uml" "XML" }}`, | |
| "XML XML XML aa XML bb XML", | |
| }, | |
| { | |
| `{{ regexpReplaceAllString .StrTest "(?i)th[eo]se" "the" }}`, | |
| "the rights belong to the people", | |
| }, | |
| { | |
| `{{ regexpReplaceAllString "This and these are for THOSE people" "(?i)(this|th[eo]se)" "<b>${1}</b>" }}`, | |
| "<b>This</b> and <b>these</b> are for <b>THOSE</b> people", | |
| }, | |
| // { | |
| // `{{ regexpReplaceAllStringFunc "a peach" "p([a-z]+)ch" stringsToUpper }}`, | |
| // "a PEACH", | |
| // }, | |
| // == my added strings functions | |
| { | |
| `{{ coalesce "a" }}`, | |
| "a", | |
| }, | |
| { | |
| `{{ coalesce "" "b" }}`, | |
| "b", | |
| }, | |
| { | |
| `{{ coalesce "" "" "c" }}`, | |
| "c", | |
| }, | |
| { | |
| `{{ coalesce "" "" "" "" }}`, | |
| "", | |
| }, | |
| { | |
| `{{ coalesce "" }}`, | |
| "", | |
| }, | |
| { | |
| `{{ coalesce .StrTest "Something else" }}`, | |
| "These rights belong to those people", | |
| }, | |
| { | |
| `{{ coalesce .StrEmpty "Something else" }}`, | |
| "Something else", | |
| }, | |
| // NOK! The following will failed the template.Execute | |
| // before the coalesce function can do anything | |
| // { | |
| // `{{ coalesce .StrNone "Not exist" }}`, | |
| // "Not exist", | |
| // }, |
egVar builtin functions
Notes:
Lines 32 to 40 in 5fd01ce
| ls - LowerSnakeCase: lower_snake_case | |
| ss - ScreamingSnakeCase: SCREAMING_SNAKE_CASE | |
| lk - KebabCase: kebab-case | |
| ScreamingKebabCase: SCREAMING-KEBAB-CASE | |
| hh - HttpHeaderCase: HTTP-Header-Case | |
| UpperCamelCase: UpperCamelCase (renders HTTP as Http) | |
| LowerCamelCase: lowerCamelCase (renders HTTP as Http) | |
| uc - UpperCamelCaseKeepCaps: UpperCamelCaseKeepCaps (renders HTTP as HTTP) | |
| lc - LowerCamelCaseKeepCaps: lowerCamelCaseKeepCaps (renders HTTP as hTTP) |
Functions
Lines 90 to 118 in 5fd01ce
| "cls2lc": cls2lc.String, | |
| "cls2uc": cls2uc.String, | |
| "cls2ss": cls2ss.String, | |
| "cls2lk": cls2lk.String, | |
| "cls2hh": cls2hh.String, | |
| "css2lc": css2lc.String, | |
| "css2uc": css2uc.String, | |
| "css2ls": css2ls.String, | |
| "css2lk": css2lk.String, | |
| "css2hh": css2hh.String, | |
| "clk2lc": clk2lc.String, | |
| "clk2uc": clk2uc.String, | |
| "clk2ls": clk2ls.String, | |
| "clk2ss": clk2ss.String, | |
| "clc2uc": clc2uc.String, | |
| "clc2ls": clc2ls.String, | |
| "clc2ss": clc2ss.String, | |
| "cuc2lc": cuc2lc.String, | |
| "cuc2ls": cuc2ls.String, | |
| "cuc2ss": cuc2ss.String, | |
| // Aliases, for backwards-compatibility with earlier (>= v1) versions | |
| "ck2lc": clk2lc.String, | |
| "ck2uc": clk2uc.String, | |
| "ck2ls": clk2ls.String, | |
| "ck2ss": clk2ss.String, |
Examples
Lines 16 to 80 in 5fd01ce
| fmt.Println("\n## From lk - KebabCase => CamelCase/SnakeCase") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{.Name}}: {{clk2lc .Name}} {{clk2uc .Name}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{.Name}}: {{clk2ls .Name}} {{clk2ss .Name}}\n", "../test/listfunc2") | |
| fmt.Println("\n## From ls/ss - LowerSnakeCase/ScreamingSnakeCase") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{clk2ls .Name}} {{clk2ss .Name}} =>\n", "../test/listfunc2") | |
| fmt.Println("### From ls") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ls .Name | cls2lc}} {{clk2ls .Name | cls2uc}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ls .Name | cls2ss}} {{clk2ls .Name | cls2lk}} {{clk2ls .Name | cls2hh}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ls .NameHTTP | cls2lc}} {{clk2ls .NameHTTP | cls2uc}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ls .NameHTTP | cls2ss}} {{clk2ls .NameHTTP | cls2lk}} {{clk2ls .NameHTTP | cls2hh}}\n", "../test/listfunc2") | |
| fmt.Println("### From ss") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ss .Name | css2lc}} {{clk2ss .Name | css2uc}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ss .Name | css2ls}} {{clk2ss .Name | css2lk}} {{clk2ss .Name | css2hh}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ss .NameHTTP | css2lc}} {{clk2ss .NameHTTP | css2uc}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| " {{clk2ss .NameHTTP | css2ls}} {{clk2ss .NameHTTP | css2lk}} {{clk2ss .NameHTTP | css2hh}}\n", "../test/listfunc2") | |
| fmt.Println("\n## From lc/uc - LowerCamelCase/UpperCamelCaseKeepCaps") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{clk2lc .Name}} {{clk2uc .Name}} =>\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{clk2lc .Name}}: {{clk2lc .Name | clc2uc}} {{clk2lc .Name | clc2ls}} {{clk2lc .Name | clc2ss}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{clk2uc .Name}}: {{clk2uc .Name | cuc2lc}} {{clk2uc .Name | cuc2ls}} {{clk2uc .Name | cuc2ss}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{.NameMixed}}: {{clc2uc .NameMixed}} {{clc2uc .NameMixed | cuc2lc}} {{clc2ls .NameMixed}} {{clc2ls .NameMixed | cls2lc}}\n", "../test/listfunc2") | |
| easygen.Process0(tmpl, os.Stdout, | |
| "{{.NameMixed}}: {{clc2ls .NameMixed | cls2ss}} {{clc2ls .NameMixed | cls2lk}} {{clc2ls .NameMixed | cls2hh}}\n", "../test/listfunc2") | |
| // Output: | |
| // | |
| // ## From lk - KebabCase => CamelCase/SnakeCase | |
| // some-init-method: someInitMethod SomeInitMethod | |
| // some-init-method: some_init_method SOME_INIT_METHOD | |
| // | |
| // ## From ls/ss - LowerSnakeCase/ScreamingSnakeCase | |
| // some_init_method SOME_INIT_METHOD => | |
| // ### From ls | |
| // someInitMethod SomeInitMethod | |
| // SOME_INIT_METHOD some-init-method Some-Init-Method | |
| // httpHeaderCase HttpHeaderCase | |
| // HTTP_HEADER_CASE http-header-case HTTP-Header-Case | |
| // ### From ss | |
| // someINITMETHOD SOMEINITMETHOD | |
| // some_init_method some-init-method Some-Init-Method | |
| // httpHEADERCASE HTTPHEADERCASE | |
| // http_header_case http-header-case HTTP-Header-Case | |
| // | |
| // ## From lc/uc - LowerCamelCase/UpperCamelCaseKeepCaps | |
| // someInitMethod SomeInitMethod => | |
| // someInitMethod: SomeInitMethod some_init_method SOME_INIT_METHOD | |
| // SomeInitMethod: someInitMethod some_init_method SOME_INIT_METHOD | |
| // some_InitMethod: Some_InitMethod some_InitMethod some__init_method someInitMethod | |
| // some_InitMethod: SOME__INIT_METHOD some--init-method Some--Init-Method |
egFilePath builtin functions
easygen/egFilePath/EgFilePath.go
Lines 35 to 53 in eb5b6aa
| //"fpAbs": filepath.Abs, | |
| "fpBase": filepath.Base, | |
| "fpClean": filepath.Clean, | |
| "fpDir": filepath.Dir, | |
| //"fpEvalSymlinks": filepath.EvalSymlinks, | |
| "fpExt": filepath.Ext, | |
| "fpFromSlash": filepath.FromSlash, | |
| //"fpGlob": filepath.Glob, | |
| "fpHasPrefix": filepath.HasPrefix, | |
| "fpIsAbs": filepath.IsAbs, | |
| "fpJoin": filepath.Join, | |
| //"fpMatch": filepath.Match, | |
| "fpRel": filepath.Rel, | |
| //"fpSplit": filepath.Split, | |
| //"fpSplitList": filepath.SplitList, | |
| "fpToSlash": filepath.ToSlash, | |
| "fpVolumeName": filepath.VolumeName, | |
| "isDir": IsDir, | |
| "basename": Basename, |
Examples
easygen/egFilePath/example_test.go
Lines 17 to 34 in eb5b6aa
| "Base: {{fpBase `/a/b.c`}}, {{fpBase `/b.c/`}}, {{fpBase `./b.c`}}, {{fpBase `b.c`}}\n"+ | |
| "Clean: {{fpClean `/a//b.c/./..`}}, {{fpClean `//b.c///`}}, {{fpClean `/../b.c`}}\n"+ | |
| "Dir: {{fpDir `/a/b/c`}}, {{fpDir `/b/c/`}}, {{fpDir `./b/c`}}, {{fpDir `b.c`}}\n"+ | |
| "Ext: {{fpExt `index`}}, {{fpExt `index.js`}}, {{fpExt `main.test.js`}}\n"+ | |
| "Join: {{fpJoin `/a` `b` `c` `a//` `//b////c`}}, {{fpJoin `a` `b/c`}}, {{fpJoin `a/b` `c`}}\n"+ | |
| // "IsDir: {{isDir `.`}}, {{isDir `not-exist`}}.\n"+ | |
| "IsDir: {{isDir `.`}}.\n"+ | |
| "Basename: {{basename `/a/b.c`}}, {{basename `/b.c/`}}, {{basename `b.c`}}, {{basename `bc`}}", | |
| "../test/var0") | |
| // Output: | |
| // Base: b.c, b.c, b.c, b.c | |
| // Clean: /a, /b.c, /b.c | |
| // Dir: /a/b, /b/c, b, . | |
| // Ext: , .js, .js | |
| // Join: /a/b/c/a/b/c, a/b/c, a/b/c | |
| // IsDir: true. | |
| // Basename: b, b, b, bc |
egCal builtin calculation functions
Lines 24 to 27 in 5fd01ce
| "add": add, | |
| "subtract": subtract, | |
| "multiply": multiply, | |
| "divide": divide, |
Examples
Lines 16 to 23 in 5fd01ce
| easygen.Process0(tmpl, os.Stdout, | |
| "{{.Name}}: {{clk2uc .Name}} {{clk2ss .Name}}\n"+ | |
| "Cal: {{add 2 3}}, {{multiply 2 3}}, {{subtract 9 2}}, {{divide 24 3}}\n", | |
| "../test/var0") | |
| // Output: | |
| // some-init-method: SomeInitMethod SOME_INIT_METHOD | |
| // Cal: 5, 6, 7, 8 |