diff --git a/lib/parse.js b/lib/parse.js index f274885..5368618 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -10,36 +10,36 @@ module.exports = parse var own = {}.hasOwnProperty -var MAX_SUBTAG = 8 -var MAX_RESERVED = 4 -var MAX_ISO_639 = 3 -var MIN_ISO_639 = 2 -var MAX_EXTENDED_LANGUAGE_SUBTAG_COUNT = 3 -var MAX_VARIANT = 8 -var MIN_ALPHANUMERIC_VARIANT = 5 -var MIN_VARIANT = 4 -var MAX_EXTENSION = 8 -var MAX_PRIVATE_USE = 8 - -var ERR_VARIANT_TOO_LONG = 1 -var ERR_EXTENSION_TOO_LONG = 2 -var ERR_TOO_MANY_SUBTAGS = 3 -var ERR_EMPTY_EXTENSION = 4 -var ERR_PRIVATE_USE_TOO_LONG = 5 -var ERR_EXTRA_CONTENT = 6 - -var ERRORS = {} - -ERRORS[ERR_VARIANT_TOO_LONG] = 'Too long variant, expected at most 8 characters' -ERRORS[ERR_EXTENSION_TOO_LONG] = +var maxSubtag = 8 +var maxReserved = 4 +var maxIso639 = 3 +var minIso639 = 2 +var maxExtendedLanguageSubtagCount = 3 +var maxVariant = 8 +var minAlphanumericVariant = 5 +var minVariant = 4 +var maxExtension = 8 +var maxPrivateUse = 8 + +var errVariantTooLong = 1 +var errExtensionTooLong = 2 +var errTooManySubtags = 3 +var errEmptyExtension = 4 +var errPrivateUseTooLong = 5 +var errExtraContent = 6 + +var errors = {} + +errors[errVariantTooLong] = 'Too long variant, expected at most 8 characters' +errors[errExtensionTooLong] = 'Too long extension, expected at most 8 characters' -ERRORS[ERR_TOO_MANY_SUBTAGS] = +errors[errTooManySubtags] = 'Too many extended language subtags, expected at most 3 subtags' -ERRORS[ERR_EMPTY_EXTENSION] = +errors[errEmptyExtension] = 'Empty extension, extensions must have at least 2 characters of content' -ERRORS[ERR_PRIVATE_USE_TOO_LONG] = +errors[errPrivateUseTooLong] = 'Too long private-use area, expected at most 8 characters' -ERRORS[ERR_EXTRA_CONTENT] = 'Found superfluous content after tag' +errors[errExtraContent] = 'Found superfluous content after tag' // Parse a BCP 47 language tag. /* eslint-disable complexity */ @@ -88,13 +88,13 @@ function parse(tag, options) { } // Parse a normal tag. - if (index < MIN_ISO_639 || index > MAX_SUBTAG) { + if (index < minIso639 || index > maxSubtag) { index = 0 } else { - if (index > MAX_RESERVED) { + if (index > maxReserved) { // Subtag language. result.language = sensitive.slice(0, index) - } else if (index > MAX_ISO_639) { + } else if (index > maxIso639) { // Reserved language. result.language = sensitive.slice(0, index) } else { @@ -110,8 +110,8 @@ function parse(tag, options) { alphabetical(char(index + 3)) && !alphabetical(char(index + 4)) ) { - if (groupCount >= MAX_EXTENDED_LANGUAGE_SUBTAG_COUNT) { - return fail(index, ERR_TOO_MANY_SUBTAGS) + if (groupCount >= maxExtendedLanguageSubtagCount) { + return fail(index, errTooManySubtags) } // Extended language subtag. @@ -167,16 +167,16 @@ function parse(tag, options) { offset++ count++ - if (count > MAX_VARIANT) { - return fail(offset, ERR_VARIANT_TOO_LONG) + if (count > maxVariant) { + return fail(offset, errVariantTooLong) } } - if (count >= MIN_ALPHANUMERIC_VARIANT) { + if (count >= minAlphanumericVariant) { // Long variant. result.variants.push(sensitive.slice(index + 1, offset)) index = offset - } else if (decimal(char(index + 1)) && count >= MIN_VARIANT) { + } else if (decimal(char(index + 1)) && count >= minVariant) { // Short variant. result.variants.push(sensitive.slice(index + 1, offset)) index = offset @@ -208,8 +208,8 @@ function parse(tag, options) { groupCount++ while (alphanumeric(char(offset))) { - if (count > MAX_EXTENSION) { - return fail(offset, ERR_EXTENSION_TOO_LONG) + if (count > maxExtension) { + return fail(offset, errExtensionTooLong) } offset++ @@ -218,7 +218,7 @@ function parse(tag, options) { } if (!groupCount) { - return fail(offset, ERR_EMPTY_EXTENSION) + return fail(offset, errEmptyExtension) } // Extension. @@ -243,8 +243,8 @@ function parse(tag, options) { count = 1 while (alphanumeric(char(offset))) { - if (count >= MAX_PRIVATE_USE) { - return fail(offset, ERR_PRIVATE_USE_TOO_LONG) + if (count >= maxPrivateUse) { + return fail(offset, errPrivateUseTooLong) } offset++ @@ -257,7 +257,7 @@ function parse(tag, options) { } if (index !== tag.length) { - return fail(index, ERR_EXTRA_CONTENT) + return fail(index, errExtraContent) } return result @@ -268,7 +268,7 @@ function parse(tag, options) { function fail(offset, code) { if (warning) { - warning(ERRORS[code], code, offset) + warning(errors[code], code, offset) } return forgiving ? result : empty()