Expose vCard 4 SORT-AS and CALSCALE
This commit is contained in:
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user