Am Mittwoch, 14. November 2007 schrieb Werner LEMBERG:
> > I looked again at it and at the Changelog file and can not see any
> > improvements if each file gets a different ci text.
>
> There's a misunderstanding: I want that you follow the format, this
> is:
>
>   * <source file 1> (<function 1>), <source file 2> (<structure 2>):
>   blabla blabla.
>
>
>     Werner



Werner,
Now I have attached a changed pic.patch file, where I removed the wrong 
correction of the 'iff' wording in common.cpp, as you pointed out.
And I attached a ChangeLog file. I hope this is now the content and format 
you expect.

Best regards
    Heinz
2007-11-17  Heinz-Jürgen Oertel <[EMAIL PROTECTED]>

        
        * src/groff/preproc/pic/lex.cpp: added box attributes '[xy]slanted'
        * src/groff/preproc/pic/object.cpp: Ditto.
        * src/groff/preproc/pic/object.h: Ditto.
        * src/groff/preproc/pic/pic.man: Ditto.
        * src/groff/preproc/pic/pic.y: Ditto.
        * src/groff/preproc/pic/pic/troff.cpp: Ditto.

diff -Naur -X exclude pic/lex.cpp pic_extended/lex.cpp
--- pic/lex.cpp	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/lex.cpp	2007-11-10 18:49:55.000000000 +0000
@@ -557,6 +557,8 @@
     { "wid", WIDTH },
     { "width", WIDTH },
     { "with", WITH },
+    { "xslanted", XSLANTED },
+    { "yslanted", YSLANTED },
   };
   
   const keyword *start = table;
diff -Naur -X exclude pic/object.cpp pic_extended/object.cpp
--- pic/object.cpp	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/object.cpp	2007-11-10 18:49:55.000000000 +0000
@@ -413,6 +413,8 @@
   segment_is_absolute = 0;
   text = 0;
   shaded = 0;
+  xslanted = 0;
+  yslanted = 0;
   outlined = 0;
   with = 0;
   dir = RIGHT_DIRECTION;
@@ -565,6 +567,8 @@
   void set_outline_color(char *);
   char *get_outline_color();
   virtual void set_fill(double);
+  virtual void set_xslanted(double);
+  virtual void set_yslanted(double);
   virtual void set_fill_color(char *);
 };
 
@@ -594,6 +598,14 @@
 {
 }
 
+void graphic_object::set_xslanted(double)
+{
+}
+
+void graphic_object::set_yslanted(double)
+{
+}
+
 void graphic_object::set_fill_color(char *c)
 {
   color_fill = strsave(c);
@@ -701,14 +713,19 @@
   closed_object(const position &);
   object_type type() = 0;
   void set_fill(double);
+  void set_xslanted(double);
+  void set_yslanted(double);
   void set_fill_color(char *fill);
 protected:
   double fill;			// < 0 if not filled
+  double xslanted;		// !=0 if x is slanted
+  double yslanted;		// !=0 if y is slanted
   char *color_fill;		// = 0 if not colored
 };
 
 closed_object::closed_object(const position &pos)
-: rectangle_object(pos), fill(-1.0), color_fill(0)
+: rectangle_object(pos), fill(-1.0), color_fill(0),
+  xslanted(0), yslanted(0)
 {
 }
 
@@ -718,6 +735,19 @@
   fill = f;
 }
 
