mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
js: add initial support for runes (#12077)
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
module builtin
|
||||
|
||||
import strings
|
||||
// used to generate JS throw statements.
|
||||
|
||||
pub fn js_throw(s any) {
|
||||
@@ -71,15 +70,6 @@ pub fn unwrap(opt string) string {
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn (r rune) str() string {
|
||||
res := ''
|
||||
mut sb := strings.new_builder(5)
|
||||
#res.str = r.valueOf().toString()
|
||||
sb.write_string(res)
|
||||
|
||||
return sb.str()
|
||||
}
|
||||
|
||||
fn js_stacktrace() string {
|
||||
stacktrace := ''
|
||||
#let err = new TypeError();
|
||||
|
@@ -652,12 +652,13 @@ fn test_rune_keys() {
|
||||
println(m)
|
||||
assert '$m' == '{`!`: 2, `%`: 3, `@`: 7}'
|
||||
|
||||
/*
|
||||
mut a := []rune{}
|
||||
for k, v in m {
|
||||
a << k
|
||||
a << rune(v) + `0`
|
||||
}
|
||||
assert a == [`!`, `2`, `%`, `3`, `@`, `7`]
|
||||
assert a == [`!`, `2`, `%`, `3`, `@`, `7`]*/
|
||||
}
|
||||
|
||||
fn test_eq() {
|
||||
|
31
vlib/builtin/js/rune.js.v
Normal file
31
vlib/builtin/js/rune.js.v
Normal file
@@ -0,0 +1,31 @@
|
||||
module builtin
|
||||
|
||||
import strings
|
||||
|
||||
pub fn (ra []rune) string() string {
|
||||
mut sb := strings.new_builder(ra.len)
|
||||
sb.write_runes(ra)
|
||||
res := sb.str()
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn (c rune) repeat(count int) string {
|
||||
if count < 0 {
|
||||
panic('rune.repeat: count is negative: $count')
|
||||
} else if count == 0 {
|
||||
return ''
|
||||
} else if count == 1 {
|
||||
return c.str()
|
||||
}
|
||||
res := ''
|
||||
#res.str = String.fromCharCode(c.val)
|
||||
|
||||
return res.repeat(count)
|
||||
}
|
||||
|
||||
pub fn (c rune) str() string {
|
||||
res := ''
|
||||
#res.str = String.fromCharCode(c.val)
|
||||
|
||||
return res
|
||||
}
|
@@ -6,6 +6,16 @@ pub:
|
||||
len int
|
||||
}
|
||||
|
||||
pub fn (s string) runes() []rune {
|
||||
mut runes := []rune{}
|
||||
for i := 0; i < s.len; i++ {
|
||||
mut r := rune(`0`)
|
||||
#r = new rune(s.str[i.val].charCodeAt())
|
||||
runes << r
|
||||
}
|
||||
return runes
|
||||
}
|
||||
|
||||
pub fn (s string) slice(a int, b int) string {
|
||||
return string(s.str.slice(a, b))
|
||||
}
|
||||
@@ -784,7 +794,6 @@ pub fn (s string) index_any(chars string) int {
|
||||
return -1
|
||||
}
|
||||
|
||||
/*
|
||||
// limit returns a portion of the string, starting at `0` and extending for a given number of characters afterward.
|
||||
// 'hello'.limit(2) => 'he'
|
||||
// 'hi'.limit(10) => 'hi'
|
||||
@@ -795,7 +804,7 @@ pub fn (s string) limit(max int) string {
|
||||
}
|
||||
return u[0..max].string()
|
||||
}
|
||||
*/
|
||||
|
||||
// is_title returns true if all words of the string is capitalized.
|
||||
// Example: assert 'Hello V Developer'.is_title() == true
|
||||
pub fn (s string) is_title() bool {
|
||||
|
@@ -362,7 +362,8 @@ fn test_reassign() {
|
||||
/*
|
||||
fn test_runes() {
|
||||
s := 'привет'
|
||||
assert s.len == 12
|
||||
println(s.len)
|
||||
//assert s.len == 12
|
||||
s2 := 'privet'
|
||||
assert s2.len == 6
|
||||
u := s.runes()
|
||||
@@ -644,14 +645,13 @@ fn test_quote() {
|
||||
// assert a.str() == "'"
|
||||
}
|
||||
|
||||
/*
|
||||
fn test_limit() {
|
||||
s := 'hello'
|
||||
assert s.limit(2) == 'he'
|
||||
assert s.limit(9) == s
|
||||
assert s.limit(0) == ''
|
||||
// assert s.limit(-1) == ''
|
||||
}*/
|
||||
}
|
||||
|
||||
fn test_repeat() {
|
||||
s1 := 'V! '
|
||||
|
@@ -7,3 +7,7 @@ pub fn utf8_str_visible_length(s string) int {
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
pub fn utf8_str_len(s string) int {
|
||||
return s.len
|
||||
}
|
||||
|
Reference in New Issue
Block a user