% Blackboard bold punctuation, Alan Jeffrey, 13--18 Dec 1989.

% -------------------------------------------------------------------

bbcap
   ("!") 
   (biggap#, tiny#, biggap#);

   fatsymmetric;

   "Exclamation mark `!'";

   % The vertical.
   draw
      fatten
         Top~Middle 
            -- (Bottom + space + fatness)~Middle;

   % The dot.
   draw
      splodge
         above Bottom~Middle

endchar;

% -------------------------------------------------------------------

bbchar
   ("#")
   (medgap#, arithmetic#, medgap#)
   (ATop#, gBottom#);

   "The hash sign `#'";

   % The top line.
   draw
      (Horizon + space)~Left
         -- (Horizon + space)~Right;

   % The bottom line.
   draw
      (Horizon - space)~Left
         -- (Horizon - space)~Right;
         
   % The right vertical.
   draw
      rightof Top~(Middle + space)
         -- rightof Bottom~(Middle + space);

   % The left vertical.
   outline
      fatten
         rightof Top~(Middle - space)
            -- rightof Bottom~(Middle - space)

endchar;

% -------------------------------------------------------------------

bbchar
   ("$")
   (medgap#, smallcap#, medgap#)
   (ATop# + jut#, aBottom# - jut#);

   fatsymmetric;

   "Dollar sign `$'";

   % The path of the S.
   draw
      (Top - CCurl)~Right
        .. ATop~Middle              {left}
        .. (ATop -+- BBar)~Left     {down}
        .. BBar~Middle              {right}
        .. (BBar -+- aBottom)~Right {down}
        .. aBottom~Middle           {left}
        .. (Bottom + CCurl)~Left;

   % The vertical.
   outline
      fatten
         Bottom~Middle
            -- Top~Middle

endchar;

% -------------------------------------------------------------------

bbchar
   ("%")
   (medgap#, smallcap#, medgap#)
   (bracketTop#, aBottom# + aTop# - bracketTop#);

   fatsymmetric;

   "Per cent sign `%'";

   % The dot at top left.
   draw
      splodge
         below rightof Top~Left;

   % The dot at bottom right.
   draw
      splodge
         above leftof Bottom~Right;

   % The diagonal.
   draw
      fatten
         rightof Bottom~Left
            -- leftof Top~Right

endchar;

% -------------------------------------------------------------------

bbchar
   ("&")
   (medgap#, arithmetic#, medgap#)
   (ATop#, aBottom#);

   "Ampersand `&'";
   
   % z1 is the top point at which the curls cross.  It is somewhere
   % between the top point and the bottom point, and is at aTop.
   
   z1 = whatever[leftof Top~Middle, Bottom~(Left -+- Middle)];
   y1 = aTop;
   
   % The curve.
   var (path) ampersandpath;
   
   ampersandpath 
      = (Bottom + cCurl)~Right
           .. obelow Bottom~(Right - jut) {left}
           ... z1
           .. oabove leftof Top~Middle {right}
           .. z1
           .. aMiddle~Left {down}
           .. obelow Bottom~(Left -+- Middle) {right}
           .. aMiddle~(Right - space);

   % The emphasis.
   draw
      fatcliptwice
         (obelow rightof Bottom~Left -- rightof Top~Left)
         (ampersandpath);

   % The curve.
   draw ampersandpath

endchar;

% -------------------------------------------------------------------

bbchar 
   ("'")
   (medgap#, tiny#, medgap#)
   (bTop#, bTop# - tiny# - comma_depth#);

   fatsymmetric;

   "Apostrophe `''";

   % The dot and tail.
   draw
      splodger below Top~Middle
         .. Bottom~Left

endchar;

% -------------------------------------------------------------------

bbchar 
   ("(") 
   (biggap#, tiny# + jut#, smallgap#) 
   (bracketTop#, bracketBottom#);

   "Left bracket `('";

   % The emphasis.
   draw
      fatcliptwice
         (rightof Bottom~Left -- rightof Top~Left)
         (Bottom~Right {left} .. Horizon~Left .. Top~Right {right});

   % The curve.
   draw
      Bottom~Right {left}
         .. Horizon~Left 
         .. Top~Right {right}

endchar;

% -------------------------------------------------------------------

bbchar 
   (")") 
   (smallgap#, tiny# + jut#, biggap#) 
   (bracketTop#, bracketBottom#);

   "Right bracket `)'";

   % The emphasis.
   draw
      fatcliptwice
         (leftof Bottom~Right -- leftof Top~Right)
         (Bottom~Left {right} .. Horizon~Right .. Top~Left {left});

   % The curve.
   draw
      Bottom~Left {right}
         .. Horizon~Right 
         .. Top~Left {left}

endchar;

% -------------------------------------------------------------------

bbchar 
   ("*") 
   (medgap#, (sqrt3)/2 * arithmetic#, medgap#)
   (math_axis# + 1/2arithmetic#, math_axis# - 1/2arithmetic#)

   fatsymmetric;

   "Star `*'";
   
   % The distance from the top of the character to the top of the diagonals.
   var (numeric) adistance;
   adistance = round ((Top - Horizon) / 2);

   % The NW diagonal.
   draw
      (Bottom + adistance)~Right
         -- (Top - adistance)~Left;

   % The NE diagonal.
   draw
      (Bottom + adistance)~Left
         -- (Top -adistance)~Right;

   % The vertical, fattened.
   outline
      fatten
         Bottom~Middle
            -- Top~Middle

endchar;

% -------------------------------------------------------------------

bbchar 
   ("+") 
   (medgap#, arithmetic#, medgap#)
   (math_axis# + 1/2arithmetic#, math_axis# - 1/2arithmetic#)

   "Plus sign `+'";
   
   % The horizontal line.
   draw
      Horizon~Left
         -- Horizon~Right;

   % The vertical, fattened.
   outline
      fatten
         Bottom~Middle
            -- Top~Middle

endchar;

% -------------------------------------------------------------------

bbchar 
   (",")
   (medgap#, tiny#, medgap#)
   (aBottom# + tiny#, aBottom# - comma_depth#);

   fatsymmetric;

   "Comma `,'";

   % The dot and tail.
   draw
      splodger above aBottom~Middle
         .. Bottom~Left

endchar;

% -------------------------------------------------------------------

bbchar 
   ("-")
   (smallgap#, smalllower#, medgap#)
   (aTop#, aBottom#);

   "Hyphen `-'";

   % The line.
   draw
      Horizon~Left
         -- Horizon~Right

endchar;

% -------------------------------------------------------------------

bbchar 
   (".")
   (medgap#, tiny#, medgap#)
   (aBottom# + tiny#, aBottom#);

   fatsymmetric;

   "Full stop `.'";

   % The dot.
   draw
      splodge
         above Bottom~Middle

endchar;

% -------------------------------------------------------------------

bbchar
   ("/")
   (smallgap#, smallcap#, smallgap#)
   (bracketTop#, bracketBottom#);

   "Virgule (slash) `/'";

   % The line.
   draw
      fatten
         rightof Bottom~Left
           -- leftof Top~Right

endchar;

% -------------------------------------------------------------------

bbchar 
   (":")
   (medgap#, tiny#, medgap#)
   (aTop#, aBottom#);

   fatsymmetric;

   "Colon `:'";

   % The top dot.
   draw
      splodge
         below Top~Middle;

   % The bottom dot.
   draw 
      splodge
         above Bottom~Middle

endchar;

% -------------------------------------------------------------------

bbchar
   (";")
   (medgap#, tiny#, medgap#)
   (aTop#, aBottom# - comma_depth#);

   fatsymmetric;

   "Semicolon `;'";

   % The upper dot.
   draw
      splodge
         below Top~Middle;

   % The lower dot and tail.
   draw
      splodger above aBottom~Middle
         .. Bottom~Left

endchar;

% -------------------------------------------------------------------

beginblacker 1.5;
bbchar 
   ("<")
   (biggap#, arithmetic#, biggap#)
   (math_axis# + 1/2lessthan#, math_axis# - 1/2lessthan#);

   "Less than sign `<'";
   
   % The top diagonal.
   draw
      Top~Right 
         --- Horizon~Left;

   % The bottom diagonal, fattened, and clipped by the top.
   % We need to carry on the diagonal past where it started,
   % so we extend it up to the top of the character.
   draw
      fatcliponce
         (leftof Bottom~Right 
             --- rightof Horizon~Left
             .. farrightof Top~(2Left - Right))
         (Top~Right -- Horizon~Left)

endchar;
endblacker;

% -------------------------------------------------------------------

bbchar
   ("=")
   (medgap#, tiny#, medgap#)
   (math_axis# + 1/2tiny#, math_axis# - 1/2tiny#);

   fatsymmetric;

   "Centred dot";
   
   % The dot.
   draw
      splodge
         above Bottom~Middle

endchar;

% -------------------------------------------------------------------

beginblacker 1.5;

bbchar 
   (">")
   (biggap#, arithmetic#, biggap#)
   (math_axis# + 1/2lessthan#, math_axis# - 1/2lessthan#);

   "Greater than sign `>'";
   
   % The top diagonal.
   draw
      Top~Left 
         --- Horizon~Right;

   % The bottom diagonal, fattened, and clipped by the top.
   % We need to carry on the diagonal past where it started,
   % so we extend it up to the top of the character.
   draw
      fatcliponce
         (rightof Bottom~Left 
             --- leftof Horizon~Right
             .. farleftof Top~(2Right - Left))
         (Top~Left -- Horizon~Right)

endchar;
endblacker;

% -------------------------------------------------------------------

bbcap
   ("?")
   (medgap#, smallcap#, medgap#);

   fatsymmetric;

   "Question mark `?'";

   % The height of the bottom of the curl.
   var (numeric) curlBottom;

   curlBottom = Bottom + fatness + space;

   % The curl.
   var (path) questionpath;
   
   questionpath 
      = (Top - CCurl)~Left
           .. oabove Top~Middle {right}
           .. (1/3[Top, curlBottom])~Right {down}
           .. rightof (2/3[Top, curlBottom])~Middle {left}
           .. leftof curlBottom~Middle {down};

   draw questionpath;
   
   % The emphasis, clipped with the bottom bit of the question path.
   draw
      fatcliponce
         (curlBottom~Middle -- oabove Top~Middle)
         (subpath (2, infinity) of questionpath);

   % The dot.
   draw
      splodge
         above Bottom~Middle

endchar;

% -------------------------------------------------------------------

bbchar 
   ("@")
   (medgap#, tiny# + 2fatness#, medgap#)
   (ATop#, aBottom#);

   "At sign `@'";
   
   % The curl.
   var (path) atpath;
   
   atpath 
      = (Bottom + CCurl)~Right
           .. obelow Bottom~Middle {left}
           .. Horizon~Left {up}
           .. oabove Top~Middle {right}
           .. splodger leftof Horizon~Right;

   % The emphasis.
   draw
      fatcliptwice
         (obelow rightof Bottom~Left -- oabove rightof Top~Left)
         (atpath);

   % The curl.
   draw atpath
   
endchar;

% -------------------------------------------------------------------

bbchar 
   ("[") 
   (biggap#, tiny# + jut#, smallgap#) 
   (bracketTop#, bracketBottom#);

   "Left square bracket `['";

   % The vertical.
   draw
      fatten
         rightof Bottom~Left 
            -- rightof Top~Left;

   % The top line.
   draw
      Top~Left 
         -- Top~Right;

   % The bottom line.
   draw 
      Bottom~Left
         -- Bottom~Right

endchar;

% -------------------------------------------------------------------

bbchar
   ("\")
   (smallgap#, smallcap#, smallgap#)
   (bracketTop#, bracketBottom#);
 
   "Reverse slash `\'";

   % The line.
   draw
      fatten
         leftof Bottom~Right
           -- rightof Top~Left

endchar;

% -------------------------------------------------------------------

bbchar 
   ("]") 
   (smallgap#, tiny# + jut#, biggap#) 
   (bracketTop#, bracketBottom#);

   "Right square bracket `]'";

   % The vertical.
   draw
      fatten
         leftof Bottom~Right 
            -- leftof Top~Right;

   % The top line.
   draw
      Top~Left 
         -- Top~Right;

   % The bottom line.
   draw 
      Bottom~Left
         -- Bottom~Right

endchar;

% -------------------------------------------------------------------

beginblacker 1.25;
bbchar
   ("^")
   (biggap#, tiny# + jut#, smallgap#)
   (bracketTop#, bracketBottom#);

   "Left angle bracket";

   % The emphasis, clipped by the bracket.
   draw
      fatcliptwice
         (rightof Bottom~Left -- rightof Top~Left)
         (Bottom~Right -- Horizon~Left -- Top~Right);

   % The bracket.
   draw
      Bottom~Right
         -- Horizon~Left 
         -- Top~Right

endchar;
endblacker;

% -------------------------------------------------------------------

beginblacker 1.25;
bbchar
   ("_")
   (smallgap#, tiny# + jut#, biggap#)
   (bracketTop#, bracketBottom#);

   "Right angle bracket";

   % The emphasis, clipped by the bracket.
   draw
      fatcliptwice
         (leftof Bottom~Right -- leftof Top~Right)
         (Bottom~Left -- Horizon~Right -- Top~Left);

   % The bracket.
   draw
      Bottom~Left
         -- Horizon~Right
         -- Top~Left

endchar;
endblacker;

% -------------------------------------------------------------------

bbchar 
   ("`")
   (medgap#, tiny#, medgap#)
   (bTop#, bTop# - tiny# - comma_depth#);

   fatsymmetric;

   "Reverse apostrophe ``'";

   % The dot and tail.
   draw
      splodgel above Bottom~Middle
         .. Top~Right

endchar;

% -------------------------------------------------------------------

bbchar
   ("|")
   (biggap#, tiny#, biggap#)
   (bracketTop#, bracketBottom#);

   "Vertical bar `|'";

   % The line.
   draw
      fatten
         Bottom~Middle
            -- Top~Middle

endchar;

% -------------------------------------------------------------------

