add ArialNarrow, update to 255 max char

[git-p4: depot-paths = "//depot/code/antlr4/main/": change = 9190]
This commit is contained in:
parrt 2011-10-25 08:52:14 -08:00
parent 490cec9af6
commit fc85072851
8 changed files with 534 additions and 16 deletions

View File

@ -31,7 +31,7 @@ package org.antlr.v4.runtime.tree.gui;
public class Arial extends BasicFontMetrics {
{
maxCharHeight = 781;
maxCharHeight = 896;
widths[32] = 277; // space
widths[33] = 277; // exclam
widths[34] = 354; // quotedbl
@ -127,5 +127,101 @@ public class Arial extends BasicFontMetrics {
widths[124] = 259; // bar
widths[125] = 333; // braceright
widths[126] = 583; // asciitilde
widths[160] = 277; // nbspace
widths[161] = 333; // exclamdown
widths[162] = 556; // cent
widths[163] = 556; // sterling
widths[164] = 556; // currency
widths[165] = 556; // yen
widths[166] = 259; // brokenbar
widths[167] = 556; // section
widths[168] = 333; // dieresis
widths[169] = 736; // copyright
widths[170] = 370; // ordfeminine
widths[171] = 556; // guillemotleft
widths[172] = 583; // logicalnot
widths[173] = 333; // sfthyphen
widths[174] = 736; // registered
widths[175] = 552; // overscore
widths[176] = 399; // degree
widths[177] = 548; // plusminus
widths[178] = 333; // twosuperior
widths[179] = 333; // threesuperior
widths[180] = 333; // acute
widths[181] = 576; // mu1
widths[182] = 537; // paragraph
widths[183] = 333; // middot
widths[184] = 333; // cedilla
widths[185] = 333; // onesuperior
widths[186] = 365; // ordmasculine
widths[187] = 556; // guillemotright
widths[188] = 833; // onequarter
widths[189] = 833; // onehalf
widths[190] = 833; // threequarters
widths[191] = 610; // questiondown
widths[192] = 666; // Agrave
widths[193] = 666; // Aacute
widths[194] = 666; // Acircumflex
widths[195] = 666; // Atilde
widths[196] = 666; // Adieresis
widths[197] = 666; // Aring
widths[198] = 1000; // AE
widths[199] = 722; // Ccedilla
widths[200] = 666; // Egrave
widths[201] = 666; // Eacute
widths[202] = 666; // Ecircumflex
widths[203] = 666; // Edieresis
widths[204] = 277; // Igrave
widths[205] = 277; // Iacute
widths[206] = 277; // Icircumflex
widths[207] = 277; // Idieresis
widths[208] = 722; // Eth
widths[209] = 722; // Ntilde
widths[210] = 777; // Ograve
widths[211] = 777; // Oacute
widths[212] = 777; // Ocircumflex
widths[213] = 777; // Otilde
widths[214] = 777; // Odieresis
widths[215] = 583; // multiply
widths[216] = 777; // Oslash
widths[217] = 722; // Ugrave
widths[218] = 722; // Uacute
widths[219] = 722; // Ucircumflex
widths[220] = 722; // Udieresis
widths[221] = 666; // Yacute
widths[222] = 666; // Thorn
widths[223] = 610; // germandbls
widths[224] = 556; // agrave
widths[225] = 556; // aacute
widths[226] = 556; // acircumflex
widths[227] = 556; // atilde
widths[228] = 556; // adieresis
widths[229] = 556; // aring
widths[230] = 889; // ae
widths[231] = 500; // ccedilla
widths[232] = 556; // egrave
widths[233] = 556; // eacute
widths[234] = 556; // ecircumflex
widths[235] = 556; // edieresis
widths[236] = 277; // igrave
widths[237] = 277; // iacute
widths[238] = 277; // icircumflex
widths[239] = 277; // idieresis
widths[240] = 556; // eth
widths[241] = 556; // ntilde
widths[242] = 556; // ograve
widths[243] = 556; // oacute
widths[244] = 556; // ocircumflex
widths[245] = 556; // otilde
widths[246] = 556; // odieresis
widths[247] = 548; // divide
widths[248] = 610; // oslash
widths[249] = 556; // ugrave
widths[250] = 556; // uacute
widths[251] = 556; // ucircumflex
widths[252] = 556; // udieresis
widths[253] = 500; // yacute
widths[254] = 556; // thorn
widths[255] = 500; // ydieresis
}
}

View File

@ -31,7 +31,7 @@ package org.antlr.v4.runtime.tree.gui;
public class ArialBlack extends BasicFontMetrics {
{
maxCharHeight = 770;
maxCharHeight = 905;
widths[32] = 333; // space
widths[33] = 333; // exclam
widths[34] = 500; // quotedbl
@ -127,5 +127,101 @@ public class ArialBlack extends BasicFontMetrics {
widths[124] = 277; // bar
widths[125] = 389; // braceright
widths[126] = 660; // asciitilde
widths[160] = 333; // nbspace
widths[161] = 333; // exclamdown
widths[162] = 666; // cent
widths[163] = 666; // sterling
widths[164] = 660; // currency
widths[165] = 666; // yen
widths[166] = 277; // brokenbar
widths[167] = 666; // section
widths[168] = 333; // dieresis
widths[169] = 799; // copyright
widths[170] = 399; // ordfeminine
widths[171] = 666; // guillemotleft
widths[172] = 660; // logicalnot
widths[173] = 333; // sfthyphen
widths[174] = 799; // registered
widths[175] = 500; // overscore
widths[176] = 399; // degree
widths[177] = 660; // plusminus
widths[178] = 399; // twosuperior
widths[179] = 399; // threesuperior
widths[180] = 333; // acute
widths[181] = 666; // mu1
widths[182] = 850; // paragraph
widths[183] = 333; // middot
widths[184] = 333; // cedilla
widths[185] = 399; // onesuperior
widths[186] = 399; // ordmasculine
widths[187] = 666; // guillemotright
widths[188] = 1000; // onequarter
widths[189] = 1000; // onehalf
widths[190] = 1000; // threequarters
widths[191] = 610; // questiondown
widths[192] = 777; // Agrave
widths[193] = 777; // Aacute
widths[194] = 777; // Acircumflex
widths[195] = 777; // Atilde
widths[196] = 777; // Adieresis
widths[197] = 777; // Aring
widths[198] = 1000; // AE
widths[199] = 777; // Ccedilla
widths[200] = 722; // Egrave
widths[201] = 722; // Eacute
widths[202] = 722; // Ecircumflex
widths[203] = 722; // Edieresis
widths[204] = 389; // Igrave
widths[205] = 389; // Iacute
widths[206] = 389; // Icircumflex
widths[207] = 389; // Idieresis
widths[208] = 777; // Eth
widths[209] = 833; // Ntilde
widths[210] = 833; // Ograve
widths[211] = 833; // Oacute
widths[212] = 833; // Ocircumflex
widths[213] = 833; // Otilde
widths[214] = 833; // Odieresis
widths[215] = 660; // multiply
widths[216] = 833; // Oslash
widths[217] = 833; // Ugrave
widths[218] = 833; // Uacute
widths[219] = 833; // Ucircumflex
widths[220] = 833; // Udieresis
widths[221] = 777; // Yacute
widths[222] = 722; // Thorn
widths[223] = 666; // germandbls
widths[224] = 666; // agrave
widths[225] = 666; // aacute
widths[226] = 666; // acircumflex
widths[227] = 666; // atilde
widths[228] = 666; // adieresis
widths[229] = 666; // aring
widths[230] = 1000; // ae
widths[231] = 666; // ccedilla
widths[232] = 666; // egrave
widths[233] = 666; // eacute
widths[234] = 666; // ecircumflex
widths[235] = 666; // edieresis
widths[236] = 333; // igrave
widths[237] = 333; // iacute
widths[238] = 333; // icircumflex
widths[239] = 333; // idieresis
widths[240] = 666; // eth
widths[241] = 666; // ntilde
widths[242] = 666; // ograve
widths[243] = 666; // oacute
widths[244] = 666; // ocircumflex
widths[245] = 666; // otilde
widths[246] = 666; // odieresis
widths[247] = 660; // divide
widths[248] = 666; // oslash
widths[249] = 666; // ugrave
widths[250] = 666; // uacute
widths[251] = 666; // ucircumflex
widths[252] = 666; // udieresis
widths[253] = 610; // yacute
widths[254] = 666; // thorn
widths[255] = 610; // ydieresis
}
}

View File

@ -0,0 +1,227 @@
/*
[The "BSD license"]
Copyright (c) 2011 Terence Parr
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.antlr.v4.runtime.tree.gui;
public class ArialNarrow extends BasicFontMetrics {
{
maxCharHeight = 921;
widths[32] = 228; // space
widths[33] = 228; // exclam
widths[34] = 291; // quotedbl
widths[35] = 456; // numbersign
widths[36] = 456; // dollar
widths[37] = 729; // percent
widths[38] = 546; // ampersand
widths[39] = 157; // quotesingle
widths[40] = 272; // parenleft
widths[41] = 272; // parenright
widths[42] = 318; // asterisk
widths[43] = 479; // plus
widths[44] = 228; // comma
widths[45] = 272; // hyphen
widths[46] = 228; // period
widths[47] = 228; // slash
widths[48] = 456; // zero
widths[49] = 456; // one
widths[50] = 456; // two
widths[51] = 456; // three
widths[52] = 456; // four
widths[53] = 456; // five
widths[54] = 456; // six
widths[55] = 456; // seven
widths[56] = 456; // eight
widths[57] = 456; // nine
widths[58] = 228; // colon
widths[59] = 228; // semicolon
widths[60] = 479; // less
widths[61] = 479; // equal
widths[62] = 479; // greater
widths[63] = 456; // question
widths[64] = 832; // at
widths[65] = 546; // A
widths[66] = 546; // B
widths[67] = 591; // C
widths[68] = 591; // D
widths[69] = 546; // E
widths[70] = 500; // F
widths[71] = 638; // G
widths[72] = 591; // H
widths[73] = 228; // I
widths[74] = 410; // J
widths[75] = 546; // K
widths[76] = 456; // L
widths[77] = 683; // M
widths[78] = 591; // N
widths[79] = 638; // O
widths[80] = 546; // P
widths[81] = 638; // Q
widths[82] = 591; // R
widths[83] = 546; // S
widths[84] = 500; // T
widths[85] = 591; // U
widths[86] = 546; // V
widths[87] = 773; // W
widths[88] = 546; // X
widths[89] = 546; // Y
widths[90] = 500; // Z
widths[91] = 228; // bracketleft
widths[92] = 228; // backslash
widths[93] = 228; // bracketright
widths[94] = 384; // asciicircum
widths[95] = 456; // underscore
widths[96] = 272; // grave
widths[97] = 456; // a
widths[98] = 456; // b
widths[99] = 410; // c
widths[100] = 456; // d
widths[101] = 456; // e
widths[102] = 228; // f
widths[103] = 456; // g
widths[104] = 456; // h
widths[105] = 182; // i
widths[106] = 182; // j
widths[107] = 410; // k
widths[108] = 182; // l
widths[109] = 683; // m
widths[110] = 456; // n
widths[111] = 456; // o
widths[112] = 456; // p
widths[113] = 456; // q
widths[114] = 272; // r
widths[115] = 410; // s
widths[116] = 228; // t
widths[117] = 456; // u
widths[118] = 410; // v
widths[119] = 591; // w
widths[120] = 410; // x
widths[121] = 410; // y
widths[122] = 410; // z
widths[123] = 273; // braceleft
widths[124] = 212; // bar
widths[125] = 273; // braceright
widths[126] = 479; // asciitilde
widths[160] = 228; // nbspace
widths[161] = 272; // exclamdown
widths[162] = 456; // cent
widths[163] = 456; // sterling
widths[164] = 456; // currency
widths[165] = 456; // yen
widths[166] = 212; // brokenbar
widths[167] = 456; // section
widths[168] = 272; // dieresis
widths[169] = 604; // copyright
widths[170] = 303; // ordfeminine
widths[171] = 456; // guillemotleft
widths[172] = 479; // logicalnot
widths[173] = 272; // sfthyphen
widths[174] = 604; // registered
widths[175] = 500; // overscore
widths[176] = 399; // degree
widths[177] = 548; // plusminus
widths[178] = 272; // twosuperior
widths[179] = 272; // threesuperior
widths[180] = 272; // acute
widths[181] = 576; // mu1
widths[182] = 439; // paragraph
widths[183] = 271; // middot
widths[184] = 272; // cedilla
widths[185] = 272; // onesuperior
widths[186] = 298; // ordmasculine
widths[187] = 456; // guillemotright
widths[188] = 684; // onequarter
widths[189] = 684; // onehalf
widths[190] = 684; // threequarters
widths[191] = 500; // questiondown
widths[192] = 546; // Agrave
widths[193] = 546; // Aacute
widths[194] = 546; // Acircumflex
widths[195] = 546; // Atilde
widths[196] = 546; // Adieresis
widths[197] = 546; // Aring
widths[198] = 819; // AE
widths[199] = 591; // Ccedilla
widths[200] = 546; // Egrave
widths[201] = 546; // Eacute
widths[202] = 546; // Ecircumflex
widths[203] = 546; // Edieresis
widths[204] = 228; // Igrave
widths[205] = 228; // Iacute
widths[206] = 228; // Icircumflex
widths[207] = 228; // Idieresis
widths[208] = 591; // Eth
widths[209] = 591; // Ntilde
widths[210] = 638; // Ograve
widths[211] = 638; // Oacute
widths[212] = 638; // Ocircumflex
widths[213] = 638; // Otilde
widths[214] = 638; // Odieresis
widths[215] = 479; // multiply
widths[216] = 638; // Oslash
widths[217] = 591; // Ugrave
widths[218] = 591; // Uacute
widths[219] = 591; // Ucircumflex
widths[220] = 591; // Udieresis
widths[221] = 546; // Yacute
widths[222] = 546; // Thorn
widths[223] = 500; // germandbls
widths[224] = 456; // agrave
widths[225] = 456; // aacute
widths[226] = 456; // acircumflex
widths[227] = 456; // atilde
widths[228] = 456; // adieresis
widths[229] = 456; // aring
widths[230] = 729; // ae
widths[231] = 410; // ccedilla
widths[232] = 456; // egrave
widths[233] = 456; // eacute
widths[234] = 456; // ecircumflex
widths[235] = 456; // edieresis
widths[236] = 228; // igrave
widths[237] = 228; // iacute
widths[238] = 228; // icircumflex
widths[239] = 228; // idieresis
widths[240] = 456; // eth
widths[241] = 456; // ntilde
widths[242] = 456; // ograve
widths[243] = 456; // oacute
widths[244] = 456; // ocircumflex
widths[245] = 456; // otilde
widths[246] = 456; // odieresis
widths[247] = 548; // divide
widths[248] = 500; // oslash
widths[249] = 456; // ugrave
widths[250] = 456; // uacute
widths[251] = 456; // ucircumflex
widths[252] = 456; // udieresis
widths[253] = 410; // yacute
widths[254] = 456; // thorn
widths[255] = 410; // ydieresis
}
}

View File

@ -49,10 +49,9 @@ package org.antlr.v4.runtime.tree.gui;
#
lines = open("metrics").read().split('\n')
print "public class FontName {"
print " public static int[] widths = new int[128];"
print " static {"
print " {"
maxh = 0;
for line in lines:
for line in lines[4:]: # skip header 0..3
all = line.split(' ')
words = [x for x in all if len(x)>0]
ascii = int(words[1], 16)
@ -61,15 +60,16 @@ package org.antlr.v4.runtime.tree.gui;
if ascii>=128: break
print " widths[%d] = %s; // %s" % (ascii, words[3], words[2])
print " maxCharHeight = "+str(maxh)+";"
print " }"
print " public static int MAX_CHAR_HEIGHT = "+str(maxh)+";"
print "}"
Units are 1000th of an 'em'.
*/
public abstract class BasicFontMetrics {
public static final int MAX_CHAR = '\u00FF';
protected int maxCharHeight;
protected int[] widths = new int[128];
protected int[] widths = new int[MAX_CHAR+1];
public double getWidth(String s, int fontSize) {
double w = 0;
@ -80,6 +80,7 @@ public abstract class BasicFontMetrics {
}
public double getWidth(char c, int fontSize) {
if ( c > MAX_CHAR || widths[c]==0 ) return widths['m']/1000.0; // return width('m')
return widths[c]/1000.0 * fontSize;
}

View File

@ -32,6 +32,6 @@ package org.antlr.v4.runtime.tree.gui;
public class CourierNew extends BasicFontMetrics {
{
maxCharHeight = 678;
for (int i=0; i<128; i++) widths[i] = 600;
for (int i=0; i<MAX_CHAR; i++) widths[i] = 600;
}
}

View File

@ -31,7 +31,7 @@ package org.antlr.v4.runtime.tree.gui;
public class TimesNewRoman extends BasicFontMetrics {
{
maxCharHeight = 717;
maxCharHeight = 877;
widths[32] = 250; // space
widths[33] = 333; // exclam
widths[34] = 408; // quotedbl
@ -127,5 +127,101 @@ public class TimesNewRoman extends BasicFontMetrics {
widths[124] = 200; // bar
widths[125] = 479; // braceright
widths[126] = 541; // asciitilde
widths[160] = 250; // nbspace
widths[161] = 333; // exclamdown
widths[162] = 500; // cent
widths[163] = 500; // sterling
widths[164] = 500; // currency
widths[165] = 500; // yen
widths[166] = 200; // brokenbar
widths[167] = 500; // section
widths[168] = 333; // dieresis
widths[169] = 759; // copyright
widths[170] = 275; // ordfeminine
widths[171] = 500; // guillemotleft
widths[172] = 563; // logicalnot
widths[173] = 333; // sfthyphen
widths[174] = 759; // registered
widths[175] = 500; // overscore
widths[176] = 399; // degree
widths[177] = 548; // plusminus
widths[178] = 299; // twosuperior
widths[179] = 299; // threesuperior
widths[180] = 333; // acute
widths[181] = 576; // mu1
widths[182] = 453; // paragraph
widths[183] = 333; // middot
widths[184] = 333; // cedilla
widths[185] = 299; // onesuperior
widths[186] = 310; // ordmasculine
widths[187] = 500; // guillemotright
widths[188] = 750; // onequarter
widths[189] = 750; // onehalf
widths[190] = 750; // threequarters
widths[191] = 443; // questiondown
widths[192] = 722; // Agrave
widths[193] = 722; // Aacute
widths[194] = 722; // Acircumflex
widths[195] = 722; // Atilde
widths[196] = 722; // Adieresis
widths[197] = 722; // Aring
widths[198] = 889; // AE
widths[199] = 666; // Ccedilla
widths[200] = 610; // Egrave
widths[201] = 610; // Eacute
widths[202] = 610; // Ecircumflex
widths[203] = 610; // Edieresis
widths[204] = 333; // Igrave
widths[205] = 333; // Iacute
widths[206] = 333; // Icircumflex
widths[207] = 333; // Idieresis
widths[208] = 722; // Eth
widths[209] = 722; // Ntilde
widths[210] = 722; // Ograve
widths[211] = 722; // Oacute
widths[212] = 722; // Ocircumflex
widths[213] = 722; // Otilde
widths[214] = 722; // Odieresis
widths[215] = 563; // multiply
widths[216] = 722; // Oslash
widths[217] = 722; // Ugrave
widths[218] = 722; // Uacute
widths[219] = 722; // Ucircumflex
widths[220] = 722; // Udieresis
widths[221] = 722; // Yacute
widths[222] = 556; // Thorn
widths[223] = 500; // germandbls
widths[224] = 443; // agrave
widths[225] = 443; // aacute
widths[226] = 443; // acircumflex
widths[227] = 443; // atilde
widths[228] = 443; // adieresis
widths[229] = 443; // aring
widths[230] = 666; // ae
widths[231] = 443; // ccedilla
widths[232] = 443; // egrave
widths[233] = 443; // eacute
widths[234] = 443; // ecircumflex
widths[235] = 443; // edieresis
widths[236] = 277; // igrave
widths[237] = 277; // iacute
widths[238] = 277; // icircumflex
widths[239] = 277; // idieresis
widths[240] = 500; // eth
widths[241] = 500; // ntilde
widths[242] = 500; // ograve
widths[243] = 500; // oacute
widths[244] = 500; // ocircumflex
widths[245] = 500; // otilde
widths[246] = 500; // odieresis
widths[247] = 548; // divide
widths[248] = 500; // oslash
widths[249] = 500; // ugrave
widths[250] = 500; // uacute
widths[251] = 500; // ucircumflex
widths[252] = 500; // udieresis
widths[253] = 500; // yacute
widths[254] = 500; // thorn
widths[255] = 500; // ydieresis
}
}

View File

@ -182,7 +182,7 @@ public class TreePostScriptGenerator {
i.addChild(k);
Trees.writePS(t, null,
"/Users/parrt/antlr/code/antlr4/main/tool/playground/t.eps",
"Arial", 11);
"ArialNarrow", 11);
// TreePostScriptGenerator psgen = new TreePostScriptGenerator(null, t, "CourierNew", 11);
// System.out.println(psgen.getPS());
}

View File

@ -29,13 +29,10 @@
package org.antlr.v4.runtime.tree.gui;
import org.abego.treelayout.NodeExtentProvider;
import org.abego.treelayout.TreeForTreeLayout;
import org.abego.treelayout.TreeLayout;
import org.abego.treelayout.*;
import org.abego.treelayout.util.DefaultConfiguration;
import org.antlr.v4.runtime.BaseRecognizer;
import org.antlr.v4.runtime.tree.Tree;
import org.antlr.v4.runtime.tree.Trees;
import org.antlr.v4.runtime.tree.*;
import javax.swing.*;
import java.awt.*;
@ -145,11 +142,16 @@ public class TreeViewer extends JComponent {
int x = (int) box.x + arcSize / 2 + nodeWidthPadding;
int y = (int) box.y + m.getAscent() + m.getLeading() + 1 + nodeHeightPadding;
for (int i = 0; i < lines.length; i++) {
g.drawString(lines[i], x, y);
// g.drawString(lines[i], x, y);
text(g, lines[i], x, y);
y += m.getHeight();
}
}
public void text(Graphics g, String s, int x, int y) {
g.drawString(s, x, y);
}
@Override
public void paint(Graphics g) {
super.paint(g);