2 # This file is part of LyX, the document processor.
3 # Licence details can be found in the file COPYING.
7 # Full author contact details are available in file CREDITS
10 # sed -f fdfixh.sed < somefile.h > fixedfile.h
12 # It contains the instructions that sed requires to manipulate
13 # the .h files produced by fdesign into a form usable by LyX
15 # Remove trailing whitespace.
19 # Delete blank lines, "extern void" function declarations and fdesign comments.
24 /generated with fdesign/d
27 # Pretty formatting; add an empty line before "#endif"
31 # Immediately after line "#define FD_xxx_h_" that starts off the header file,
32 # forward declare FL_FORM and FL_OBJECT and append the contents of file
33 # "extern.tmp". This latter is a sorted, unique list of any function
38 #include "forms_fwd.h"\
44 # Rewrite FD_form_xxx as FD_xxx.
45 # This is done both for the structs and for the #define bounding the header.
46 s/\(.*\) FD_form_\(.*\)/\1 FD_\2/
49 # Rename the function create_form_form_xxx(void) as build_xxx(void *).
50 s/extern \(.*\) create_form_form_\(.*\)[(]void[)]/\1 build_\2(void *)/
53 # Manipulate the structs:
56 # typedef struct { struct FD_xxx {
57 # FL_FORM *form_xxx; ~FD_xxx();
58 # void *vdata; FL_FORM * form;
59 # char *cdata; FL_OBJECT * some_obj;
61 # FL_OBJECT *some_obj; };
65 # This is detailed more closely below
67 # Delete lines containing:
73 # Place all lines containing FL_FORM and FL_OBJECT in the hold space, deleting
74 # them from the pattern space.
76 # For all lines starting with FL_FORM...
79 # 1. Rewrite "FL_FORM *form_xxx;" as "FL_FORM * form;
80 s/FL_FORM[ ]*\*form.*/FL_FORM * form;/
82 # 2. We know that FL_FORM comes before any FL_OBJECT, so can initialise
83 # the hold space with it. Delete from the pattern space.
88 # For all lines starting with FL_OBJECT...
91 # 1. Perform a little pretty formatting.
92 s/FL_OBJECT \*\(.*\)/FL_OBJECT * \1/
94 # 2. Append to the hold space and delete from the pattern space.
99 # The struct is ended by "} FD_xxx;", so now's the time to paste back the
100 # contents of the hold space.
102 # 1. Insert an empty line.
105 # 2. Rewrite "} FD_xxx;" as "struct FD_xxx {" and append a d-tor.
106 s/} \(.*\);/struct \1 {\
109 # 3. Paste the contents of the hold space beneath it.
112 # 4. Close the struct and append an empty line.