diff --git a/src/devices/gropdf/gropdf.pl b/src/devices/gropdf/gropdf.pl index 0e1b612a5..8c744704c 100644 --- a/src/devices/gropdf/gropdf.pl +++ b/src/devices/gropdf/gropdf.pl @@ -150,20 +150,17 @@ my $bgbox=''; # Draw commands for boxes on this page $noslide=1 if exists($ENV{GROPDF_NOSLIDE}) and $ENV{GROPDF_NOSLIDE}; my %ppsz=( - 'ledger'=>[1224,792], - 'legal'=>[612,1008], - 'letter'=>[612,792], 'a0'=>[2384,3370], 'a1'=>[1684,2384], 'a2'=>[1191,1684], 'a3'=>[842,1191], 'a4'=>[595,842], 'a5'=>[420,595], - 'a6'=>[297,420], - 'a7'=>[210,297], - 'a8'=>[148,210], - 'a9'=>[105,148], - 'a10'=>[73,105], + 'a6'=>[298,420], + 'a7'=>[210,298], + 'a8'=>[147,210], + 'a9'=>[105,147], + 'a10'=>[74,105], 'b0'=>[2835,4008], 'b1'=>[2004,2835], 'b2'=>[1417,2004], @@ -171,6 +168,10 @@ my %ppsz=( 'b4'=>[709,1001], 'b5'=>[499,709], 'b6'=>[354,499], + 'b7'=>[249,354], + 'b8'=>[176,249], + 'b9'=>[125,176], + 'b10'=>[88,125], 'c0'=>[2599,3677], 'c1'=>[1837,2599], 'c2'=>[1298,1837], @@ -178,7 +179,29 @@ my %ppsz=( 'c4'=>[649,918], 'c5'=>[459,649], 'c6'=>[323,459], - 'com10'=>[297,684], + 'c7'=>[230,323], + 'c8'=>[162,230], + 'c9'=>[113,162], + 'c10'=>[79,113], + 'd0'=>[2186,3090], + 'd1'=>[1545,2186], + 'd2'=>[1091,1545], + 'd3'=>[771,1091], + 'd4'=>[544,771], + 'd5'=>[386,544], + 'd6'=>[272,386], + 'd7'=>[193,272], + 'd8'=>[136,193], + 'dl'=>[624,312], + 'letter'=>[612,792], + 'legal'=>[612,1008], + 'jrlegal'=>[360,576], + 'tabloid'=>[792,1224], + 'ledger'=>[1224,792], + 'statement'=>[396,612], + 'executive'=>[522,756], + 'monarch'=>[540,279], + 'com10'=>[684,297], ); my $ucmap=<<'EOF'; diff --git a/src/include/paper.h b/src/include/paper.h index ed789c4b6..553f782b3 100644 --- a/src/include/paper.h +++ b/src/include/paper.h @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ struct paper { - char *name; + const char *name; double length; // in PS points double width; // in PS points }; @@ -30,7 +30,5 @@ public: papersize_init(); } _papersize_init; -// A0-A7, B0-B7, C0-C7, D0-D7, 8 American paper sizes, 1 special size */ -#define NUM_PAPERSIZES 4*8 + 8 + 1 - extern paper papersizes[]; +extern unsigned short num_papersizes; diff --git a/src/libs/libgroff/font.cpp b/src/libs/libgroff/font.cpp index c1af12ca9..97017d0b2 100644 --- a/src/libs/libgroff/font.cpp +++ b/src/libs/libgroff/font.cpp @@ -746,7 +746,7 @@ again: } else { int i; - for (i = 0; i < NUM_PAPERSIZES; i++) + for (i = 0; i < num_papersizes; i++) { if (strcasecmp(papersizes[i].name, pp) == 0) { if (length) *length = papersizes[i].length; @@ -756,6 +756,7 @@ again: *size = papersizes[i].name; return true; } + } if (attempt_file_open) { FILE *fp = fopen(p, "r"); if (fp != 0) { diff --git a/src/libs/libgroff/paper.cpp b/src/libs/libgroff/paper.cpp index 842f3690c..d5c56b2a7 100644 --- a/src/libs/libgroff/paper.cpp +++ b/src/libs/libgroff/paper.cpp @@ -20,43 +20,6 @@ along with this program. If not, see . */ #include "lib.h" #include "paper.h" -paper papersizes[NUM_PAPERSIZES]; - -// length and width in mm -static void add_iso_paper(char series, int offset, - int start_length, int start_width) -{ - int length = start_length; - int width = start_width; - for (int i = 0; i < 8; i++) - { - char *p = new char[3]; - p[0] = series; - p[1] = '0' + i; - p[2] = '\0'; - papersizes[offset + i].name = p; - // convert mm to inch - papersizes[offset + i].length = (double)length / 25.4; - papersizes[offset + i].width = (double)width / 25.4; - // after division by two, values must be rounded down to the next - // integer (as specified by ISO) - int tmp = length; - length = width; - width = tmp / 2; - } -} - -// length and width in inch -static void add_american_paper(const char *name, int idx, - double length, double width ) -{ - char *p = new char[strlen(name) + 1]; - strcpy(p, name); - papersizes[idx].name = p; - papersizes[idx].length = length; - papersizes[idx].width = width; -} - int papersize_init::initialised = 0; papersize_init::papersize_init() @@ -64,19 +27,163 @@ papersize_init::papersize_init() if (initialised) return; initialised = 1; - add_iso_paper('a', 0, 1189, 841); - add_iso_paper('b', 8, 1414, 1000); - add_iso_paper('c', 16, 1297, 917); - add_iso_paper('d', 24, 1090, 771); - add_american_paper("letter", 32, 11, 8.5); - add_american_paper("legal", 33, 14, 8.5); - add_american_paper("tabloid", 34, 17, 11); - add_american_paper("ledger", 35, 11, 17); - add_american_paper("statement", 36, 8.5, 5.5); - add_american_paper("executive", 37, 10, 7.5); - // the next three entries are for grolj4 - add_american_paper("com10", 38, 9.5, 4.125); - add_american_paper("monarch", 39, 7.5, 3.875); - // this is an ISO format, but it easier to use add_american_paper - add_american_paper("dl", 40, 220/25.4, 110/25.4); + papersizes[0].name = "a0"; + papersizes[0].width = 33.1102; + papersizes[0].length = 46.811; + papersizes[1].name = "a1"; + papersizes[1].width = 23.3858; + papersizes[1].length = 33.1102; + papersizes[2].name = "a2"; + papersizes[2].width = 16.5354; + papersizes[2].length = 23.3858; + papersizes[3].name = "a3"; + papersizes[3].width = 11.6929; + papersizes[3].length = 16.5354; + papersizes[4].name = "a4"; + papersizes[4].width = 8.26772; + papersizes[4].length = 11.6929; + papersizes[5].name = "a5"; + papersizes[5].width = 5.82677; + papersizes[5].length = 8.26772; + papersizes[6].name = "a6"; + papersizes[6].width = 4.13386; + papersizes[6].length = 5.82677; + papersizes[7].name = "a7"; + papersizes[7].width = 2.91339; + papersizes[7].length = 4.13386; + papersizes[8].name = "a8"; + papersizes[8].width = 2.04724; + papersizes[8].length = 2.91339; + papersizes[9].name = "a9"; + papersizes[9].width = 1.45669; + papersizes[9].length = 2.04724; + papersizes[10].name = "a10"; + papersizes[10].width = 1.02362; + papersizes[10].length = 1.45669; + papersizes[11].name = "b0"; + papersizes[11].width = 39.3701; + papersizes[11].length = 55.6693; + papersizes[12].name = "b1"; + papersizes[12].width = 27.8346; + papersizes[12].length = 39.3701; + papersizes[13].name = "b2"; + papersizes[13].width = 19.685; + papersizes[13].length = 27.8346; + papersizes[14].name = "b3"; + papersizes[14].width = 13.8976; + papersizes[14].length = 19.685; + papersizes[15].name = "b4"; + papersizes[15].width = 9.84252; + papersizes[15].length = 13.8976; + papersizes[16].name = "b5"; + papersizes[16].width = 6.92913; + papersizes[16].length = 9.84252; + papersizes[17].name = "b6"; + papersizes[17].width = 4.92126; + papersizes[17].length = 6.92913; + papersizes[18].name = "b7"; + papersizes[18].width = 3.46457; + papersizes[18].length = 4.92126; + papersizes[19].name = "b8"; + papersizes[19].width = 2.44094; + papersizes[19].length = 3.46457; + papersizes[20].name = "b9"; + papersizes[20].width = 1.73228; + papersizes[20].length = 2.44094; + papersizes[21].name = "b10"; + papersizes[21].width = 1.22047; + papersizes[21].length = 1.73228; + papersizes[22].name = "c0"; + papersizes[22].width = 36.1024; + papersizes[22].length = 51.063; + papersizes[23].name = "c1"; + papersizes[23].width = 25.5118; + papersizes[23].length = 36.1024; + papersizes[24].name = "c2"; + papersizes[24].width = 18.0315; + papersizes[24].length = 25.5118; + papersizes[25].name = "c3"; + papersizes[25].width = 12.7559; + papersizes[25].length = 18.0315; + papersizes[26].name = "c4"; + papersizes[26].width = 9.01575; + papersizes[26].length = 12.7559; + papersizes[27].name = "c5"; + papersizes[27].width = 6.37795; + papersizes[27].length = 9.01575; + papersizes[28].name = "c6"; + papersizes[28].width = 4.48819; + papersizes[28].length = 6.37795; + papersizes[29].name = "c7"; + papersizes[29].width = 3.18898; + papersizes[29].length = 4.48819; + papersizes[30].name = "c8"; + papersizes[30].width = 2.24409; + papersizes[30].length = 3.18898; + papersizes[31].name = "c9"; + papersizes[31].width = 1.5748; + papersizes[31].length = 2.24409; + papersizes[32].name = "c10"; + papersizes[32].width = 1.10236; + papersizes[32].length = 1.5748; + papersizes[33].name = "d0"; + papersizes[33].width = 30.3543; + papersizes[33].length = 42.9134; + papersizes[34].name = "d1"; + papersizes[34].width = 21.4567; + papersizes[34].length = 30.3543; + papersizes[35].name = "d2"; + papersizes[35].width = 15.1575; + papersizes[35].length = 21.4567; + papersizes[36].name = "d3"; + papersizes[36].width = 10.7087; + papersizes[36].length = 15.1575; + papersizes[37].name = "d4"; + papersizes[37].width = 7.55906; + papersizes[37].length = 10.7087; + papersizes[38].name = "d5"; + papersizes[38].width = 5.35433; + papersizes[38].length = 7.55906; + papersizes[39].name = "d6"; + papersizes[39].width = 3.77953; + papersizes[39].length = 5.35433; + papersizes[40].name = "d7"; + papersizes[40].width = 2.67717; + papersizes[40].length = 3.77953; + papersizes[41].name = "d8"; + papersizes[41].width = 1.88976; + papersizes[41].length = 2.67717; + papersizes[42].name = "letter"; + papersizes[42].width = 8.5; + papersizes[42].length = 11; + papersizes[43].name = "legal"; + papersizes[43].width = 8.5; + papersizes[43].length = 14; + papersizes[44].name = "jrlegal"; + papersizes[44].width = 5; + papersizes[44].length = 8; + papersizes[45].name = "tabloid"; + papersizes[45].width = 11; + papersizes[45].length = 17; + papersizes[46].name = "ledger"; + papersizes[46].width = 17; + papersizes[46].length = 11; + papersizes[47].name = "statement"; + papersizes[47].width = 5.5; + papersizes[47].length = 8.5; + papersizes[48].name = "executive"; + papersizes[48].width = 7.5; + papersizes[48].length = 10; + papersizes[49].name = "monarch"; + papersizes[49].width = 7.5; + papersizes[49].length = 3.875; + papersizes[50].name = "com10"; + papersizes[50].width = 9.5; + papersizes[50].length = 4.125; + papersizes[51].name = "dl"; + papersizes[51].width = 8.66142; + papersizes[51].length = 4.33071; } + +unsigned short num_papersizes = 52; +paper papersizes[52]; diff --git a/tmac/papersize.tmac b/tmac/papersize.tmac index e10219ad5..06fe5a1c6 100644 --- a/tmac/papersize.tmac +++ b/tmac/papersize.tmac @@ -36,7 +36,14 @@ . ds paper-a5-width 14.8c . ds paper-a6-length 14.8c . ds paper-a6-width 10.5c -. +. ds paper-a7-length 10.5c +. ds paper-a7-width 7.4c +. ds paper-a8-length 7.4c +. ds paper-a8-width 5.2c +. ds paper-a9-length 5.2c +. ds paper-a9-width 3.7c +. ds paper-a10-length 3.7c +. ds paper-a10-width 2.6c . ds paper-b0-length 141.4c . ds paper-b0-width 100c . ds paper-b1-length 100c @@ -51,7 +58,14 @@ . ds paper-b5-width 17.6c . ds paper-b6-length 17.6c . ds paper-b6-width 12.5c -. +. ds paper-b7-length 12.5c +. ds paper-b7-width 8.8c +. ds paper-b8-length 8.8c +. ds paper-b8-width 6.2c +. ds paper-b9-length 6.2c +. ds paper-b9-width 4.4c +. ds paper-b10-length 4.4c +. ds paper-b10-width 3.1c . ds paper-c0-length 129.7c . ds paper-c0-width 91.7c . ds paper-c1-length 91.7c @@ -66,8 +80,15 @@ . ds paper-c5-width 16.2c . ds paper-c6-length 16.2c . ds paper-c6-width 11.4c -. -. ds paper-d0-length 109.0c +. ds paper-c7-length 11.4c +. ds paper-c7-width 8.1c +. ds paper-c8-length 8.1c +. ds paper-c8-width 5.7c +. ds paper-c9-length 5.7c +. ds paper-c9-width 4c +. ds paper-c10-length 4c +. ds paper-c10-width 2.8c +. ds paper-d0-length 109c . ds paper-d0-width 77.1c . ds paper-d1-length 77.1c . ds paper-d1-width 54.5c @@ -81,28 +102,30 @@ . ds paper-d5-width 13.6c . ds paper-d6-length 13.6c . ds paper-d6-width 9.6c -. +. ds paper-d7-length 9.6c +. ds paper-d7-width 6.8c +. ds paper-d8-length 6.8c +. ds paper-d8-width 4.8c . ds paper-letter-length 11i . ds paper-letter-width 8.5i . ds paper-legal-length 14i . ds paper-legal-width 8.5i +. ds paper-jrlegal-length 8i +. ds paper-jrlegal-width 5i . ds paper-tabloid-length 17i . ds paper-tabloid-width 11i . ds paper-ledger-length 11i . ds paper-ledger-width 17i . ds paper-statement-length 8.5i . ds paper-statement-width 5.5i -. \" These dimensions for executive paper format are what all printer -. \" manufacturers use. -. ds paper-executive-length 10.5i -. ds paper-executive-width 7.25i -. -. ds paper-com10-length 9.5i -. ds paper-com10-width 4.125i -. ds paper-monarch-length 7.5i -. ds paper-monarch-width 3.875i -. ds paper-dl-length 22c -. ds paper-dl-width 11c +. ds paper-executive-length 10i +. ds paper-executive-width 7.5i +. ds paper-monarch-length 3.875i +. ds paper-monarch-width 7.5i +. ds paper-com10-length 4.125i +. ds paper-com10-width 9.5i +. ds paper-dl-length 11c +. ds paper-dl-width 22c . . \" Save the input parameter for a later diagnostic. . ds paper-arg \*[paper]\"