+/* accept positive and negative values */ 
+void closed_object::set_xslanted(double s)
+{
+  //assert(s >= 0.0);
+  xslanted = s;
+}
+/* accept positive and negative values */ 
+void closed_object::set_yslanted(double s)
+{
+  //assert(s >= 0.0);
+  yslanted = s;
+}
+
 void closed_object::set_fill_color(char *f)
 {
   color_fill = strsave(f);
@@ -775,10 +805,12 @@
   if (xrad == 0.0) {
     distance dim2 = dim/2.0;
     position vec[4];
-    vec[0] = cent + position(dim2.x, -dim2.y);
-    vec[1] = cent + position(dim2.x, dim2.y);
-    vec[2] = cent + position(-dim2.x, dim2.y);
-    vec[3] = cent + position(-dim2.x, -dim2.y);
+    /* error("x slanted %1", xslanted); */
+    /* error("y slanted %1", yslanted); */
+    vec[0] = cent + position(dim2.x, -(dim2.y-yslanted));   /* lr */
+    vec[1] = cent + position(dim2.x+xslanted, dim2.y+yslanted);	 /* ur */
+    vec[2] = cent + position(-(dim2.x-xslanted), dim2.y);	 /* ul */
+    vec[3] = cent + position(-(dim2.x), -dim2.y);	 /* ll */
     out->polygon(vec, 4, lt, fill);
   }
   else {
@@ -1896,6 +1928,12 @@
     obj->set_thickness(th);
     if (flags & IS_OUTLINED)
       obj->set_outline_color(outlined);
+    if (flags & IS_XSLANTED) {
+	  obj->set_xslanted(xslanted);
+    }
+    if (flags & IS_YSLANTED) {
+	  obj->set_yslanted(yslanted);
+    }
     if (flags & (IS_DEFAULT_FILLED | IS_FILLED)) {
       if (flags & IS_SHADED)
 	obj->set_fill_color(shaded);
diff -Naur -X exclude pic/object.h pic_extended/object.h
--- pic/object.h	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/object.h	2007-11-10 18:49:55.000000000 +0000
@@ -133,29 +133,31 @@
   ~text_item();
 };
 
-const unsigned long IS_DOTTED = 01;
-const unsigned long IS_DASHED = 02;
-const unsigned long IS_CLOCKWISE = 04;
-const unsigned long IS_INVISIBLE = 020;
-const unsigned long HAS_LEFT_ARROW_HEAD = 040;
-const unsigned long HAS_RIGHT_ARROW_HEAD = 0100;
-const unsigned long HAS_SEGMENT = 0200;
-const unsigned long IS_SAME = 0400;
-const unsigned long HAS_FROM = 01000;
-const unsigned long HAS_AT = 02000;
-const unsigned long HAS_WITH = 04000;
-const unsigned long HAS_HEIGHT = 010000;
-const unsigned long HAS_WIDTH = 020000;
-const unsigned long HAS_RADIUS = 040000;
-const unsigned long HAS_TO = 0100000;
-const unsigned long IS_CHOPPED = 0200000;
-const unsigned long IS_DEFAULT_CHOPPED = 0400000;
-const unsigned long HAS_THICKNESS = 01000000;
-const unsigned long IS_FILLED = 02000000;
-const unsigned long IS_DEFAULT_FILLED = 04000000;
-const unsigned long IS_ALIGNED = 010000000;
-const unsigned long IS_SHADED = 020000000;
-const unsigned long IS_OUTLINED = 040000000;
+const unsigned long IS_DOTTED          =         01;
+const unsigned long IS_DASHED          =         02;
+const unsigned long IS_CLOCKWISE       =         04;
+const unsigned long IS_INVISIBLE       =        020;
+const unsigned long HAS_LEFT_ARROW_HEAD =       040;
+const unsigned long HAS_RIGHT_ARROW_HEAD =     0100;
+const unsigned long HAS_SEGMENT        =       0200;
+const unsigned long IS_SAME            =       0400;
+const unsigned long HAS_FROM           =      01000;
+const unsigned long HAS_AT             =      02000;
+const unsigned long HAS_WITH           =      04000;
+const unsigned long HAS_HEIGHT         =     010000;
+const unsigned long HAS_WIDTH          =     020000;
+const unsigned long HAS_RADIUS         =     040000;
+const unsigned long HAS_TO             =    0100000;
+const unsigned long IS_CHOPPED         =    0200000;
+const unsigned long IS_DEFAULT_CHOPPED =    0400000;
+const unsigned long HAS_THICKNESS      =   01000000;
+const unsigned long IS_FILLED          =   02000000;
+const unsigned long IS_DEFAULT_FILLED  =   04000000;
+const unsigned long IS_ALIGNED         =  010000000;
+const unsigned long IS_SHADED          =  020000000;
+const unsigned long IS_OUTLINED        =  040000000;
+const unsigned long IS_XSLANTED        = 0100000000;
+const unsigned long IS_YSLANTED        = 0200000000;
 
 struct segment {
   int is_absolute;
@@ -189,6 +191,8 @@
   double end_chop;
   double thickness;
   double fill;
+  double xslanted;
+  double yslanted;
   char *shaded;
   char *outlined;
   direction dir;
diff -Naur -X exclude pic/pic.man pic_extended/pic.man
--- pic/pic.man	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/pic.man	2007-11-10 18:49:55.000000000 +0000
@@ -735,6 +735,16 @@
 A box with rounded corners can be dotted or dashed.
 .
 .LP
+Boxes can have slanted sides,
+in other words the angle between two sides of an rectangle is not 90\[de].
+The
+.B xslanted
+and
+.B yslanted
+attributes are specifying the amount of offset
+the line endpoints of the box are shifted in x or y direction.
+.
+.LP
 The
 .B .PS
 line can have a second argument specifying a maximum height for
@@ -818,7 +828,7 @@
 line.
 .
 .LP
-Boxes (including boxes with rounded corners),
+Boxes (including boxes with rounded corners or slanted sides),
 circles and ellipses can be filled by giving them an attribute of
 .BR fill [ ed ].
 This takes an optional argument of an expression with a value between
diff -Naur -X exclude pic/pic.y pic_extended/pic.y
--- pic/pic.y	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/pic.y	2007-11-10 18:49:55.000000000 +0000
@@ -197,6 +197,8 @@
 %token COLORED
 %token OUTLINED
 %token SHADED
+%token XSLANTED
+%token YSLANTED
 %token ALIGNED
 %token SPRINTF
 %token COMMAND
@@ -221,6 +223,7 @@
 precedence than left and right, so that eg `line chop left'
 parses properly. */
 %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
+%left XSLANTED YSLANTED
 %left LABEL
 
 %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
@@ -935,6 +938,18 @@
 		  $$->flags |= IS_FILLED;
 		  $$->fill = $3;
 		}
+	| object_spec XSLANTED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_XSLANTED;
+		  $$->xslanted = $3;
+		}
+	| object_spec YSLANTED expr
+		{
+		  $$ = $1;
+		  $$->flags |= IS_YSLANTED;
+		  $$->yslanted = $3;
+		}
 	| object_spec SHADED text
 		{
 		  $$ = $1;
diff -Naur -X exclude pic/troff.cpp pic_extended/troff.cpp
--- pic/troff.cpp	2007-10-20 17:59:55.000000000 +0000
+++ pic_extended/troff.cpp	2007-11-10 18:49:55.000000000 +0000
@@ -36,6 +36,8 @@
   virtual void simple_polygon(int, const position *, int) = 0;
   virtual void line_thickness(double) = 0;
   virtual void set_fill(double) = 0;
+  virtual void set_xslanted(double) = 0;
+  virtual void set_yslanted(double) = 0;
   virtual void set_color(char *, char *) = 0;
   virtual void reset_color() = 0;
   virtual char *get_last_filled() = 0;
@@ -217,6 +219,8 @@
   double scale;
   double last_line_thickness;
   double last_fill;
+  double last_xslanted;
+  double last_yslanted;
   char *last_filled;		// color
   char *last_outlined;		// color
 public:
@@ -236,6 +240,8 @@
   void simple_polygon(int, const position *, int);
   void line_thickness(double p);
   void set_fill(double);
+  void set_xslanted(double);
+  void set_yslanted(double);
   void set_color(char *, char *);
   void reset_color();
   char *get_last_filled();
@@ -250,7 +256,8 @@
 
 troff_output::troff_output()
 : last_filename(0), last_line_thickness(BAD_THICKNESS),
-  last_fill(-1.0), last_filled(0), last_outlined(0)
+  last_fill(-1.0), last_filled(0), last_outlined(0),
+  last_xslanted(0), last_yslanted(0)
 {
 }
 
@@ -299,6 +306,8 @@
 {
   line_thickness(BAD_THICKNESS);
   last_fill = -1.0;		// force it to be reset for each picture
+  last_xslanted = 0;
+  last_yslanted = 0;
   reset_color();
   if (!flyback_flag)
     printf(".sp %.3fi+1\n", height);
@@ -492,6 +501,16 @@
   }
 }
 
+void troff_output::set_xslanted(double f)
+{
+    last_xslanted = f;
+}
+
+void troff_output::set_yslanted(double f)
+{
+    last_yslanted = f;
+}
+
 void troff_output::set_color(char *color_fill, char *color_outlined)
 {
   if (driver_extension_flag) {

Reply via email to