Skip to content

Instantly share code, notes, and snippets.

@bdarcus
Created May 24, 2023 01:06
Show Gist options
  • Select an option

  • Save bdarcus/7688fa75f848f49e95118a1234c3647f to your computer and use it in GitHub Desktop.

Select an option

Save bdarcus/7688fa75f848f49e95118a1234c3647f to your computer and use it in GitHub Desktop.

Revisions

  1. bdarcus created this gist May 24, 2023.
    2,380 changes: 2,380 additions & 0 deletions csl-next-style.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,2380 @@
    // This file was generated from JSON Schema using quicktype, do not modify it directly.
    // To parse and unparse this JSON data, add this code to your project and do:
    //
    // localizationTerms, err := UnmarshalLocalizationTerms(bytes)
    // bytes, err = localizationTerms.Marshal()
    //
    // lang, err := UnmarshalLang(bytes)
    // bytes, err = lang.Marshal()
    //
    // localizedTermName, err := UnmarshalLocalizedTermName(bytes)
    // bytes, err = localizedTermName.Marshal()
    //
    // localizedTermNameMisc, err := UnmarshalLocalizedTermNameMisc(bytes)
    // bytes, err = localizedTermNameMisc.Marshal()
    //
    // localizedTermNameLocator, err := UnmarshalLocalizedTermNameLocator(bytes)
    // bytes, err = localizedTermNameLocator.Marshal()
    //
    // localizedTermNameLocatorNumber, err := UnmarshalLocalizedTermNameLocatorNumber(bytes)
    // bytes, err = localizedTermNameLocatorNumber.Marshal()
    //
    // localizedTermFormat, err := UnmarshalLocalizedTermFormat(bytes)
    // bytes, err = localizedTermFormat.Marshal()
    //
    // standaloneLocalize, err := UnmarshalStandaloneLocalize(bytes)
    // bytes, err = standaloneLocalize.Marshal()
    //
    // localizedTerm, err := UnmarshalLocalizedTerm(bytes)
    // bytes, err = localizedTerm.Marshal()
    //
    // optionsFile, err := UnmarshalOptionsFile(bytes)
    // bytes, err = optionsFile.Marshal()
    //
    // sortRules, err := UnmarshalSortRules(bytes)
    // bytes, err = sortRules.Marshal()
    //
    // groupSortKeys, err := UnmarshalGroupSortKeys(bytes)
    // bytes, err = groupSortKeys.Marshal()
    //
    // substitute, err := UnmarshalSubstitute(bytes)
    // bytes, err = substitute.Marshal()
    //
    // options, err := UnmarshalOptions(bytes)
    // bytes, err = options.Marshal()
    //
    // optionGroup, err := UnmarshalOptionGroup(bytes)
    // bytes, err = optionGroup.Marshal()
    //
    // localization, err := UnmarshalLocalization(bytes)
    // bytes, err = localization.Marshal()
    //
    // sortGroup, err := UnmarshalSortGroup(bytes)
    // bytes, err = sortGroup.Marshal()
    //
    // sortConfig, err := UnmarshalSortConfig(bytes)
    // bytes, err = sortConfig.Marshal()
    //
    // group, err := UnmarshalGroup(bytes)
    // bytes, err = group.Marshal()
    //
    // disambiguation, err := UnmarshalDisambiguation(bytes)
    // bytes, err = disambiguation.Marshal()
    //
    // substitution, err := UnmarshalSubstitution(bytes)
    // bytes, err = substitution.Marshal()
    //
    // dateFormatting, err := UnmarshalDateFormatting(bytes)
    // bytes, err = dateFormatting.Marshal()
    //
    // dateStyle, err := UnmarshalDateStyle(bytes)
    // bytes, err = dateStyle.Marshal()
    //
    // yearStyle, err := UnmarshalYearStyle(bytes)
    // bytes, err = yearStyle.Marshal()
    //
    // timeStyle, err := UnmarshalTimeStyle(bytes)
    // bytes, err = timeStyle.Marshal()
    //
    // monthStyle, err := UnmarshalMonthStyle(bytes)
    // bytes, err = monthStyle.Marshal()
    //
    // andAsString, err := UnmarshalAndAsString(bytes)
    // bytes, err = andAsString.Marshal()
    //
    // contributorScope, err := UnmarshalContributorScope(bytes)
    // bytes, err = contributorScope.Marshal()
    //
    // roleOption, err := UnmarshalRoleOption(bytes)
    // bytes, err = roleOption.Marshal()
    //
    // contributorListShortening, err := UnmarshalContributorListShortening(bytes)
    // bytes, err = contributorListShortening.Marshal()
    //
    // contributorListFormatting, err := UnmarshalContributorListFormatting(bytes)
    // bytes, err = contributorListFormatting.Marshal()
    //
    // dateFormat, err := UnmarshalDateFormat(bytes)
    // bytes, err = dateFormat.Marshal()
    //
    // wrapPunctuation, err := UnmarshalWrapPunctuation(bytes)
    // bytes, err = wrapPunctuation.Marshal()
    //
    // delimiterPunctuation, err := UnmarshalDelimiterPunctuation(bytes)
    // bytes, err = delimiterPunctuation.Marshal()
    //
    // matchWhich, err := UnmarshalMatchWhich(bytes)
    // bytes, err = matchWhich.Marshal()
    //
    // templateComponent, err := UnmarshalTemplateComponent(bytes)
    // bytes, err = templateComponent.Marshal()
    //
    // template, err := UnmarshalTemplate(bytes)
    // bytes, err = template.Marshal()
    //
    // templateKey, err := UnmarshalTemplateKey(bytes)
    // bytes, err = templateKey.Marshal()
    //
    // namedTemplate, err := UnmarshalNamedTemplate(bytes)
    // bytes, err = namedTemplate.Marshal()
    //
    // topLevelTemplate, err := UnmarshalTopLevelTemplate(bytes)
    // bytes, err = topLevelTemplate.Marshal()
    //
    // templateFile, err := UnmarshalTemplateFile(bytes)
    // bytes, err = templateFile.Marshal()
    //
    // calledTemplate, err := UnmarshalCalledTemplate(bytes)
    // bytes, err = calledTemplate.Marshal()
    //
    // inlineTemplate, err := UnmarshalInlineTemplate(bytes)
    // bytes, err = inlineTemplate.Marshal()
    //
    // cond, err := UnmarshalCond(bytes)
    // bytes, err = cond.Marshal()
    //
    // match, err := UnmarshalMatch(bytes)
    // bytes, err = match.Marshal()
    //
    // isNumber, err := UnmarshalIsNumber(bytes)
    // bytes, err = isNumber.Marshal()
    //
    // isEDTFDate, err := UnmarshalIsEDTFDate(bytes)
    // bytes, err = isEDTFDate.Marshal()
    //
    // isRefType, err := UnmarshalIsRefType(bytes)
    // bytes, err = isRefType.Marshal()
    //
    // hasVariable, err := UnmarshalHasVariable(bytes)
    // bytes, err = hasVariable.Marshal()
    //
    // dataMatch, err := UnmarshalDataMatch(bytes)
    // bytes, err = dataMatch.Marshal()
    //
    // condition, err := UnmarshalCondition(bytes)
    // bytes, err = condition.Marshal()
    //
    // locale, err := UnmarshalLocale(bytes)
    // bytes, err = locale.Marshal()
    //
    // renderList, err := UnmarshalRenderList(bytes)
    // bytes, err = renderList.Marshal()
    //
    // renderListBlock, err := UnmarshalRenderListBlock(bytes)
    // bytes, err = renderListBlock.Marshal()
    //
    // renderSimple, err := UnmarshalRenderSimple(bytes)
    // bytes, err = renderSimple.Marshal()
    //
    // renderText, err := UnmarshalRenderText(bytes)
    // bytes, err = renderText.Marshal()
    //
    // renderTerm, err := UnmarshalRenderTerm(bytes)
    // bytes, err = renderTerm.Marshal()
    //
    // renderDate, err := UnmarshalRenderDate(bytes)
    // bytes, err = renderDate.Marshal()
    //
    // renderTitle, err := UnmarshalRenderTitle(bytes)
    // bytes, err = renderTitle.Marshal()
    //
    // renderContributors, err := UnmarshalRenderContributors(bytes)
    // bytes, err = renderContributors.Marshal()
    //
    // renderLocators, err := UnmarshalRenderLocators(bytes)
    // bytes, err = renderLocators.Marshal()
    //
    // csl, err := UnmarshalCsl(bytes)
    // bytes, err = csl.Marshal()
    //
    // referenceTypes, err := UnmarshalReferenceTypes(bytes)
    // bytes, err = referenceTypes.Marshal()
    //
    // contributorRoles, err := UnmarshalContributorRoles(bytes)
    // bytes, err = contributorRoles.Marshal()
    //
    // dates, err := UnmarshalDates(bytes)
    // bytes, err = dates.Marshal()
    //
    // titles, err := UnmarshalTitles(bytes)
    // bytes, err = titles.Marshal()
    //
    // locators, err := UnmarshalLocators(bytes)
    // bytes, err = locators.Marshal()
    //
    // simpleTypes, err := UnmarshalSimpleTypes(bytes)
    // bytes, err = simpleTypes.Marshal()
    //
    // variables, err := UnmarshalVariables(bytes)
    // bytes, err = variables.Marshal()
    //
    // styleCategory, err := UnmarshalStyleCategory(bytes)
    // bytes, err = styleCategory.Marshal()
    //
    // style, err := UnmarshalStyle(bytes)
    // bytes, err = style.Marshal()
    //
    // styleMetadata, err := UnmarshalStyleMetadata(bytes)
    // bytes, err = styleMetadata.Marshal()
    //
    // hasFormatting, err := UnmarshalHasFormatting(bytes)
    // bytes, err = hasFormatting.Marshal()
    //
    // citationStyle, err := UnmarshalCitationStyle(bytes)
    // bytes, err = citationStyle.Marshal()
    //
    // bibliographyStyle, err := UnmarshalBibliographyStyle(bytes)
    // bytes, err = bibliographyStyle.Marshal()
    //
    // recordLocalizedTermNameLocalizedTerm, err := UnmarshalRecordLocalizedTermNameLocalizedTerm(bytes)
    // bytes, err = recordLocalizedTermNameLocalizedTerm.Marshal()

    package main

    import "bytes"
    import "errors"
    import "encoding/json"

    func UnmarshalLocalizationTerms(data []byte) (LocalizationTerms, error) {
    var r LocalizationTerms
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizationTerms) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLang(data []byte) (Lang, error) {
    var r Lang
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Lang) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTermName(data []byte) (LocalizedTermName, error) {
    var r LocalizedTermName
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTermName) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTermNameMisc(data []byte) (LocalizedTermNameMisc, error) {
    var r LocalizedTermNameMisc
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTermNameMisc) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTermNameLocator(data []byte) (LocalizedTermNameLocator, error) {
    var r LocalizedTermNameLocator
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTermNameLocator) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTermNameLocatorNumber(data []byte) (LocalizedTermNameLocatorNumber, error) {
    var r LocalizedTermNameLocatorNumber
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTermNameLocatorNumber) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTermFormat(data []byte) (LocalizedTermFormat, error) {
    var r LocalizedTermFormat
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTermFormat) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalStandaloneLocalize(data []byte) (StandaloneLocalize, error) {
    var r StandaloneLocalize
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *StandaloneLocalize) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalizedTerm(data []byte) (LocalizedTerm, error) {
    var r LocalizedTerm
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *LocalizedTerm) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalOptionsFile(data []byte) (OptionsFile, error) {
    var r OptionsFile
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *OptionsFile) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSortRules(data []byte) (SortRules, error) {
    var r SortRules
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *SortRules) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalGroupSortKeys(data []byte) (GroupSortKeys, error) {
    var r GroupSortKeys
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *GroupSortKeys) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSubstitute(data []byte) (Substitute, error) {
    var r Substitute
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Substitute) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalOptions(data []byte) (Options, error) {
    var r Options
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Options) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalOptionGroup(data []byte) (OptionGroup, error) {
    var r OptionGroup
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *OptionGroup) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocalization(data []byte) (Localization, error) {
    var r Localization
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Localization) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSortGroup(data []byte) (SortGroup, error) {
    var r SortGroup
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *SortGroup) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSortConfig(data []byte) (SortConfig, error) {
    var r SortConfig
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *SortConfig) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalGroup(data []byte) (Group, error) {
    var r Group
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Group) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDisambiguation(data []byte) (Disambiguation, error) {
    var r Disambiguation
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Disambiguation) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSubstitution(data []byte) (Substitution, error) {
    var r Substitution
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Substitution) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDateFormatting(data []byte) (DateFormatting, error) {
    var r DateFormatting
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *DateFormatting) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDateStyle(data []byte) (DateStyle, error) {
    var r DateStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *DateStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalYearStyle(data []byte) (YearStyle, error) {
    var r YearStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *YearStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTimeStyle(data []byte) (TimeStyle, error) {
    var r TimeStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *TimeStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalMonthStyle(data []byte) (MonthStyle, error) {
    var r MonthStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *MonthStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalAndAsString(data []byte) (AndAsString, error) {
    var r AndAsString
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *AndAsString) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalContributorScope(data []byte) (ContributorScope, error) {
    var r ContributorScope
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *ContributorScope) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRoleOption(data []byte) (RoleOption, error) {
    var r RoleOption
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RoleOption) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalContributorListShortening(data []byte) (ContributorListShortening, error) {
    var r ContributorListShortening
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *ContributorListShortening) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalContributorListFormatting(data []byte) (ContributorListFormatting, error) {
    var r ContributorListFormatting
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *ContributorListFormatting) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDateFormat(data []byte) (DateFormat, error) {
    var r DateFormat
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *DateFormat) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalWrapPunctuation(data []byte) (WrapPunctuation, error) {
    var r WrapPunctuation
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *WrapPunctuation) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDelimiterPunctuation(data []byte) (DelimiterPunctuation, error) {
    var r DelimiterPunctuation
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *DelimiterPunctuation) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalMatchWhich(data []byte) (MatchWhich, error) {
    var r MatchWhich
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *MatchWhich) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTemplateComponent(data []byte) (TemplateComponent, error) {
    var r TemplateComponent
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *TemplateComponent) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTemplate(data []byte) (Template, error) {
    var r Template
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Template) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    type TemplateKey string

    func UnmarshalTemplateKey(data []byte) (TemplateKey, error) {
    var r TemplateKey
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *TemplateKey) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalNamedTemplate(data []byte) (NamedTemplate, error) {
    var r NamedTemplate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *NamedTemplate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTopLevelTemplate(data []byte) (TopLevelTemplate, error) {
    var r TopLevelTemplate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *TopLevelTemplate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTemplateFile(data []byte) (TemplateFile, error) {
    var r TemplateFile
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *TemplateFile) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalCalledTemplate(data []byte) (CalledTemplate, error) {
    var r CalledTemplate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *CalledTemplate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalInlineTemplate(data []byte) (InlineTemplate, error) {
    var r InlineTemplate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *InlineTemplate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalCond(data []byte) (Cond, error) {
    var r Cond
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Cond) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalMatch(data []byte) (Match, error) {
    var r Match
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Match) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalIsNumber(data []byte) (IsNumber, error) {
    var r IsNumber
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *IsNumber) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalIsEDTFDate(data []byte) (IsEDTFDate, error) {
    var r IsEDTFDate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *IsEDTFDate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalIsRefType(data []byte) (IsRefType, error) {
    var r IsRefType
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *IsRefType) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalHasVariable(data []byte) (HasVariable, error) {
    var r HasVariable
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *HasVariable) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDataMatch(data []byte) (DataMatch, error) {
    var r DataMatch
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *DataMatch) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalCondition(data []byte) (Condition, error) {
    var r Condition
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Condition) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocale(data []byte) (Locale, error) {
    var r Locale
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Locale) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderList(data []byte) (RenderList, error) {
    var r RenderList
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderList) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderListBlock(data []byte) (RenderListBlock, error) {
    var r RenderListBlock
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderListBlock) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderSimple(data []byte) (RenderSimple, error) {
    var r RenderSimple
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderSimple) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderText(data []byte) (RenderText, error) {
    var r RenderText
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderText) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderTerm(data []byte) (RenderTerm, error) {
    var r RenderTerm
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderTerm) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderDate(data []byte) (RenderDate, error) {
    var r RenderDate
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderDate) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderTitle(data []byte) (RenderTitle, error) {
    var r RenderTitle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderTitle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderContributors(data []byte) (RenderContributors, error) {
    var r RenderContributors
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderContributors) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRenderLocators(data []byte) (RenderLocators, error) {
    var r RenderLocators
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RenderLocators) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalCsl(data []byte) (Csl, error) {
    var r Csl
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Csl) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalReferenceTypes(data []byte) (ReferenceTypes, error) {
    var r ReferenceTypes
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *ReferenceTypes) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalContributorRoles(data []byte) (ContributorRoles, error) {
    var r ContributorRoles
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *ContributorRoles) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalDates(data []byte) (Dates, error) {
    var r Dates
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Dates) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalTitles(data []byte) (Titles, error) {
    var r Titles
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Titles) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalLocators(data []byte) (Locators, error) {
    var r Locators
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Locators) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalSimpleTypes(data []byte) (SimpleTypes, error) {
    var r SimpleTypes
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *SimpleTypes) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalVariables(data []byte) (Variables, error) {
    var r Variables
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Variables) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalStyleCategory(data []byte) (StyleCategory, error) {
    var r StyleCategory
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *StyleCategory) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalStyle(data []byte) (Style, error) {
    var r Style
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *Style) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalStyleMetadata(data []byte) (StyleMetadata, error) {
    var r StyleMetadata
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *StyleMetadata) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalHasFormatting(data []byte) (HasFormatting, error) {
    var r HasFormatting
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *HasFormatting) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalCitationStyle(data []byte) (CitationStyle, error) {
    var r CitationStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *CitationStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalBibliographyStyle(data []byte) (BibliographyStyle, error) {
    var r BibliographyStyle
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *BibliographyStyle) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    func UnmarshalRecordLocalizedTermNameLocalizedTerm(data []byte) (RecordLocalizedTermNameLocalizedTerm, error) {
    var r RecordLocalizedTermNameLocalizedTerm
    err := json.Unmarshal(data, &r)
    return r, err
    }

    func (r *RecordLocalizedTermNameLocalizedTerm) Marshal() ([]byte, error) {
    return json.Marshal(r)
    }

    type LocalizationTerms struct {
    Description *string `json:"description,omitempty"`
    Locale Lang `json:"locale"`
    PunctuationInQuote *bool `json:"punctuationInQuote,omitempty"`
    Terms RecordLocalizedTermNameLocalizedTerm `json:"terms"`
    Title *string `json:"title,omitempty"`
    }

    type RecordLocalizedTermNameLocalizedTerm struct {
    Accessed LocalizedTerm `json:"accessed"`
    Act LocalizedTerm `json:"act"`
    Ad LocalizedTerm `json:"ad"`
    AdvanceOnlinePublication LocalizedTerm `json:"advance-online-publication"`
    Album LocalizedTerm `json:"album"`
    And LocalizedTerm `json:"and"`
    AndOthers LocalizedTerm `json:"and-others"`
    Anonymous LocalizedTerm `json:"anonymous"`
    Appendix LocalizedTerm `json:"appendix"`
    ArticleLocator LocalizedTerm `json:"article-locator"`
    At LocalizedTerm `json:"at"`
    AudioRecording LocalizedTerm `json:"audio-recording"`
    AvailableAt LocalizedTerm `json:"available-at"`
    Bc LocalizedTerm `json:"bc"`
    Bce LocalizedTerm `json:"bce"`
    Book LocalizedTerm `json:"book"`
    By LocalizedTerm `json:"by"`
    Canon LocalizedTerm `json:"canon"`
    Ce LocalizedTerm `json:"ce"`
    Chapter LocalizedTerm `json:"chapter"`
    Circa LocalizedTerm `json:"circa"`
    Cited LocalizedTerm `json:"cited"`
    Column LocalizedTerm `json:"column"`
    Elocation LocalizedTerm `json:"elocation"`
    Equation LocalizedTerm `json:"equation"`
    EtAl LocalizedTerm `json:"et-al"`
    Figure LocalizedTerm `json:"figure"`
    Film LocalizedTerm `json:"film"`
    Folio LocalizedTerm `json:"folio"`
    Forthcoming LocalizedTerm `json:"forthcoming"`
    From LocalizedTerm `json:"from"`
    Henceforth LocalizedTerm `json:"henceforth"`
    Ibid LocalizedTerm `json:"ibid"`
    In LocalizedTerm `json:"in"`
    InPress LocalizedTerm `json:"in-press"`
    Internet LocalizedTerm `json:"internet"`
    Interview LocalizedTerm `json:"interview"`
    Issue LocalizedTerm `json:"issue"`
    Letter LocalizedTerm `json:"letter"`
    Line LocalizedTerm `json:"line"`
    LOCCit LocalizedTerm `json:"loc-cit"`
    NoDate LocalizedTerm `json:"no date"`
    NoPlace LocalizedTerm `json:"no-place"`
    NoPublisher LocalizedTerm `json:"no-publisher"`
    Note LocalizedTerm `json:"note"`
    On LocalizedTerm `json:"on"`
    Online LocalizedTerm `json:"online"`
    OpCit LocalizedTerm `json:"op-cit"`
    Opus LocalizedTerm `json:"opus"`
    OriginalWorkPublished LocalizedTerm `json:"original-work-published"`
    Page LocalizedTerm `json:"page"`
    Paragraph LocalizedTerm `json:"paragraph"`
    Part LocalizedTerm `json:"part"`
    PersonalCommunication LocalizedTerm `json:"personal-communication"`
    Podcast LocalizedTerm `json:"podcast"`
    PodcastEpisode LocalizedTerm `json:"podcast-episode"`
    Preprint LocalizedTerm `json:"preprint"`
    PresentedAt LocalizedTerm `json:"presented-at"`
    RadioBroadcast LocalizedTerm `json:"radio-broadcast"`
    RadioSeries LocalizedTerm `json:"radio-series"`
    RadioSeriesEpisode LocalizedTerm `json:"radio-series-episode"`
    Reference LocalizedTerm `json:"reference"`
    Retrieved LocalizedTerm `json:"retrieved"`
    ReviewOf LocalizedTerm `json:"review-of"`
    Rule LocalizedTerm `json:"rule"`
    Scale LocalizedTerm `json:"scale"`
    Scene LocalizedTerm `json:"scene"`
    Section LocalizedTerm `json:"section"`
    SpecialIssue LocalizedTerm `json:"special-issue"`
    SpecialSection LocalizedTerm `json:"special-section"`
    SubVerbo LocalizedTerm `json:"sub-verbo"`
    Supplement LocalizedTerm `json:"supplement"`
    Table LocalizedTerm `json:"table"`
    TelevisionBroadcast LocalizedTerm `json:"television-broadcast"`
    TelevisionSeries LocalizedTerm `json:"television-series"`
    TelevisionSeriesEpisode LocalizedTerm `json:"television-series-episode"`
    Timestamp LocalizedTerm `json:"timestamp"`
    TitleLocator LocalizedTerm `json:"title-locator"`
    Verse LocalizedTerm `json:"verse"`
    Version LocalizedTerm `json:"version"`
    Video LocalizedTerm `json:"video"`
    Volume LocalizedTerm `json:"volume"`
    WorkingPaper LocalizedTerm `json:"working-paper"`
    }

    type LocalizedTerm struct {
    Format *LocalizedTermFormat `json:"format,omitempty"`
    Multiple *string `json:"multiple,omitempty"`
    Single *string `json:"single,omitempty"`
    }

    type StandaloneLocalize struct {
    Description *string `json:"description,omitempty"`
    Format *LocalizedTermFormat `json:"format,omitempty"`
    Multiple *string `json:"multiple,omitempty"`
    Rights *string `json:"rights,omitempty"`
    Single *string `json:"single,omitempty"`
    Translators []string `json:"translators,omitempty"`
    }

    // Option model for style configuration.
    type OptionsFile struct {
    }

    type SortRules struct {
    Key GroupSortKeys `json:"key"`
    // The order to sort the list.
    Order Order `json:"order"`
    }

    type Options struct {
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    }

    // Parameter groups.
    type OptionGroup struct {
    // Contributor list formatting configuration.
    Contributors *ContributorListFormatting `json:"contributors,omitempty"`
    // Date formatting configuration.
    Dates *DateFormatting `json:"dates,omitempty"`
    // Disambiguation configuration of rendererd group display names.
    Disambiguate *Disambiguation `json:"disambiguate,omitempty"`
    // Grouping configuration.
    Group []GroupSortKeys `json:"group,omitempty"`
    // Localization configuration.
    Localization *Localization `json:"localization,omitempty"`
    // Sorting configuration.
    Sort []SortConfig `json:"sort,omitempty"`
    // Substitution configuration.
    Substitute *Substitution `json:"substitute,omitempty"`
    }

    // Contributor list formatting configuration.
    type ContributorListFormatting struct {
    // The delimiter between last and second-to-last item.
    //
    // The default "text" value produces:
    //
    // > Doe, Johnson and Smith
    //
    // The "symbol" value produces:
    //
    // > Doe, Johnson & Smith
    AndAs *AndAsString `json:"andAs,omitempty"`
    Bold *bool `json:"bold,omitempty"`
    // Format a contributor name as sorted.
    DisplayAsSort *ContributorScope `json:"displayAsSort,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    // Configuring of the display of contributor rolee annotations.
    Role *RoleOption `json:"role,omitempty"`
    // Configuration for contributor list shortening.
    Shorten *ContributorListShortening `json:"shorten,omitempty"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // Configuring of the display of contributor rolee annotations.
    //
    // Contributor role configuration.
    type RoleOption struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    // The display form of the role.
    //
    // ### `long`
    //
    // The full name of the role.
    //
    // > Jane Smith (editor)
    //
    // ### `short`
    //
    // > Jane Smith (ed.)
    //
    // ### `verb`
    //
    // > edited by Jane Smith
    //
    // ### `verb-short`
    //
    // > ed. Jane Smith
    Form *Form `json:"form,omitempty"`
    // Contributor roles for which to omit the role description.
    //
    // The default value is `["author"]`, which omits the role for authors, including for any
    // author substitutions.
    Omit []ContributorRoles `json:"omit,omitempty"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // Configuration for contributor list shortening.
    type ContributorListShortening struct {
    // When shortening, replace omitted names with this term form.
    //
    // ### `short`
    //
    // > Doe, Johnson, et al.
    //
    // ### `long`
    //
    // > Doe, Johnson, and others
    AtAl *AtAl `json:"atAl,omitempty"`
    // Determines when the delimiter or a space is used between a truncated contributor list
    // and the “et-al” (or “and others”) term in case of et-al abbreviation.
    //
    // Allowed values:
    //
    // ### `contextual`
    //
    // Delimiter is only used for contributor lists truncated to two or more items:
    //
    // - 1 name: “J. Doe et al.”
    // - 2 names: “J. Doe, S. Smith, et al.”
    //
    // ### `after-inverted-name`
    //
    // Delimiter is only used if the preceding name is inverted as a result of the `asSort`
    // parameter.
    // E.g. with `asSort` set to “first”:
    //
    // - “Doe, J., et al.”
    // - “Doe, J., S. Smith et al.”
    //
    // ### `always`
    //
    // Delimiter is always used:
    //
    // - 1 name: “J. Doe, et al.”
    // - 2 names: “J. Doe, S. Smith, et al.”
    //
    // ### `never`
    //
    // Delimiter is never used:
    // - 1 name: “J. Doe et al.”
    // - 2 names: “J. Doe, S. Smith et al.”
    DelimiterPrecedesEtAl *DelimiterPrecedes `json:"delimiterPrecedesEtAl,omitempty"`
    // Determines when the delimiter is used to separate the second to last and the last
    // item in contributor lists (if `and` is not set, the name delimiter is always used,
    // regardless of the value of `delimiterPrecedesLast`). Allowed values:
    //
    // ### `contextual`
    //
    // The contributor delimiter is only used for lists of three or more:
    //
    // - 2 names: “J. Doe and T. Williams”
    // - 3 names: “J. Doe, S. Smith, and T. Williams”
    //
    // ### `after-inverted-name`
    //
    // Delimiter is only used if the preceding name is inverted as a result of the
    // `asSort` parameter. E.g. with `asSort` set to “first”:
    //
    // - “Doe, J., and T. Williams”
    // - “Doe, J., S. Smith and T. Williams”
    //
    // ### `always`
    //
    // Delimiter is always used:
    //
    // - 2 names: “J. Doe, and T. Williams”
    // - 3 names: “J. Doe, S. Smith, and T. Williams”
    //
    // ### `never`
    //
    // Delimiter is never used:
    //
    // - 2 names: “J. Doe and T. Williams”
    // - 3 names: “J. Doe, S. Smith and T. Williams”
    DelimiterPrecedesLast *DelimiterPrecedes `json:"delimiterPrecedesLast,omitempty"`
    // The minimum length of the before acitvating shortening
    Min *float64 `json:"min,omitempty"`
    // When shortening, use the first number of contributors.
    UseFirst *float64 `json:"useFirst,omitempty"`
    }

    // Date formatting configuration.
    type DateFormatting struct {
    Date *TimeStyle `json:"date,omitempty"`
    Month *MonthStyle `json:"month,omitempty"`
    Time *TimeStyle `json:"time,omitempty"`
    Year *YearStyle `json:"year,omitempty"`
    }

    // Disambiguation configuration of rendererd group display names.
    //
    // Disambiguation of rendered group display name configuration.
    type Disambiguation struct {
    AddNames *AddNames `json:"addNames,omitempty"`
    AddYearSuffix *bool `json:"addYearSuffix,omitempty"`
    }

    // Localization configuration.
    //
    // Terms and data localization configuration.
    type Localization struct {
    // The scope to use for localization.
    //
    // "per-item" uses the locale of the reference item, and "global" uses the target language
    // across all references.
    Scope *Scope `json:"scope,omitempty"`
    }

    // Reference sorting configuration.
    type SortConfig struct {
    Key GroupSortKeys `json:"key"`
    Order Order `json:"order"`
    }

    // Substitution configuration.
    //
    // Substitution of variable configuration.
    type Substitution struct {
    // When author is nil, substitute the first non-nil listed variable.
    // Once a substitution is made, the substituted variable shall be set to nil for purposes of
    // later rendering.
    Author []Substitute `json:"author"`
    }

    type SortGroup struct {
    Key GroupSortKeys `json:"key"`
    }

    // Reference grouping of configuration.
    type Group struct {
    // The string with which to join two or more rendering comnponents.
    Delimiter *string `json:"delimiter,omitempty"`
    Key GroupSortKeys `json:"key"`
    }

    type MatchWhich struct {
    // The conditions that must be true for the templates to render.
    Match MatchEnum `json:"match"`
    }

    // Template property definition in the Style.
    type TopLevelTemplate struct {
    Templates NamedTemplate `json:"templates"`
    }

    // A global template that can be referenced by unique key.
    type NamedTemplate struct {
    }

    // A standlone template file.
    type TemplateFile struct {
    Description *string `json:"description,omitempty"`
    Templates NamedTemplate `json:"templates"`
    Title *string `json:"title,omitempty"`
    }

    // A template is called by name.
    type CalledTemplate struct {
    TemplateKey string `json:"templateKey"`
    }

    // A template defined inline.
    type InlineTemplate struct {
    Template []TemplateComponent `json:"template"`
    }

    type Condition struct {
    // Is the item variable a number?
    IsNumber *Locators `json:"isNumber,omitempty"`
    // The conditions that must be true for the templates to render.
    Match MatchEnum `json:"match"`
    Template []TemplateComponent `json:"template,omitempty"`
    // Does the date conform to EDTF?
    IsEDTFDate *Dates `json:"isEDTFDate,omitempty"`
    // Is the item reference type among the listed reference types?
    IsRefType []ReferenceTypes `json:"isRefType,omitempty"`
    // Does the item reference include one of the listed variables?
    HasVariable []Variables `json:"hasVariable,omitempty"`
    // The item reference locale; to allow multilingual output.
    Locale *string `json:"locale,omitempty"`
    }

    // When all of the when conditions are nil, format the children.
    //
    // The rendering of style templates can be specified by reference to a template name or by
    // inline definition.
    //
    // A template defined inline.
    //
    // A template is called by name.
    type Template struct {
    Template []TemplateComponent `json:"template,omitempty"`
    TemplateKey *string `json:"templateKey,omitempty"`
    }

    // A component of a CSL style template.
    //
    // Integral citations are those where the author is printed inline in the text; aka "in
    // text" or "narrative" citations.
    //
    // Non-integral citations are those where the author is incorporated in the citation, and
    // not printed inline in the text.
    //
    // A template is called by name.
    //
    // A template component for rendering contributors.
    //
    // A template component for rendering locators.
    //
    // A template component for rendering dates.
    //
    // A template component for rendering title.
    //
    // Non-localized plain text.
    //
    // Localized strings.
    type TemplateComponent struct {
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template,omitempty"`
    TemplateKey *string `json:"templateKey,omitempty"`
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    Variable *SimpleTypes `json:"variable,omitempty"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    Contributor *ContributorRoles `json:"contributor,omitempty"`
    Locator *Locators `json:"locator,omitempty"`
    Date *Dates `json:"date,omitempty"`
    Format *TemplateComponentFormat `json:"format,omitempty"`
    Title *Titles `json:"title,omitempty"`
    Text *string `json:"text,omitempty"`
    Term *LocalizedTermName `json:"term,omitempty"`
    // When all of the when conditions are nil, format the children.
    Else *Template `json:"else,omitempty"`
    // For the first condition that is non-nil, format the children.
    When []Condition `json:"when,omitempty"`
    }

    type Cond struct {
    // When all of the when conditions are nil, format the children.
    Else *Template `json:"else,omitempty"`
    // For the first condition that is non-nil, format the children.
    When []Condition `json:"when,omitempty"`
    }

    type MatchClass struct {
    // The conditions that must be true for the templates to render.
    Match MatchEnum `json:"match"`
    }

    type IsNumber struct {
    // Is the item variable a number?
    IsNumber Locators `json:"isNumber"`
    }

    type IsEDTFDate struct {
    // Does the date conform to EDTF?
    IsEDTFDate Dates `json:"isEDTFDate"`
    }

    type IsRefType struct {
    // Is the item reference type among the listed reference types?
    IsRefType []ReferenceTypes `json:"isRefType"`
    }

    type HasVariable struct {
    // Does the item reference include one of the listed variables?
    HasVariable []Variables `json:"hasVariable"`
    }

    type DataMatch struct {
    // Is the item variable a number?
    IsNumber *Locators `json:"isNumber,omitempty"`
    // Does the date conform to EDTF?
    IsEDTFDate *Dates `json:"isEDTFDate,omitempty"`
    // Is the item reference type among the listed reference types?
    IsRefType []ReferenceTypes `json:"isRefType,omitempty"`
    // Does the item reference include one of the listed variables?
    HasVariable []Variables `json:"hasVariable,omitempty"`
    // The item reference locale; to allow multilingual output.
    Locale *string `json:"locale,omitempty"`
    }

    type Locale struct {
    // The item reference locale; to allow multilingual output.
    Locale string `json:"locale"`
    }

    type RenderListBlock struct {
    ListStyle *string `json:"listStyle,omitempty"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    type RenderSimple struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    Variable SimpleTypes `json:"variable"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // Non-localized plain text.
    type RenderText struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    Text string `json:"text"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // Localized strings.
    type RenderTerm struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    Format LocalizedTermFormat `json:"format"`
    Term LocalizedTermName `json:"term"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // A template component for rendering dates.
    type RenderDate struct {
    Bold *bool `json:"bold,omitempty"`
    Date Dates `json:"date"`
    Emph *bool `json:"emph,omitempty"`
    Format DateFormat `json:"format"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // A template component for rendering title.
    type RenderTitle struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    Format *RenderTitleFormat `json:"format,omitempty"`
    Title Titles `json:"title"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    // A template component for rendering contributors.
    type RenderContributors struct {
    Contributor ContributorRoles `json:"contributor"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    // A template component for rendering locators.
    type RenderLocators struct {
    Locator Locators `json:"locator"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    // The CSL NEXT style model.
    //
    // Option model for style configuration.
    //
    // A standlone template file.
    //
    // A CSL Style.
    type Csl struct {
    // The description of the style.
    Description *string `json:"description,omitempty"`
    Locale *Lang `json:"locale,omitempty"`
    PunctuationInQuote *bool `json:"punctuationInQuote,omitempty"`
    Terms *RecordLocalizedTermNameLocalizedTerm `json:"terms,omitempty"`
    // The human-readable name of the style.
    Title *string `json:"title,omitempty"`
    Templates *NamedTemplate `json:"templates,omitempty"`
    // The bibliography specification.
    Bibliography *BibliographyStyle `json:"bibliography,omitempty"`
    // The categories the style belongs to; for purposes of indexing.
    Categories []StyleCategory `json:"categories,omitempty"`
    // The citation specification.
    Citation *CitationStyle `json:"citation,omitempty"`
    // The machine-readable token that uniquely identifies the style.
    ID *string `json:"id,omitempty"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    }

    // The bibliography specification.
    type BibliographyStyle struct {
    Heading *string `json:"heading,omitempty"`
    ListStyle *string `json:"listStyle,omitempty"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    // The citation specification.
    type CitationStyle struct {
    // Integral citations are those where the author is printed inline in the text; aka "in
    // text" or "narrative" citations.
    Integral *RenderList `json:"integral,omitempty"`
    // Non-integral citations are those where the author is incorporated in the citation, and
    // not printed inline in the text.
    NonIntegral *RenderList `json:"nonIntegral,omitempty"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Placement *Placement `json:"placement,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    // Integral citations are those where the author is printed inline in the text; aka "in
    // text" or "narrative" citations.
    //
    // Non-integral citations are those where the author is incorporated in the citation, and
    // not printed inline in the text.
    type RenderList struct {
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Template []TemplateComponent `json:"template"`
    }

    // A CSL Style.
    type Style struct {
    // The bibliography specification.
    Bibliography *BibliographyStyle `json:"bibliography,omitempty"`
    // The categories the style belongs to; for purposes of indexing.
    Categories []StyleCategory `json:"categories,omitempty"`
    // The citation specification.
    Citation *CitationStyle `json:"citation,omitempty"`
    // The description of the style.
    Description *string `json:"description,omitempty"`
    // The machine-readable token that uniquely identifies the style.
    ID *string `json:"id,omitempty"`
    // Parameter groups.
    Options *OptionGroup `json:"options,omitempty"`
    Templates NamedTemplate `json:"templates"`
    // The human-readable name of the style.
    Title *string `json:"title,omitempty"`
    }

    type StyleMetadata struct {
    // The categories the style belongs to; for purposes of indexing.
    Categories []StyleCategory `json:"categories,omitempty"`
    // The description of the style.
    Description *string `json:"description,omitempty"`
    // The machine-readable token that uniquely identifies the style.
    ID *string `json:"id,omitempty"`
    // The human-readable name of the style.
    Title *string `json:"title,omitempty"`
    }

    type HasFormatting struct {
    Bold *bool `json:"bold,omitempty"`
    Emph *bool `json:"emph,omitempty"`
    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    Wrap *WrapPunctuation `json:"wrap,omitempty"`
    }

    type Lang string
    const (
    AFZA Lang = "af-ZA"
    Ar Lang = "ar"
    BgBG Lang = "bg-BG"
    CAAD Lang = "ca-AD"
    CSCZ Lang = "cs-CZ"
    DaDK Lang = "da-DK"
    DeAT Lang = "de-AT"
    DeCH Lang = "de-CH"
    DeDE Lang = "de-DE"
    ElGR Lang = "el-GR"
    EnGB Lang = "en-GB"
    EnUS Lang = "en-US"
    EsES Lang = "es-ES"
    EtEE Lang = "et-EE"
    Eu Lang = "eu"
    FaIR Lang = "fa-IR"
    FiFI Lang = "fi-FI"
    FrCA Lang = "fr-CA"
    FrFR Lang = "fr-FR"
    HeIL Lang = "he-IL"
    HrHR Lang = "hr-HR"
    HuHU Lang = "hu-HU"
    IsIS Lang = "is-IS"
    ItIT Lang = "it-IT"
    JaJP Lang = "ja-JP"
    KMKH Lang = "km-KH"
    KoKR Lang = "ko-KR"
    LVLV Lang = "lv-LV"
    LtLT Lang = "lt-LT"
    MnMN Lang = "mn-MN"
    NbNO Lang = "nb-NO"
    NlNL Lang = "nl-NL"
    PlPL Lang = "pl-PL"
    PtBR Lang = "pt-BR"
    PtPT Lang = "pt-PT"
    RoRO Lang = "ro-RO"
    RuRU Lang = "ru-RU"
    SkSK Lang = "sk-SK"
    SlSI Lang = "sl-SI"
    SrRS Lang = "sr-RS"
    SvSE Lang = "sv-SE"
    ThTH Lang = "th-TH"
    TrTR Lang = "tr-TR"
    UkUA Lang = "uk-UA"
    ViVN Lang = "vi-VN"
    ZhCN Lang = "zh-CN"
    ZhTW Lang = "zh-TW"
    )

    type LocalizedTermFormat string
    const (
    PurpleShort LocalizedTermFormat = "short"
    PurpleSymbol LocalizedTermFormat = "symbol"
    )

    type LocalizedTermNameMisc string
    const (
    LocalizedTermNameMiscAccessed LocalizedTermNameMisc = "accessed"
    LocalizedTermNameMiscAd LocalizedTermNameMisc = "ad"
    LocalizedTermNameMiscAdvanceOnlinePublication LocalizedTermNameMisc = "advance-online-publication"
    LocalizedTermNameMiscAlbum LocalizedTermNameMisc = "album"
    LocalizedTermNameMiscAnd LocalizedTermNameMisc = "and"
    LocalizedTermNameMiscAndOthers LocalizedTermNameMisc = "and-others"
    LocalizedTermNameMiscAnonymous LocalizedTermNameMisc = "anonymous"
    LocalizedTermNameMiscAt LocalizedTermNameMisc = "at"
    LocalizedTermNameMiscAudioRecording LocalizedTermNameMisc = "audio-recording"
    LocalizedTermNameMiscAvailableAt LocalizedTermNameMisc = "available-at"
    LocalizedTermNameMiscBc LocalizedTermNameMisc = "bc"
    LocalizedTermNameMiscBce LocalizedTermNameMisc = "bce"
    LocalizedTermNameMiscBy LocalizedTermNameMisc = "by"
    LocalizedTermNameMiscCe LocalizedTermNameMisc = "ce"
    LocalizedTermNameMiscCirca LocalizedTermNameMisc = "circa"
    LocalizedTermNameMiscCited LocalizedTermNameMisc = "cited"
    LocalizedTermNameMiscEtAl LocalizedTermNameMisc = "et-al"
    LocalizedTermNameMiscFilm LocalizedTermNameMisc = "film"
    LocalizedTermNameMiscForthcoming LocalizedTermNameMisc = "forthcoming"
    LocalizedTermNameMiscFrom LocalizedTermNameMisc = "from"
    LocalizedTermNameMiscHenceforth LocalizedTermNameMisc = "henceforth"
    LocalizedTermNameMiscIbid LocalizedTermNameMisc = "ibid"
    LocalizedTermNameMiscIn LocalizedTermNameMisc = "in"
    LocalizedTermNameMiscInPress LocalizedTermNameMisc = "in-press"
    LocalizedTermNameMiscInternet LocalizedTermNameMisc = "internet"
    LocalizedTermNameMiscInterview LocalizedTermNameMisc = "interview"
    LocalizedTermNameMiscLOCCit LocalizedTermNameMisc = "loc-cit"
    LocalizedTermNameMiscLetter LocalizedTermNameMisc = "letter"
    LocalizedTermNameMiscNoDate LocalizedTermNameMisc = "no date"
    LocalizedTermNameMiscNoPlace LocalizedTermNameMisc = "no-place"
    LocalizedTermNameMiscNoPublisher LocalizedTermNameMisc = "no-publisher"
    LocalizedTermNameMiscOn LocalizedTermNameMisc = "on"
    LocalizedTermNameMiscOnline LocalizedTermNameMisc = "online"
    LocalizedTermNameMiscOpCit LocalizedTermNameMisc = "op-cit"
    LocalizedTermNameMiscOriginalWorkPublished LocalizedTermNameMisc = "original-work-published"
    LocalizedTermNameMiscPersonalCommunication LocalizedTermNameMisc = "personal-communication"
    LocalizedTermNameMiscPodcast LocalizedTermNameMisc = "podcast"
    LocalizedTermNameMiscPodcastEpisode LocalizedTermNameMisc = "podcast-episode"
    LocalizedTermNameMiscPreprint LocalizedTermNameMisc = "preprint"
    LocalizedTermNameMiscPresentedAt LocalizedTermNameMisc = "presented-at"
    LocalizedTermNameMiscRadioBroadcast LocalizedTermNameMisc = "radio-broadcast"
    LocalizedTermNameMiscRadioSeries LocalizedTermNameMisc = "radio-series"
    LocalizedTermNameMiscRadioSeriesEpisode LocalizedTermNameMisc = "radio-series-episode"
    LocalizedTermNameMiscReference LocalizedTermNameMisc = "reference"
    LocalizedTermNameMiscRetrieved LocalizedTermNameMisc = "retrieved"
    LocalizedTermNameMiscReviewOf LocalizedTermNameMisc = "review-of"
    LocalizedTermNameMiscScale LocalizedTermNameMisc = "scale"
    LocalizedTermNameMiscSpecialIssue LocalizedTermNameMisc = "special-issue"
    LocalizedTermNameMiscSpecialSection LocalizedTermNameMisc = "special-section"
    LocalizedTermNameMiscTelevisionBroadcast LocalizedTermNameMisc = "television-broadcast"
    LocalizedTermNameMiscTelevisionSeries LocalizedTermNameMisc = "television-series"
    LocalizedTermNameMiscTelevisionSeriesEpisode LocalizedTermNameMisc = "television-series-episode"
    LocalizedTermNameMiscVideo LocalizedTermNameMisc = "video"
    LocalizedTermNameMiscWorkingPaper LocalizedTermNameMisc = "working-paper"
    )

    type LocalizedTermNameLocator string
    const (
    LocalizedTermNameLocatorAct LocalizedTermNameLocator = "act"
    LocalizedTermNameLocatorAppendix LocalizedTermNameLocator = "appendix"
    LocalizedTermNameLocatorArticleLocator LocalizedTermNameLocator = "article-locator"
    LocalizedTermNameLocatorBook LocalizedTermNameLocator = "book"
    LocalizedTermNameLocatorCanon LocalizedTermNameLocator = "canon"
    LocalizedTermNameLocatorChapter LocalizedTermNameLocator = "chapter"
    LocalizedTermNameLocatorColumn LocalizedTermNameLocator = "column"
    LocalizedTermNameLocatorElocation LocalizedTermNameLocator = "elocation"
    LocalizedTermNameLocatorEquation LocalizedTermNameLocator = "equation"
    LocalizedTermNameLocatorFigure LocalizedTermNameLocator = "figure"
    LocalizedTermNameLocatorFolio LocalizedTermNameLocator = "folio"
    LocalizedTermNameLocatorLine LocalizedTermNameLocator = "line"
    LocalizedTermNameLocatorNote LocalizedTermNameLocator = "note"
    LocalizedTermNameLocatorOpus LocalizedTermNameLocator = "opus"
    LocalizedTermNameLocatorParagraph LocalizedTermNameLocator = "paragraph"
    LocalizedTermNameLocatorRule LocalizedTermNameLocator = "rule"
    LocalizedTermNameLocatorScene LocalizedTermNameLocator = "scene"
    LocalizedTermNameLocatorSubVerbo LocalizedTermNameLocator = "sub-verbo"
    LocalizedTermNameLocatorTable LocalizedTermNameLocator = "table"
    LocalizedTermNameLocatorTimestamp LocalizedTermNameLocator = "timestamp"
    LocalizedTermNameLocatorTitleLocator LocalizedTermNameLocator = "title-locator"
    LocalizedTermNameLocatorVerse LocalizedTermNameLocator = "verse"
    )

    type LocalizedTermNameLocatorNumber string
    const (
    LocalizedTermNameLocatorNumberIssue LocalizedTermNameLocatorNumber = "issue"
    LocalizedTermNameLocatorNumberPage LocalizedTermNameLocatorNumber = "page"
    LocalizedTermNameLocatorNumberPart LocalizedTermNameLocatorNumber = "part"
    LocalizedTermNameLocatorNumberSection LocalizedTermNameLocatorNumber = "section"
    LocalizedTermNameLocatorNumberSupplement LocalizedTermNameLocatorNumber = "supplement"
    LocalizedTermNameLocatorNumberVersion LocalizedTermNameLocatorNumber = "version"
    LocalizedTermNameLocatorNumberVolume LocalizedTermNameLocatorNumber = "volume"
    )

    type GroupSortKeys string
    const (
    AsCited GroupSortKeys = "as-cited"
    GroupSortKeysAuthor GroupSortKeys = "author"
    GroupSortKeysTitle GroupSortKeys = "title"
    GroupSortKeysYear GroupSortKeys = "year"
    )

    // The order to sort the list.
    type Order string
    const (
    Ascending Order = "ascending"
    Descending Order = "descending"
    )

    // The delimiter between last and second-to-last item.
    //
    // The default "text" value produces:
    //
    // > Doe, Johnson and Smith
    //
    // The "symbol" value produces:
    //
    // > Doe, Johnson & Smith
    type AndAsString string
    const (
    AndAsSymbol AndAsString = "symbol"
    Text AndAsString = "text"
    )

    // Format a contributor name as sorted.
    //
    // Which of the contributor names in a list to apply the transformation.
    type ContributorScope string
    const (
    DisplayAsSortAll ContributorScope = "all"
    DisplayAsSortNone ContributorScope = "none"
    First ContributorScope = "first"
    )

    // The display form of the role.
    //
    // ### `long`
    //
    // The full name of the role.
    //
    // > Jane Smith (editor)
    //
    // ### `short`
    //
    // > Jane Smith (ed.)
    //
    // ### `verb`
    //
    // > edited by Jane Smith
    //
    // ### `verb-short`
    //
    // > ed. Jane Smith
    type Form string
    const (
    FormLong Form = "long"
    FormShort Form = "short"
    Verb Form = "verb"
    VerbShort Form = "verb-short"
    )

    type ContributorRoles string
    const (
    ContributorRolesAuthor ContributorRoles = "author"
    ContributorRolesEditor ContributorRoles = "editor"
    ContributorRolesPublisher ContributorRoles = "publisher"
    )

    // The symbol pair to wrap around one or more rendering components.
    // Interaction with surrounding punctuation is localized.
    type WrapPunctuation string
    const (
    Brackets WrapPunctuation = "brackets"
    Parentheses WrapPunctuation = "parentheses"
    Quotes WrapPunctuation = "quotes"
    )

    // When shortening, replace omitted names with this term form.
    //
    // ### `short`
    //
    // > Doe, Johnson, et al.
    //
    // ### `long`
    //
    // > Doe, Johnson, and others
    type AtAl string
    const (
    AtAlLong AtAl = "long"
    AtAlShort AtAl = "short"
    )

    // Determines when the delimiter or a space is used between a truncated contributor list
    // and the “et-al” (or “and others”) term in case of et-al abbreviation.
    //
    // Allowed values:
    //
    // ### `contextual`
    //
    // Delimiter is only used for contributor lists truncated to two or more items:
    //
    // - 1 name: “J. Doe et al.”
    // - 2 names: “J. Doe, S. Smith, et al.”
    //
    // ### `after-inverted-name`
    //
    // Delimiter is only used if the preceding name is inverted as a result of the `asSort`
    // parameter.
    // E.g. with `asSort` set to “first”:
    //
    // - “Doe, J., et al.”
    // - “Doe, J., S. Smith et al.”
    //
    // ### `always`
    //
    // Delimiter is always used:
    //
    // - 1 name: “J. Doe, et al.”
    // - 2 names: “J. Doe, S. Smith, et al.”
    //
    // ### `never`
    //
    // Delimiter is never used:
    // - 1 name: “J. Doe et al.”
    // - 2 names: “J. Doe, S. Smith et al.”
    //
    // Determines when the delimiter is used to separate the second to last and the last
    // item in contributor lists (if `and` is not set, the name delimiter is always used,
    // regardless of the value of `delimiterPrecedesLast`). Allowed values:
    //
    // ### `contextual`
    //
    // The contributor delimiter is only used for lists of three or more:
    //
    // - 2 names: “J. Doe and T. Williams”
    // - 3 names: “J. Doe, S. Smith, and T. Williams”
    //
    // ### `after-inverted-name`
    //
    // Delimiter is only used if the preceding name is inverted as a result of the
    // `asSort` parameter. E.g. with `asSort` set to “first”:
    //
    // - “Doe, J., and T. Williams”
    // - “Doe, J., S. Smith and T. Williams”
    //
    // ### `always`
    //
    // Delimiter is always used:
    //
    // - 2 names: “J. Doe, and T. Williams”
    // - 3 names: “J. Doe, S. Smith, and T. Williams”
    //
    // ### `never`
    //
    // Delimiter is never used:
    //
    // - 2 names: “J. Doe and T. Williams”
    // - 3 names: “J. Doe, S. Smith and T. Williams”
    type DelimiterPrecedes string
    const (
    Always DelimiterPrecedes = "always"
    Contextual DelimiterPrecedes = "contextual"
    Never DelimiterPrecedes = "never"
    )

    type TimeStyle string
    const (
    DateFull TimeStyle = "full"
    DateLong TimeStyle = "long"
    DateShort TimeStyle = "short"
    Medium TimeStyle = "medium"
    )

    type MonthStyle string
    const (
    Month2Digit MonthStyle = "2-digit"
    MonthLong MonthStyle = "long"
    MonthNumeric MonthStyle = "numeric"
    MonthShort MonthStyle = "short"
    Narrow MonthStyle = "narrow"
    )

    type YearStyle string
    const (
    Year2Digit YearStyle = "2-digit"
    YearNumeric YearStyle = "numeric"
    )

    type AddNames string
    const (
    AddNamesAll AddNames = "all"
    AllWithInitials AddNames = "all-with-initials"
    ByCite AddNames = "by-cite"
    Primary AddNames = "primary"
    PrimaryWithInitials AddNames = "primary-with-initials"
    )

    // The scope to use for localization.
    //
    // "per-item" uses the locale of the reference item, and "global" uses the target language
    // across all references.
    type Scope string
    const (
    Global Scope = "global"
    PerItem Scope = "per-item"
    )

    type Substitute string
    const (
    SubstituteEditor Substitute = "editor"
    SubstituteTitle Substitute = "title"
    Translator Substitute = "translator"
    )

    type DelimiterPunctuation string
    const (
    Colon DelimiterPunctuation = "colon"
    Comma DelimiterPunctuation = "comma"
    Period DelimiterPunctuation = "period"
    Semicolon DelimiterPunctuation = "semicolon"
    Space DelimiterPunctuation = "space"
    )

    // The conditions that must be true for the templates to render.
    type MatchEnum string
    const (
    Any MatchEnum = "any"
    MatchAll MatchEnum = "all"
    MatchNone MatchEnum = "none"
    )

    type Variables string
    const (
    VariablesAccessed Variables = "accessed"
    VariablesArticle Variables = "article"
    VariablesAuthor Variables = "author"
    VariablesBook Variables = "book"
    VariablesChapter Variables = "chapter"
    VariablesContainerTitle Variables = "container-title"
    VariablesEditor Variables = "editor"
    VariablesIssue Variables = "issue"
    VariablesIssued Variables = "issued"
    VariablesPages Variables = "pages"
    VariablesPublisher Variables = "publisher"
    VariablesTitle Variables = "title"
    VariablesVolume Variables = "volume"
    )

    // Does the date conform to EDTF?
    type Dates string
    const (
    DatesAccessed Dates = "accessed"
    DatesIssued Dates = "issued"
    )

    // Is the item variable a number?
    type Locators string
    const (
    LocatorsChapter Locators = "chapter"
    LocatorsPage Locators = "page"
    )

    type ReferenceTypes string
    const (
    ReferenceTypesArticle ReferenceTypes = "article"
    ReferenceTypesBook ReferenceTypes = "book"
    ReferenceTypesChapter ReferenceTypes = "chapter"
    )

    type TemplateComponentFormat string
    const (
    FluffyShort TemplateComponentFormat = "short"
    FluffySymbol TemplateComponentFormat = "symbol"
    FormatMonthDay TemplateComponentFormat = "month-day"
    FormatYear TemplateComponentFormat = "year"
    FormatYearMonth TemplateComponentFormat = "year-month"
    PurpleFull TemplateComponentFormat = "full"
    PurpleMain TemplateComponentFormat = "main"
    PurpleSub TemplateComponentFormat = "sub"
    )

    // The unique human-readable identifier for a term.
    type LocalizedTermName string
    const (
    LocalizedTermNameAccessed LocalizedTermName = "accessed"
    LocalizedTermNameAct LocalizedTermName = "act"
    LocalizedTermNameAd LocalizedTermName = "ad"
    LocalizedTermNameAdvanceOnlinePublication LocalizedTermName = "advance-online-publication"
    LocalizedTermNameAlbum LocalizedTermName = "album"
    LocalizedTermNameAnd LocalizedTermName = "and"
    LocalizedTermNameAndOthers LocalizedTermName = "and-others"
    LocalizedTermNameAnonymous LocalizedTermName = "anonymous"
    LocalizedTermNameAppendix LocalizedTermName = "appendix"
    LocalizedTermNameArticleLocator LocalizedTermName = "article-locator"
    LocalizedTermNameAt LocalizedTermName = "at"
    LocalizedTermNameAudioRecording LocalizedTermName = "audio-recording"
    LocalizedTermNameAvailableAt LocalizedTermName = "available-at"
    LocalizedTermNameBc LocalizedTermName = "bc"
    LocalizedTermNameBce LocalizedTermName = "bce"
    LocalizedTermNameBook LocalizedTermName = "book"
    LocalizedTermNameBy LocalizedTermName = "by"
    LocalizedTermNameCanon LocalizedTermName = "canon"
    LocalizedTermNameCe LocalizedTermName = "ce"
    LocalizedTermNameChapter LocalizedTermName = "chapter"
    LocalizedTermNameCirca LocalizedTermName = "circa"
    LocalizedTermNameCited LocalizedTermName = "cited"
    LocalizedTermNameColumn LocalizedTermName = "column"
    LocalizedTermNameElocation LocalizedTermName = "elocation"
    LocalizedTermNameEquation LocalizedTermName = "equation"
    LocalizedTermNameEtAl LocalizedTermName = "et-al"
    LocalizedTermNameFigure LocalizedTermName = "figure"
    LocalizedTermNameFilm LocalizedTermName = "film"
    LocalizedTermNameFolio LocalizedTermName = "folio"
    LocalizedTermNameForthcoming LocalizedTermName = "forthcoming"
    LocalizedTermNameFrom LocalizedTermName = "from"
    LocalizedTermNameHenceforth LocalizedTermName = "henceforth"
    LocalizedTermNameIbid LocalizedTermName = "ibid"
    LocalizedTermNameIn LocalizedTermName = "in"
    LocalizedTermNameInPress LocalizedTermName = "in-press"
    LocalizedTermNameInternet LocalizedTermName = "internet"
    LocalizedTermNameInterview LocalizedTermName = "interview"
    LocalizedTermNameIssue LocalizedTermName = "issue"
    LocalizedTermNameLOCCit LocalizedTermName = "loc-cit"
    LocalizedTermNameLetter LocalizedTermName = "letter"
    LocalizedTermNameLine LocalizedTermName = "line"
    LocalizedTermNameNoDate LocalizedTermName = "no date"
    LocalizedTermNameNoPlace LocalizedTermName = "no-place"
    LocalizedTermNameNoPublisher LocalizedTermName = "no-publisher"
    LocalizedTermNameNote LocalizedTermName = "note"
    LocalizedTermNameOn LocalizedTermName = "on"
    LocalizedTermNameOnline LocalizedTermName = "online"
    LocalizedTermNameOpCit LocalizedTermName = "op-cit"
    LocalizedTermNameOpus LocalizedTermName = "opus"
    LocalizedTermNameOriginalWorkPublished LocalizedTermName = "original-work-published"
    LocalizedTermNamePage LocalizedTermName = "page"
    LocalizedTermNameParagraph LocalizedTermName = "paragraph"
    LocalizedTermNamePart LocalizedTermName = "part"
    LocalizedTermNamePersonalCommunication LocalizedTermName = "personal-communication"
    LocalizedTermNamePodcast LocalizedTermName = "podcast"
    LocalizedTermNamePodcastEpisode LocalizedTermName = "podcast-episode"
    LocalizedTermNamePreprint LocalizedTermName = "preprint"
    LocalizedTermNamePresentedAt LocalizedTermName = "presented-at"
    LocalizedTermNameRadioBroadcast LocalizedTermName = "radio-broadcast"
    LocalizedTermNameRadioSeries LocalizedTermName = "radio-series"
    LocalizedTermNameRadioSeriesEpisode LocalizedTermName = "radio-series-episode"
    LocalizedTermNameReference LocalizedTermName = "reference"
    LocalizedTermNameRetrieved LocalizedTermName = "retrieved"
    LocalizedTermNameReviewOf LocalizedTermName = "review-of"
    LocalizedTermNameRule LocalizedTermName = "rule"
    LocalizedTermNameScale LocalizedTermName = "scale"
    LocalizedTermNameScene LocalizedTermName = "scene"
    LocalizedTermNameSection LocalizedTermName = "section"
    LocalizedTermNameSpecialIssue LocalizedTermName = "special-issue"
    LocalizedTermNameSpecialSection LocalizedTermName = "special-section"
    LocalizedTermNameSubVerbo LocalizedTermName = "sub-verbo"
    LocalizedTermNameSupplement LocalizedTermName = "supplement"
    LocalizedTermNameTable LocalizedTermName = "table"
    LocalizedTermNameTelevisionBroadcast LocalizedTermName = "television-broadcast"
    LocalizedTermNameTelevisionSeries LocalizedTermName = "television-series"
    LocalizedTermNameTelevisionSeriesEpisode LocalizedTermName = "television-series-episode"
    LocalizedTermNameTimestamp LocalizedTermName = "timestamp"
    LocalizedTermNameTitleLocator LocalizedTermName = "title-locator"
    LocalizedTermNameVerse LocalizedTermName = "verse"
    LocalizedTermNameVersion LocalizedTermName = "version"
    LocalizedTermNameVideo LocalizedTermName = "video"
    LocalizedTermNameVolume LocalizedTermName = "volume"
    LocalizedTermNameWorkingPaper LocalizedTermName = "working-paper"
    )

    type Titles string
    const (
    TitlesContainerTitle Titles = "container-title"
    TitlesTitle Titles = "title"
    )

    type SimpleTypes string
    const (
    SimpleTypesIssue SimpleTypes = "issue"
    SimpleTypesPages SimpleTypes = "pages"
    SimpleTypesVolume SimpleTypes = "volume"
    )

    type DateFormat string
    const (
    DateFormatFull DateFormat = "full"
    DateFormatMonthDay DateFormat = "month-day"
    DateFormatYear DateFormat = "year"
    DateFormatYearMonth DateFormat = "year-month"
    )

    type RenderTitleFormat string
    const (
    FluffyFull RenderTitleFormat = "full"
    FluffyMain RenderTitleFormat = "main"
    FluffySub RenderTitleFormat = "sub"
    TentacledShort RenderTitleFormat = "short"
    )

    type StyleCategory string
    const (
    Biology StyleCategory = "biology"
    Science StyleCategory = "science"
    SocialScience StyleCategory = "social science"
    )

    type Placement string
    const (
    Inline Placement = "inline"
    PlacementNote Placement = "note"
    )

    type Match struct {
    AnythingArray []interface{}
    Bool *bool
    Double *float64
    Integer *int64
    MatchClass *MatchClass
    String *string
    }

    func (x *Match) UnmarshalJSON(data []byte) error {
    x.AnythingArray = nil
    x.MatchClass = nil
    var c MatchClass
    object, err := unmarshalUnion(data, &x.Integer, &x.Double, &x.Bool, &x.String, true, &x.AnythingArray, true, &c, false, nil, false, nil, true)
    if err != nil {
    return err
    }
    if object {
    x.MatchClass = &c
    }
    return nil
    }

    func (x *Match) MarshalJSON() ([]byte, error) {
    return marshalUnion(x.Integer, x.Double, x.Bool, x.String, x.AnythingArray != nil, x.AnythingArray, x.MatchClass != nil, x.MatchClass, false, nil, false, nil, true)
    }

    func unmarshalUnion(data []byte, pi **int64, pf **float64, pb **bool, ps **string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) (bool, error) {
    if pi != nil {
    *pi = nil
    }
    if pf != nil {
    *pf = nil
    }
    if pb != nil {
    *pb = nil
    }
    if ps != nil {
    *ps = nil
    }

    dec := json.NewDecoder(bytes.NewReader(data))
    dec.UseNumber()
    tok, err := dec.Token()
    if err != nil {
    return false, err
    }

    switch v := tok.(type) {
    case json.Number:
    if pi != nil {
    i, err := v.Int64()
    if err == nil {
    *pi = &i
    return false, nil
    }
    }
    if pf != nil {
    f, err := v.Float64()
    if err == nil {
    *pf = &f
    return false, nil
    }
    return false, errors.New("Unparsable number")
    }
    return false, errors.New("Union does not contain number")
    case float64:
    return false, errors.New("Decoder should not return float64")
    case bool:
    if pb != nil {
    *pb = &v
    return false, nil
    }
    return false, errors.New("Union does not contain bool")
    case string:
    if haveEnum {
    return false, json.Unmarshal(data, pe)
    }
    if ps != nil {
    *ps = &v
    return false, nil
    }
    return false, errors.New("Union does not contain string")
    case nil:
    if nullable {
    return false, nil
    }
    return false, errors.New("Union does not contain null")
    case json.Delim:
    if v == '{' {
    if haveObject {
    return true, json.Unmarshal(data, pc)
    }
    if haveMap {
    return false, json.Unmarshal(data, pm)
    }
    return false, errors.New("Union does not contain object")
    }
    if v == '[' {
    if haveArray {
    return false, json.Unmarshal(data, pa)
    }
    return false, errors.New("Union does not contain array")
    }
    return false, errors.New("Cannot handle delimiter")
    }
    return false, errors.New("Cannot unmarshal union")

    }

    func marshalUnion(pi *int64, pf *float64, pb *bool, ps *string, haveArray bool, pa interface{}, haveObject bool, pc interface{}, haveMap bool, pm interface{}, haveEnum bool, pe interface{}, nullable bool) ([]byte, error) {
    if pi != nil {
    return json.Marshal(*pi)
    }
    if pf != nil {
    return json.Marshal(*pf)
    }
    if pb != nil {
    return json.Marshal(*pb)
    }
    if ps != nil {
    return json.Marshal(*ps)
    }
    if haveArray {
    return json.Marshal(pa)
    }
    if haveObject {
    return json.Marshal(pc)
    }
    if haveMap {
    return json.Marshal(pm)
    }
    if haveEnum {
    return json.Marshal(pe)
    }
    if nullable {
    return json.Marshal(nil)
    }
    return nil, errors.New("Union must not be null")
    }