## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----setup--------------------------------------------------------------------
library(naxp)

## -----------------------------------------------------------------------------
NL_postcode_x <- naxp_parse(r"(\9\9\9\9 \s!! \A\A)")
NL_postcode_x

## -----------------------------------------------------------------------------
postcodes_as_text <- c("1012 AB", "1012AB", "1012-AB", "not a postcode")
postcodes <- naxp_encode(postcodes_as_text, NL_postcode_x)
postcodes
as.integer(postcodes)

## -----------------------------------------------------------------------------
naxp_decode(postcodes) # No need for the naxp (NL_postcode_x)
naxp_decode(684114L, NL_postcode_x) # Decoding raw numbers requires a naxp
naxp_decode(0L, NL_postcode_x) # 0 means invalid -- it decodes to NA

## ----error = TRUE-------------------------------------------------------------
try({
naxp_decode(6760001L, NL_postcode_x)
})

## -----------------------------------------------------------------------------
naxp_accepts(postcodes_as_text, NL_postcode_x)
naxp_canonical_form(postcodes_as_text, NL_postcode_x)

## -----------------------------------------------------------------------------
writeLines(naxp_pattern(NL_postcode_x)) # Text pattern used to define the naxp
naxp_max_encoded_value(NL_postcode_x) # Maximum encoded value
naxp_max_length(NL_postcode_x) # Maximum decoded text length

## -----------------------------------------------------------------------------
offices <- data.frame(
  office = c("Amsterdam", "Maastricht", "Head office"),
  postcode = naxp_encode(c("1012 AB", "6211 CA", "1012AB"), NL_postcode_x)
)
offices
offices[offices$postcode == "1012 AB", ]

## -----------------------------------------------------------------------------
naxp_encoded(c(684114, 0), NL_postcode_x)

## ----error = TRUE-------------------------------------------------------------
try({
naxp_encoded(6760001L, NL_postcode_x)
})

## -----------------------------------------------------------------------------
naxp_standards()[, c("id", "variant")]

## -----------------------------------------------------------------------------
NL_postcode_x2 <- naxp_standard("nl-postcode")
naxp_compare(NL_postcode_x, NL_postcode_x2)

## -----------------------------------------------------------------------------
NL_postcode_HT_x <- naxp_standard("nl-postcode", "hyphen-tolerant")
naxp_compare(NL_postcode_x, NL_postcode_HT_x)

## -----------------------------------------------------------------------------
postcodes_as_text

# Rejects "1012-AB":
as.integer(naxp_encode(postcodes_as_text, NL_postcode_x))

# Accepts "1012-AB":
as.integer(naxp_encode(postcodes_as_text, NL_postcode_HT_x))

## ----error = TRUE-------------------------------------------------------------
try({
naxp_parse(r"(\9\9\9\9 [A-)")
})

## -----------------------------------------------------------------------------
error <- tryCatch(naxp_parse(r"(\9\9\9\9 [A-)"), naxp_error = identity)
error$code
error$offset

