#!/usr/bin/env bash

cat <<ENDS
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Unicode Codepoint Chart</title>
<link rel="stylesheet" type="text/css" href="/trove/simple.css" />
<style type="text/css">
<!-- 
a[onclick] { color: #00e; 
             cursor: pointer; 
             text-decoration: underline; }
table { font-size: 1.2em; }
td { margin: 0em; padding: 0.1em; 
     border: 1px solid #eeeeee; 
     text-align: center; }
td a { color: #000; 
       text-decoration: none; }
-->
</style>
<script type="text/javascript">
<!-- 
function hex(i) { 
   hexcode = i.toString(16)
   hexcode = hexcode.toUpperCase(); 

   if (hexcode.length == 1) 
      hexcode = '000' + hexcode; 
   else if (hexcode.length == 2) 
      hexcode = '00' + hexcode; 
   else if (hexcode.length == 3) 
      hexcode = '0' + hexcode; 

   return hexcode; 
}

function show(lower, upper) {
   hexcode = hex(lower); 
   div = document.getElementById('U' + hexcode); 

   if (div.innerHTML == '') { 
      output = '<table>\n<tr>'; 
      fileformat = 'http://fileformat.info/info/unicode/char/'; 
      for (i = lower; i < upper; i++) { 
         hexcode = hex(i); 
         output = output + '<td><a href="' + fileformat + hexcode + '/">'; 
         output = output + '&#x' + hexcode + ';</a></td>'; 
         if ((i % 32) == 31) output = output + '</tr>\n<tr>'; 
      }
      div.innerHTML = output; 
   } else { div.innerHTML = ''; }
}
// -->
</script>
</head>
<body>
<div class="nav">
<a href="/"><img src="/trove/logo" alt="inamidst.com" /></a>
</div>
<h1>Unicode Codepoint Chart</h1>
<ul>
ENDS

function main() { 
   while true
      do read FROM TO NAME || break
         echo "<li><code>U+$FROM</code> to <code>U+$TO</code>:"
         echo "    <a onclick=\"show(0x$FROM, 0x$TO)\">$NAME</a>"
         echo "    <div id=\"U$FROM\"></div></li>"
      done
}

cat <<ENDS | main
0000 007F Basic Latin
0080 00FF Latin-1 Supplement
0100 017F Latin Extended-A
0180 024F Latin Extended-B
0250 02AF IPA Extensions
02B0 02FF Spacing Modifier Letters
0300 036F Combining Diacritical Marks
0370 03FF Greek and Coptic
0400 04FF Cyrillic
0500 052F Cyrillic Supplement
0530 058F Armenian
0590 05FF Hebrew
0600 06FF Arabic
0700 074F Syriac
0750 077F Arabic Supplement
0780 07BF Thaana
0900 097F Devanagari
0980 09FF Bengali
0A00 0A7F Gurmukhi
0A80 0AFF Gujarati
0B00 0B7F Oriya
0B80 0BFF Tamil
0C00 0C7F Telugu
0C80 0CFF Kannada
0D00 0D7F Malayalam
0D80 0DFF Sinhala
0E00 0E7F Thai
0E80 0EFF Lao
0F00 0FFF Tibetan
1000 109F Myanmar
10A0 10FF Georgian
1100 11FF Hangul Jamo
1200 137F Ethiopic
1380 139F Ethiopic Supplement
13A0 13FF Cherokee
1400 167F Unified Canadian Aboriginal Syllabics
1680 169F Ogham
16A0 16FF Runic
1700 171F Tagalog
1720 173F Hanunoo
1740 175F Buhid
1760 177F Tagbanwa
1780 17FF Khmer
1800 18AF Mongolian
1900 194F Limbu
1950 197F Tai Le
1980 19DF New Tai Lue
19E0 19FF Khmer Symbols
1A00 1A1F Buginese
1D00 1D7F Phonetic Extensions
1D80 1DBF Phonetic Extensions Supplement
1DC0 1DFF Combining Diacritical Marks Supplement
1E00 1EFF Latin Extended Additional
1F00 1FFF Greek Extended
2000 206F General Punctuation
2070 209F Superscripts and Subscripts
20A0 20CF Currency Symbols
20D0 20FF Combining Diacritical Marks for Symbols
2100 214F Letterlike Symbols
2150 218F Number Forms
2190 21FF Arrows
2200 22FF Mathematical Operators
2300 23FF Miscellaneous Technical
2400 243F Control Pictures
2440 245F Optical Character Recognition
2460 24FF Enclosed Alphanumerics
2500 257F Box Drawing
2580 259F Block Elements
25A0 25FF Geometric Shapes
2600 26FF Miscellaneous Symbols
2700 27BF Dingbats
27C0 27EF Miscellaneous Mathematical Symbols-A
27F0 27FF Supplemental Arrows-A
2800 28FF Braille Patterns
2900 297F Supplemental Arrows-B
2980 29FF Miscellaneous Mathematical Symbols-B
2A00 2AFF Supplemental Mathematical Operators
2B00 2BFF Miscellaneous Symbols and Arrows
2C00 2C5F Glagolitic
2C80 2CFF Coptic
2D00 2D2F Georgian Supplement
2D30 2D7F Tifinagh
2D80 2DDF Ethiopic Extended
2E00 2E7F Supplemental Punctuation
2E80 2EFF CJK Radicals Supplement
2F00 2FDF Kangxi Radicals
2FF0 2FFF Ideographic Description Characters
3000 303F CJK Symbols and Punctuation
3040 309F Hiragana
30A0 30FF Katakana
3100 312F Bopomofo
3130 318F Hangul Compatibility Jamo
3190 319F Kanbun
31A0 31BF Bopomofo Extended
31C0 31EF CJK Strokes
31F0 31FF Katakana Phonetic Extensions
3200 32FF Enclosed CJK Letters and Months
3300 33FF CJK Compatibility
3400 4DBF CJK Unified Ideographs Extension A
4DC0 4DFF Yijing Hexagram Symbols
4E00 9FFF CJK Unified Ideographs
A000 A48F Yi Syllables
A490 A4CF Yi Radicals
A700 A71F Modifier Tone Letters
A800 A82F Syloti Nagri
AC00 D7AF Hangul Syllables
D800 DB7F High Surrogates
DB80 DBFF High Private Use Surrogates
DC00 DFFF Low Surrogates
E000 F8FF Private Use Area
F900 FAFF CJK Compatibility Ideographs
FB00 FB4F Alphabetic Presentation Forms
FB50 FDFF Arabic Presentation Forms-A
FE00 FE0F Variation Selectors
FE10 FE1F Vertical Forms
FE20 FE2F Combining Half Marks
FE30 FE4F CJK Compatibility Forms
FE50 FE6F Small Form Variants
FE70 FEFF Arabic Presentation Forms-B
FF00 FFEF Halfwidth and Fullwidth Forms
FFF0 FFFF Specials
ENDS

cat <<ENDS
</ul>

<p>Generated by <a href="unidata.sh">unidata.sh</a> (<a 
href="Makefile">Makefile</a>).</p>

<address>
<a href="http://inamidst.com/sbp/">Sean B. Palmer</a>
</address>
</body>
</html>
ENDS

# [EOF]
