support center spec

This commit is contained in:
blueloveTH 2023-08-26 00:47:37 +08:00
parent 4811d9c4dc
commit 25cca8c58f
2 changed files with 27 additions and 5 deletions

View File

@ -405,7 +405,10 @@ PyObject* VM::format(Str spec, PyObject* obj){
}
}
char align;
if(spec[0] == '>'){
if(spec[0] == '^'){
align = '^';
spec = spec.substr(1);
}else if(spec[0] == '>'){
align = '>';
spec = spec.substr(1);
}else if(spec[0] == '<'){
@ -452,9 +455,17 @@ PyObject* VM::format(Str spec, PyObject* obj){
}
if(width != -1 && width > ret.length()){
int pad = width - ret.length();
std::string padding(pad, pad_c);
if(align == '>') ret = padding.c_str() + ret;
else ret = ret + padding.c_str();
if(align == '>' || align == '<'){
std::string padding(pad, pad_c);
if(align == '>') ret = padding.c_str() + ret;
else ret = ret + padding.c_str();
}else{ // ^
int pad_left = pad / 2;
int pad_right = pad - pad_left;
std::string padding_left(pad_left, pad_c);
std::string padding_right(pad_right, pad_c);
ret = padding_left.c_str() + ret + padding_right.c_str();
}
}
return VAR(ret);
}

View File

@ -35,6 +35,10 @@ assert f'{a:>10}' == ' 10'
assert f'{a:<10}' == '10 '
assert f'{a:<10.2f}' == '10.00 '
assert f'{a:>10.2f}' == ' 10.00'
assert f'{a:^10}' == ' 10 '
assert f'{a:^10.2f}' == ' 10.00 '
assert f'{a:3d}' == ' 10'
assert f'{a:10d}' == ' 10'
assert f'{a:1d}' == '10'
@ -60,4 +64,11 @@ assert f'{obj.b:10s}' == '123 '
a = [(1,2), 3, obj]
assert f'{a[0][1]}' == '2'
assert f'abc{a[-1].b:10}==={1234}' == 'abc123 ===1234'
assert f'abc{a[-1].b:10}==={1234}' == 'abc123 ===1234'
assert f'{"text":10}' == 'text '
assert f'{"test":*>10}' == '******test'
assert f'{"test":*<10}' == 'test******'
assert f'{"test":*^10}' == '***test***'
assert f'{"test":*^11}' == '***test****'
assert f'{12345:0>10}' == '0000012345'