# frozen_string_literal: true module Net class IMAP module StringPrep # Defined in RFC-4505[https://www.rfc-editor.org/rfc/rfc4505] §3, The +trace+ # profile of \StringPrep is used by the +ANONYMOUS+ \SASL mechanism. module Trace # Defined in RFC-4505[https://www.rfc-editor.org/rfc/rfc4505] §3. STRINGPREP_PROFILE = "trace" # >>> # The character repertoire of this profile is Unicode 3.2 [Unicode]. UNASSIGNED_TABLE = "A.1" # >>> # No mapping is required by this profile. MAPPING_TABLES = nil # >>> # No Unicode normalization is required by this profile. NORMALIZATION = nil # From RFC-4505[https://www.rfc-editor.org/rfc/rfc4505] §3, The "trace" # Profile of "Stringprep": # >>> # Characters from the following tables of [StringPrep] are prohibited: # # - C.2.1 (ASCII control characters) # - C.2.2 (Non-ASCII control characters) # - C.3 (Private use characters) # - C.4 (Non-character code points) # - C.5 (Surrogate codes) # - C.6 (Inappropriate for plain text) # - C.8 (Change display properties are deprecated) # - C.9 (Tagging characters) # # No additional characters are prohibited. PROHIBITED_TABLES = %w[C.2.1 C.2.2 C.3 C.4 C.5 C.6 C.8 C.9].freeze # >>> # This profile requires bidirectional character checking per Section 6 # of [StringPrep]. CHECK_BIDI = true module_function # From RFC-4505[https://www.rfc-editor.org/rfc/rfc4505] §3, The "trace" # Profile of "Stringprep": # >>> # The character repertoire of this profile is Unicode 3.2 [Unicode]. # # No mapping is required by this profile. # # No Unicode normalization is required by this profile. # # The list of unassigned code points for this profile is that provided # in Appendix A of [StringPrep]. Unassigned code points are not # prohibited. # # Characters from the following tables of [StringPrep] are prohibited: # (documented on PROHIBITED_TABLES) # # This profile requires bidirectional character checking per Section 6 # of [StringPrep]. def stringprep_trace(string, **opts) StringPrep.stringprep( string, unassigned: UNASSIGNED_TABLE, maps: MAPPING_TABLES, prohibited: PROHIBITED_TABLES, normalization: NORMALIZATION, bidi: CHECK_BIDI, profile: STRINGPREP_PROFILE, **opts, ) end end end end end