No time to explain :P

Run this:

FAMILIES = {
  regular:           '0x0041',
  circled:           '0x24B6',
  fraktur:           '0x1D504',
  squared_latin:     '0x1F130',
  math_double:       '0x1D538',
  math_bold:         '0x1D468',
  math_bold_fraktur: '0x1D56C',
  math_script:       '0x1D49C'
}


def codepoints_from_base(hexstr, spacer = '')
  a = hexstr.to_i(16)
  z = a + 25

  (a..z)
    .map{ |ord| [ord].pack('U') }
    .join(spacer)
end


longest_length = FAMILIES
                   .max_by{ |name, _| name.to_s.length }
                   .shift
                   .to_s
                   .length + 2
FAMILIES
  .map{ |fam_name, hexstr| "#{fam_name}:".ljust(longest_length) + codepoints_from_base(hexstr, ' ') }
  .join("\n")
  .tap{ |lines| puts lines }

Get this:

regular:           A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
circled:           Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
fraktur:           𝔄 𝔅 𝔆 𝔇 𝔈 𝔉 𝔊 𝔋 𝔌 𝔍 𝔎 𝔏 𝔐 𝔑 𝔒 𝔓 𝔔 𝔕 𝔖 𝔗 𝔘 𝔙 𝔚 𝔛 𝔜 𝔝
squared_latin:     🄰 🄱 🄲 🄳 🄴 🄵 🄶 🄷 🄸 🄹 🄺 🄻 🄼 🄽 🄾 🄿 🅀 🅁 🅂 🅃 🅄 🅅 🅆 🅇 🅈 🅉
math_double:       𝔸 𝔹 𝔺 𝔻 𝔼 𝔽 𝔾 𝔿 𝕀 𝕁 𝕂 𝕃 𝕄 𝕅 𝕆 𝕇 𝕈 𝕉 𝕊 𝕋 𝕌 𝕍 𝕎 𝕏 𝕐 𝕑
math_bold:         𝑨 𝑩 𝑪 𝑫 𝑬 𝑭 𝑮 𝑯 𝑰 𝑱 𝑲 𝑳 𝑴 𝑵 𝑶 𝑷 𝑸 𝑹 𝑺 𝑻 𝑼 𝑽 𝑾 𝑿 𝒀 𝒁
math_bold_fraktur: 𝕬 𝕭 𝕮 𝕯 𝕰 𝕱 𝕲 𝕳 𝕴 𝕵 𝕶 𝕷 𝕸 𝕹 𝕺 𝕻 𝕼 𝕽 𝕾 𝕿 𝖀 𝖁 𝖂 𝖃 𝖄 𝖅
math_script:       𝒜 𝒝 𝒞 𝒟 𝒠 𝒡 𝒢 𝒣 𝒤 𝒥 𝒦 𝒧 𝒨 𝒩 𝒪 𝒫 𝒬 𝒭 𝒮 𝒯 𝒰 𝒱 𝒲 𝒳 𝒴 𝒵