Skip to content

Commit 4324622

Browse files
committed
This closes qax-os#2058, support apply number format with hash and zero place holder
- Update unit tests - Disable blank issue creation
1 parent b19e594 commit 4324622

File tree

3 files changed

+39
-19
lines changed

3 files changed

+39
-19
lines changed

.github/ISSUE_TEMPLATE/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
blank_issues_enabled: false

numfmt.go

+34-16
Original file line numberDiff line numberDiff line change
@@ -4962,37 +4962,54 @@ func (nf *numberFormat) getNumberFmtConf() {
49624962
}
49634963
}
49644964

4965+
// handleDigitsLiteral apply hash and zero place holder tokens for the number
4966+
// literal.
4967+
func handleDigitsLiteral(text string, tokenValueLen, intPartLen, hashZeroPartLen int) (int, string) {
4968+
var result string
4969+
l := tokenValueLen
4970+
if intPartLen == 0 && len(text) > hashZeroPartLen {
4971+
l = len(text) + tokenValueLen - hashZeroPartLen
4972+
}
4973+
if len(text) < hashZeroPartLen {
4974+
intPartLen += len(text) - hashZeroPartLen
4975+
}
4976+
for i := 0; i < l; i++ {
4977+
j := i + intPartLen
4978+
if 0 <= j && j < len([]rune(text)) {
4979+
result += string([]rune(text)[j])
4980+
}
4981+
}
4982+
return l, result
4983+
}
4984+
49654985
// printNumberLiteral apply literal tokens for the pre-formatted text.
49664986
func (nf *numberFormat) printNumberLiteral(text string) string {
49674987
var (
4968-
result string
4969-
frac float64
4970-
useFraction, useLiteral, usePlaceHolder bool
4988+
result string
4989+
frac float64
4990+
useFraction bool
4991+
intPartLen, hashZeroPartLen int
49714992
)
49724993
if nf.usePositive {
49734994
result += "-"
49744995
}
4996+
for _, token := range nf.section[nf.sectionIdx].Items {
4997+
if token.TType == nfp.TokenTypeHashPlaceHolder || token.TType == nfp.TokenTypeZeroPlaceHolder {
4998+
hashZeroPartLen += len(token.TValue)
4999+
}
5000+
}
49755001
for _, token := range nf.section[nf.sectionIdx].Items {
49765002
if token.TType == nfp.TokenTypeCurrencyLanguage {
4977-
if changeNumFmtCode, err := nf.currencyLanguageHandler(token); err != nil || changeNumFmtCode {
4978-
return nf.value
4979-
}
5003+
_, _ = nf.currencyLanguageHandler(token)
49805004
result += nf.currencyString
49815005
}
49825006
if token.TType == nfp.TokenTypeLiteral {
4983-
if usePlaceHolder {
4984-
useLiteral = true
4985-
}
49865007
result += token.TValue
49875008
}
49885009
if token.TType == nfp.TokenTypeHashPlaceHolder || token.TType == nfp.TokenTypeZeroPlaceHolder {
4989-
if useLiteral && usePlaceHolder {
4990-
return nf.value
4991-
}
4992-
if !usePlaceHolder {
4993-
usePlaceHolder = true
4994-
result += text
4995-
}
5010+
digits, str := handleDigitsLiteral(text, len(token.TValue), intPartLen, hashZeroPartLen)
5011+
intPartLen += digits
5012+
result += str
49965013
}
49975014
if token.TType == nfp.TokenTypeFraction {
49985015
_, frac = math.Modf(nf.number)
@@ -5257,6 +5274,7 @@ func (nf *numberFormat) currencyLanguageHandler(token nfp.Token) (bool, error) {
52575274
}
52585275
if part.Token.TType == nfp.TokenSubTypeCurrencyString {
52595276
nf.currencyString = part.Token.TValue
5277+
return false, nil
52605278
}
52615279
}
52625280
return false, nil

numfmt_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -3631,10 +3631,12 @@ func TestNumFmt(t *testing.T) {
36313631
{"-123.4567", "#\\ ?/100", "-123 46/100"},
36323632
{"123.4567", "#\\ ?/1000", "123 457/1000"},
36333633
{"1234.5678", "[$$-409]#,##0.00", "$1,234.57"},
3634+
{"123", "[$x.-unknown]#,##0.00", "x.123.00"},
3635+
{"123", "[$x.-unknown]MM/DD/YYYY", "x.05/02/1900"},
3636+
{"1234.5678", "0.0xxx00", "1234.5xxx68"},
3637+
{"80145.899999999994", "[$¥-8004]\" \"#\" \"####\"\"", "¥ 8 0146"},
36343638
// Unsupported number format
36353639
{"37947.7500001", "0.00000000E+000", "37947.7500001"},
3636-
{"123", "[$x.-unknown]#,##0.00", "123"},
3637-
{"123", "[$x.-unknown]MM/DD/YYYY", "123"},
36383640
{"123", "[DBNum4][$-804]yyyy\"\"m\"\";@", "123"},
36393641
// Invalid number format
36403642
{"123", "x0.00s", "123"},
@@ -3646,7 +3648,6 @@ func TestNumFmt(t *testing.T) {
36463648
{"-1234.5678", ";E+;", "-1234.5678"},
36473649
{"1234.5678", "E+;", "1234.5678"},
36483650
{"1234.5678", "00000.00###s", "1234.5678"},
3649-
{"1234.5678", "0.0xxx00", "1234.5678"},
36503651
{"-1234.5678", "00000.00###;s;", "-1234.5678"},
36513652
} {
36523653
result := format(item[0], item[1], false, CellTypeNumber, nil)

0 commit comments

Comments
 (0)