... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.

(.using
 [library
  [lux (.except)
   ["$" documentation]
   [data
    ["[0]" text (.only)
     ["%" \\injection]]
    [collection
     ["[0]" list (.use "[1]:[0]" monoid)]]]
   [math
    [number
     ["[0]" natural (.use "hex:[0]" hex)]]]
   [meta
    [macro
     ["[0]" template]]]]]
 [\\library
  ["[0]" /]])

(the description
  (template.macro (_ <name>)
    [($.definition <name>
       (let [[_ name] (symbol <name>)]
         (text (hex:as (/.start <name>))
               "-" (hex:as (/.end <name>))
               " | " (text.replaced "_" " " name))))]))

(`` (the all_1/4
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [[/.basic_latin]
                   [/.latin_1_supplement]
                   [/.latin_extended_a]
                   [/.latin_extended_b]
                   [/.ipa_extensions]
                   [/.spacing_modifier_letters]
                   [/.combining_diacritical_marks]
                   [/.greek_and_coptic]
                   [/.cyrillic]
                   [/.cyrillic_supplementary]
                   [/.armenian]
                   [/.hebrew]
                   [/.arabic]
                   [/.syriac]
                   [/.thaana]
                   [/.devanagari]
                   [/.bengali]
                   [/.gurmukhi]
                   [/.gujarati]
                   [/.oriya]
                   [/.tamil]
                   [/.telugu]
                   [/.kannada]
                   [/.malayalam]
                   [/.sinhala]
                   [/.thai]
                   [/.lao]
                   [/.tibetan]
                   [/.myanmar]
                   [/.georgian]
                   [/.hangul_jamo]
                   [/.ethiopic]
                   [/.cherokee]]
                  ))
            )))

(`` (the all_2/4
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [[/.unified_canadian_aboriginal_syllabics]
                   [/.ogham]
                   [/.runic]
                   [/.tagalog]
                   [/.hanunoo]
                   [/.buhid]
                   [/.tagbanwa]
                   [/.khmer]
                   [/.mongolian]
                   [/.limbu]
                   [/.tai_le]
                   [/.khmer_symbols]
                   [/.phonetic_extensions]
                   [/.latin_extended_additional]
                   [/.greek_extended]
                   [/.general_punctuation]
                   [/.superscripts_and_subscripts]
                   [/.currency_symbols]
                   [/.combining_diacritical_marks_for_symbols]]
                  ))
            )))

(`` (the all_3/4
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [[/.combining_diacritical_marks_for_symbols]
                   [/.letterlike_symbols]
                   [/.number_forms]
                   [/.arrows]
                   [/.mathematical_operators]
                   [/.miscellaneous_technical]
                   [/.control_pictures]
                   [/.optical_character_recognition]
                   [/.enclosed_alphanumerics]
                   [/.box_drawing]
                   [/.block_elements]
                   [/.geometric_shapes]
                   [/.miscellaneous_symbols]
                   [/.dingbats]
                   [/.miscellaneous_mathematical_symbols_a]
                   [/.supplemental_arrows_a]
                   [/.braille_patterns]
                   [/.supplemental_arrows_b]
                   [/.miscellaneous_mathematical_symbols_b]
                   [/.supplemental_mathematical_operators]
                   [/.miscellaneous_symbols_and_arrows]
                   [/.cjk_radicals_supplement]
                   [/.kangxi_radicals]
                   [/.ideographic_description_characters]
                   [/.cjk_symbols_and_punctuation]
                   [/.hiragana]
                   [/.katakana]
                   [/.bopomofo]]
                  ))
            )))

(`` (the all_4/4
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [[/.hangul_compatibility_jamo]
                   [/.kanbun]
                   [/.bopomofo_extended]
                   [/.katakana_phonetic_extensions]
                   [/.enclosed_cjk_letters_and_months]
                   [/.cjk_compatibility]
                   [/.cjk_unified_ideographs_extension_a]
                   [/.yijing_hexagram_symbols]
                   [/.cjk_unified_ideographs]
                   [/.yi_syllables]
                   [/.yi_radicals]
                   [/.hangul_syllables]
                   [/.high_surrogates]
                   [/.high_private_use_surrogates]
                   [/.low_surrogates]
                   [/.private_use_area]
                   [/.cjk_compatibility_ideographs]
                   [/.alphabetic_presentation_forms]
                   [/.arabic_presentation_forms_a]
                   [/.variation_selectors]
                   [/.combining_half_marks]
                   [/.cjk_compatibility_forms]
                   [/.small_form_variants]
                   [/.arabic_presentation_forms_b]
                   [/.halfwidth_and_fullwidth_forms]
                   [/.specials]
                   [/.numeric]
                   [/.upper_case]
                   [/.lower_case]]
                  ))
            )))

(the .public documentation
  (List $.Documentation)
  (list.partial ($.module /._
                          "")

                ($.definition /.monoid)
                ($.definition /.start)
                ($.definition /.end)
                ($.definition /.size)
                ($.definition /.equality)
                ($.definition /.hash)

                ($.definition /.Block
                  "A block of valid unicode characters.")

                ($.definition /.block
                  ""
                  ($.example (' (block start additional))))

                ($.definition /.within?
                  ""
                  ($.example (' (within? block character))))

                (all list:composite
                     all_1/4
                     all_2/4
                     all_3/4
                     all_4/4
                     )
                ))
