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]\"