github.com/gotranspile/cxgo@v0.3.7/libs/ctype.go (about)

     1  package libs
     2  
     3  import (
     4  	"unicode"
     5  
     6  	"github.com/gotranspile/cxgo/runtime/libc"
     7  	"github.com/gotranspile/cxgo/types"
     8  )
     9  
    10  const (
    11  	ctypeH = "ctype.h"
    12  )
    13  
    14  func init() {
    15  	RegisterLibrary(ctypeH, func(c *Env) *Library {
    16  		runeT := c.Go().Rune()
    17  		boolT := c.Go().Bool()
    18  		isT := c.FuncTT(boolT, runeT)
    19  		toT := c.FuncTT(runeT, runeT)
    20  		return &Library{
    21  			Imports: map[string]string{
    22  				"libc":    RuntimeLibc,
    23  				"unicode": "unicode",
    24  			},
    25  			Idents: map[string]*types.Ident{
    26  				"isalnum": c.NewIdent("isalnum", "libc.IsAlnum", libc.IsAlnum, isT),
    27  				"isalpha": c.NewIdent("isalpha", "libc.IsAlpha", libc.IsAlpha, isT),
    28  				//"isascii": c.NewIdent("isascii", "libc.IsASCII", libc.IsASCII, isT),
    29  				"iscntrl": c.NewIdent("iscntrl", "unicode.IsControl", unicode.IsControl, isT),
    30  				"isdigit": c.NewIdent("isdigit", "unicode.IsDigit", unicode.IsDigit, isT),
    31  				"isgraph": c.NewIdent("isgraph", "unicode.IsGraphic", unicode.IsGraphic, isT),
    32  				"islower": c.NewIdent("islower", "unicode.IsLower", unicode.IsLower, isT),
    33  				"isprint": c.NewIdent("isprint", "unicode.IsPrint", unicode.IsPrint, isT),
    34  				"ispunct": c.NewIdent("ispunct", "unicode.IsPunct", unicode.IsPunct, isT),
    35  				"isspace": c.NewIdent("isspace", "unicode.IsSpace", unicode.IsSpace, isT),
    36  				"isupper": c.NewIdent("isupper", "unicode.IsUpper", unicode.IsUpper, isT),
    37  				//"isxdigit": c.NewIdent("isxdigit", "libc.IsXDigit", libc.IsXDigit, isT),
    38  				//"toascii": c.NewIdent("toascii", "libc.ToASCII", libc.ToASCII, toT),
    39  				"tolower": c.NewIdent("tolower", "unicode.ToLower", unicode.ToLower, toT),
    40  				"toupper": c.NewIdent("toupper", "unicode.ToUpper", unicode.ToUpper, toT),
    41  			},
    42  			// TODO
    43  			Header: `
    44  _cxgo_go_bool isalnum(_cxgo_go_rune);
    45  _cxgo_go_bool isalpha(_cxgo_go_rune);
    46  _cxgo_go_bool isascii(_cxgo_go_rune);
    47  _cxgo_go_bool iscntrl(_cxgo_go_rune);
    48  _cxgo_go_bool isdigit(_cxgo_go_rune);
    49  _cxgo_go_bool isgraph(_cxgo_go_rune);
    50  _cxgo_go_bool islower(_cxgo_go_rune);
    51  _cxgo_go_bool isprint(_cxgo_go_rune);
    52  _cxgo_go_bool ispunct(_cxgo_go_rune);
    53  _cxgo_go_bool isspace(_cxgo_go_rune);
    54  _cxgo_go_bool isupper(_cxgo_go_rune);
    55  _cxgo_go_bool isxdigit(_cxgo_go_rune);
    56  _cxgo_go_rune toascii(_cxgo_go_rune);
    57  _cxgo_go_rune tolower(_cxgo_go_rune);
    58  _cxgo_go_rune toupper(_cxgo_go_rune);
    59  `,
    60  		}
    61  	})
    62  }