Andrew Yager wrote:
> Hi,
> 
> Is there a simple way to format a text string when writing? In
> particular I am interested in right aligning a variable width string.

For certain fonts with guaranteed character widths, this is possible
using a hash of all the characters widths.  For example, here's the
widths of helvetica and helvetica-bold:


  /*
   * This is an array of character widths for a few standard fonts.
   *
   * Included is "h" (helvetica) and "hb" (helvetica-bold).
   *
   * Each element is identified by the ascii decimal value of a
   * character as the key, and the width (wx) of the character as the
   * value.
   *
   * The widths are in thousandths of a point, so you can calculate a
   * characters width as follows:
   *
   *     pt_size_of_font * wx_value / 1000
   */
  public static $char_wx = array("h"  => array("32"  => "278",
                                               "33"  => "278",
                                               "34"  => "355",
                                               "35"  => "556",
                                               "36"  => "556",
                                               "37"  => "889",
                                               "38"  => "667",
                                               "39"  => "222",
                                               "40"  => "333",
                                               "41"  => "333",
                                               "42"  => "389",
                                               "43"  => "584",
                                               "44"  => "278",
                                               "45"  => "333",
                                               "46"  => "278",
                                               "47"  => "278",
                                               "48"  => "556",
                                               "49"  => "556",
                                               "50"  => "556",
                                               "51"  => "556",
                                               "52"  => "556",
                                               "53"  => "556",
                                               "54"  => "556",
                                               "55"  => "556",
                                               "56"  => "556",
                                               "57"  => "556",
                                               "58"  => "278",
                                               "59"  => "278",
                                               "60"  => "584",
                                               "61"  => "584",
                                               "62"  => "584",
                                               "63"  => "556",
                                               "64"  => "1015",
                                               "65"  => "667",
                                               "66"  => "667",
                                               "67"  => "722",
                                               "68"  => "722",
                                               "69"  => "667",
                                               "70"  => "611",
                                               "71"  => "778",
                                               "72"  => "722",
                                               "73"  => "278",
                                               "74"  => "500",
                                               "75"  => "667",
                                               "76"  => "556",
                                               "77"  => "833",
                                               "78"  => "722",
                                               "79"  => "778",
                                               "80"  => "667",
                                               "81"  => "778",
                                               "82"  => "722",
                                               "83"  => "667",
                                               "84"  => "611",
                                               "85"  => "722",
                                               "86"  => "667",
                                               "87"  => "944",
                                               "88"  => "667",
                                               "89"  => "667",
                                               "90"  => "611",
                                               "91"  => "278",
                                               "92"  => "278",
                                               "93"  => "278",
                                               "94"  => "469",
                                               "95"  => "556",
                                               "96"  => "222",
                                               "97"  => "556",
                                               "98"  => "556",
                                               "99"  => "500",
                                               "100" => "556",
                                               "101" => "556",
                                               "102" => "278",
                                               "103" => "556",
                                               "104" => "556",
                                               "105" => "222",
                                               "106" => "222",
                                               "107" => "500",
                                               "108" => "222",
                                               "109" => "833",
                                               "110" => "556",
                                               "111" => "556",
                                               "112" => "556",
                                               "113" => "556",
                                               "114" => "333",
                                               "115" => "500",
                                               "116" => "278",
                                               "117" => "556",
                                               "118" => "500",
                                               "119" => "722",
                                               "120" => "500",
                                               "121" => "500",
                                               "122" => "500",
                                               "123" => "334",
                                               "124" => "260",
                                               "125" => "334",
                                               "126" => "584",
                                               "161" => "333",
                                               "162" => "556",
                                               "163" => "556",
                                               "164" => "167",
                                               "165" => "556",
                                               "166" => "556",
                                               "167" => "556",
                                               "168" => "556",
                                               "169" => "191",
                                               "170" => "333",
                                               "171" => "556",
                                               "172" => "333",
                                               "173" => "333",
                                               "174" => "500",
                                               "175" => "500",
                                               "177" => "556",
                                               "178" => "556",
                                               "179" => "556",
                                               "180" => "278",
                                               "182" => "537",
                                               "183" => "350",
                                               "184" => "222",
                                               "185" => "333",
                                               "186" => "333",
                                               "187" => "556",
                                               "188" => "1000",
                                               "189" => "1000",
                                               "191" => "611",
                                               "193" => "333",
                                               "194" => "333",
                                               "195" => "333",
                                               "196" => "333",
                                               "197" => "333",
                                               "198" => "333",
                                               "199" => "333",
                                               "200" => "333",
                                               "202" => "333",
                                               "203" => "333",
                                               "205" => "333",
                                               "206" => "333",
                                               "207" => "333",
                                               "208" => "1000",
                                               "225" => "1000",
                                               "227" => "370",
                                               "232" => "556",
                                               "233" => "778",
                                               "234" => "1000",
                                               "235" => "365",
                                               "241" => "889",
                                               "245" => "278",
                                               "248" => "222",
                                               "249" => "611",
                                               "250" => "944",
                                               "251" => "611"),
                                 "hb" => array("32"  => "278",
                                               "33"  => "333",
                                               "34"  => "474",
                                               "35"  => "556",
                                               "36"  => "556",
                                               "37"  => "889",
                                               "38"  => "722",
                                               "39"  => "278",
                                               "40"  => "333",
                                               "41"  => "333",
                                               "42"  => "389",
                                               "43"  => "584",
                                               "44"  => "278",
                                               "45"  => "333",
                                               "46"  => "278",
                                               "47"  => "278",
                                               "48"  => "556",
                                               "49"  => "556",
                                               "50"  => "556",
                                               "51"  => "556",
                                               "52"  => "556",
                                               "53"  => "556",
                                               "54"  => "556",
                                               "55"  => "556",
                                               "56"  => "556",
                                               "57"  => "556",
                                               "58"  => "333",
                                               "59"  => "333",
                                               "60"  => "584",
                                               "61"  => "584",
                                               "62"  => "584",
                                               "63"  => "611",
                                               "64"  => "975",
                                               "65"  => "722",
                                               "66"  => "722",
                                               "67"  => "722",
                                               "68"  => "722",
                                               "69"  => "667",
                                               "70"  => "611",
                                               "71"  => "778",
                                               "72"  => "722",
                                               "73"  => "278",
                                               "74"  => "556",
                                               "75"  => "722",
                                               "76"  => "611",
                                               "77"  => "833",
                                               "78"  => "722",
                                               "79"  => "778",
                                               "80"  => "667",
                                               "81"  => "778",
                                               "82"  => "722",
                                               "83"  => "667",
                                               "84"  => "611",
                                               "85"  => "722",
                                               "86"  => "667",
                                               "87"  => "944",
                                               "88"  => "667",
                                               "89"  => "667",
                                               "90"  => "611",
                                               "91"  => "333",
                                               "92"  => "278",
                                               "93"  => "333",
                                               "94"  => "584",
                                               "95"  => "556",
                                               "96"  => "278",
                                               "97"  => "556",
                                               "98"  => "611",
                                               "99"  => "556",
                                               "100" => "611",
                                               "101" => "556",
                                               "102" => "333",
                                               "103" => "611",
                                               "104" => "611",
                                               "105" => "278",
                                               "106" => "278",
                                               "107" => "556",
                                               "108" => "278",
                                               "109" => "889",
                                               "110" => "611",
                                               "111" => "611",
                                               "112" => "611",
                                               "113" => "611",
                                               "114" => "389",
                                               "115" => "556",
                                               "116" => "333",
                                               "117" => "611",
                                               "118" => "556",
                                               "119" => "778",
                                               "120" => "556",
                                               "121" => "556",
                                               "122" => "500",
                                               "123" => "389",
                                               "124" => "280",
                                               "125" => "389",
                                               "126" => "584",
                                               "161" => "333",
                                               "162" => "556",
                                               "163" => "556",
                                               "164" => "167",
                                               "165" => "556",
                                               "166" => "556",
                                               "167" => "556",
                                               "168" => "556",
                                               "169" => "238",
                                               "170" => "500",
                                               "171" => "556",
                                               "172" => "333",
                                               "173" => "333",
                                               "174" => "611",
                                               "175" => "611",
                                               "177" => "556",
                                               "178" => "556",
                                               "179" => "556",
                                               "180" => "278",
                                               "182" => "556",
                                               "183" => "350",
                                               "184" => "278",
                                               "185" => "500",
                                               "186" => "500",
                                               "187" => "556",
                                               "188" => "1000",
                                               "189" => "1000",
                                               "191" => "611",
                                               "193" => "333",
                                               "194" => "333",
                                               "195" => "333",
                                               "196" => "333",
                                               "197" => "333",
                                               "198" => "333",
                                               "199" => "333",
                                               "200" => "333",
                                               "202" => "333",
                                               "203" => "333",
                                               "205" => "333",
                                               "206" => "333",
                                               "207" => "333",
                                               "208" => "1000",
                                               "225" => "1000",
                                               "227" => "370",
                                               "232" => "611",
                                               "233" => "778",
                                               "234" => "1000",
                                               "235" => "365",
                                               "241" => "889",
                                               "245" => "278",
                                               "248" => "278",
                                               "249" => "611",
                                               "250" => "944",
                                               "251" => "611"));


--
Drew

Reply via email to