Expose vCard 4 SORT-AS and CALSCALE

This commit is contained in:
2026-03-28 21:36:26 -05:00
parent 45ec8efc8a
commit 04392ac203

View File

@@ -389,6 +389,12 @@ func asComponentList(value: string): seq[string] =
else: else:
@[] @[]
func normalizeStructuredParamValues(values: seq[string]): seq[string] =
if values.len == 1 and values[0].contains(","):
values[0].split(",")
else:
values
proc parseDateAndOrTime[T]( proc parseDateAndOrTime[T](
prop: var T, prop: var T,
value: string value: string
@@ -583,11 +589,13 @@ macro genDateTimeOrTextPropInitializers(
let datetimeFuncDef = genAstOpt({kDirtyTemplate}, enumName, initFuncName, typeName): let datetimeFuncDef = genAstOpt({kDirtyTemplate}, enumName, initFuncName, typeName):
func initFuncName*( func initFuncName*(
value: DateTime, value: DateTime,
calscale: Option[string] = none[string](),
altId: Option[string] = none[string](), altId: Option[string] = none[string](),
group: Option[string] = none[string](), group: Option[string] = none[string](),
params: seq[VC_Param] = @[]): typeName = params: seq[VC_Param] = @[]): typeName =
return typeName( return typeName(
params: flattenParameters(params, params: flattenParameters(params,
("CALSCALE", if calscale.isSome: @[calscale.get] else: @[]),
("ALTID", if altId.isSome: @[altId.get] else: @[])), ("ALTID", if altId.isSome: @[altId.get] else: @[])),
group: group, group: group,
value: value.format(TIMESTAMP_FORMATS[0]), value: value.format(TIMESTAMP_FORMATS[0]),
@@ -604,11 +612,13 @@ macro genDateTimeOrTextPropInitializers(
proc initFuncName*( proc initFuncName*(
value: string, value: string,
valueType: Option[string] = some($vtDateAndOrTime), valueType: Option[string] = some($vtDateAndOrTime),
calscale: Option[string] = none[string](),
altId: Option[string] = none[string](), altId: Option[string] = none[string](),
group: Option[string] = none[string](), group: Option[string] = none[string](),
params: seq[VC_Param] = @[]): typeName = params: seq[VC_Param] = @[]): typeName =
result = typeName( result = typeName(
params: flattenParameters(params, params: flattenParameters(params,
("CALSCALE", if calscale.isSome: @[calscale.get] else: @[]),
("ALTID", if altId.isSome: @[altId.get] else: @[]), ("ALTID", if altId.isSome: @[altId.get] else: @[]),
("VALUE", ("VALUE",
if valueType.isSome and valueType.get == $vtText: @[$vtText] if valueType.isSome and valueType.get == $vtText: @[$vtText]
@@ -740,12 +750,14 @@ func newVC4_N*(
additional: seq[string] = @[], additional: seq[string] = @[],
prefixes: seq[string] = @[], prefixes: seq[string] = @[],
suffixes: seq[string] = @[], suffixes: seq[string] = @[],
sortAs: seq[string] = @[],
altId: Option[string] = none[string](), altId: Option[string] = none[string](),
group: Option[string] = none[string](), group: Option[string] = none[string](),
params: seq[VC_Param] = @[]): VC4_N = params: seq[VC_Param] = @[]): VC4_N =
return assignFields( return assignFields(
VC4_N(params: flattenParameters(params, VC4_N(params: flattenParameters(params,
("SORT-AS", sortAs),
("ALTID", if altId.isSome: @[altId.get] else: @[]))), ("ALTID", if altId.isSome: @[altId.get] else: @[]))),
group, family, given, additional, prefixes, suffixes) group, family, given, additional, prefixes, suffixes)
@@ -763,6 +775,7 @@ func newVC4_Gender*(
func newVC4_Org*( func newVC4_Org*(
value: seq[string], value: seq[string],
sortAs: seq[string] = @[],
altId: Option[string] = none[string](), altId: Option[string] = none[string](),
group: Option[string] = none[string](), group: Option[string] = none[string](),
language: Option[string] = none[string](), language: Option[string] = none[string](),
@@ -776,6 +789,7 @@ func newVC4_Org*(
return assignFields( return assignFields(
VC4_Org(params: flattenParameters(params, VC4_Org(params: flattenParameters(params,
("SORT-AS", sortAs),
("ALTID", if altId.isSome: @[altId.get] else: @[]), ("ALTID", if altId.isSome: @[altId.get] else: @[]),
("LANGUAGE", if language.isSome: @[language.get] else: @[]), ("LANGUAGE", if language.isSome: @[language.get] else: @[]),
("PID", pids --> map($it)), ("PID", pids --> map($it)),
@@ -785,6 +799,7 @@ func newVC4_Org*(
func newVC4_Org*( func newVC4_Org*(
value: string, value: string,
sortAs: seq[string] = @[],
altId: Option[string] = none[string](), altId: Option[string] = none[string](),
group: Option[string] = none[string](), group: Option[string] = none[string](),
language: Option[string] = none[string](), language: Option[string] = none[string](),
@@ -795,6 +810,7 @@ func newVC4_Org*(
return newVC4_Org( return newVC4_Org(
value = asComponentList(value), value = asComponentList(value),
sortAs = sortAs,
altId = altId, altId = altId,
group = group, group = group,
language = language, language = language,
@@ -1034,6 +1050,23 @@ func altId*(p: VC4_Property): Option[string] =
func valueType*(p: VC4_Property): Option[string] = func valueType*(p: VC4_Property): Option[string] =
p.params.getSingleValue("VALUE") p.params.getSingleValue("VALUE")
func calscale*(prop: VC4_DateTimeOrTextProperty): Option[string] =
prop.params.getSingleValue("CALSCALE")
func sortAs*(prop: VC4_N): seq[string] =
let sortAsParam = prop.params --> find(it.name == "SORT-AS")
if sortAsParam.isSome:
normalizeStructuredParamValues(sortAsParam.get.values)
else:
@[]
func sortAs*(prop: VC4_Org): seq[string] =
let sortAsParam = prop.params --> find(it.name == "SORT-AS")
if sortAsParam.isSome:
normalizeStructuredParamValues(sortAsParam.get.values)
else:
@[]
func geo*(prop: VC4_Adr): Option[string] = func geo*(prop: VC4_Adr): Option[string] =
prop.params.getSingleValue("GEO") prop.params.getSingleValue("GEO")