Initialize Tizen 2.3
[framework/graphics/freetype.git] / builds / atari / deflinejoiner.awk
1 #!/usr/bin/env awk
2
3
4 function shift( array, \
5                 junk, elm0, l )
6 {
7   elm0 = array[0]
8   for ( l = 0; l < asorti( array, junk ) - 1; l++ )
9     array[l] = array[l+1];
10   delete array[l]
11   return elm0
12 }
13
14
15 function init_cpp_src_line()
16 {
17   logical_line = ""
18   delete break_pos 
19 }
20
21
22 function shift_valid_bp( array, \
23                          junk, elm )
24 {
25   elm = -1
26
27   if ( 0 < asorti( array, junk ) )
28     do {
29       elm = shift( array )
30     } while ( 0 > elm );
31
32   return elm
33 }
34
35
36 function check_cpp_src_line_break_pos( \
37                                        i, junk )
38 {
39   printf( "break_pos:" )
40   for ( i = 0; i < asorti( break_pos, junk ); i++ )
41     printf( " %d", break_pos[i] );
42   printf( "\n" )
43 }
44
45
46 function check_cpp_src_line()
47 {
48   printf( "logical_line[%s]\n", logical_line )
49   check_cpp_src_line_break_pos()
50 }
51
52
53 function append_line( phys_line, \
54                       filt_line, bp_len )
55 {
56   filt_line = phys_line
57   sub( /\\$/, " ", filt_line )
58   logical_line    = logical_line filt_line
59   bp_len = asorti( break_pos, junk )
60   break_pos[bp_len] = length( logical_line ) - 1
61 }
62
63
64 function print_line( \
65                      c0, c1, i, junk, part_str )
66 {
67   c0 = 0
68
69   while( asorti( break_pos, junk ) > 1 )
70   {
71     if ( ( c1 = shift_valid_bp( break_pos ) ) < 1 )
72     {
73       part_str = substr( logical_line, c0 + 1 )
74       printf( "%s\n", part_str )
75       return
76     }
77
78     part_str = substr( logical_line, c0 + 1, c1 - c0 + 1 )
79     gsub( / $/, "\\", part_str )
80     printf( "%s\n", part_str )
81     c0 = c1 + 1
82   }
83
84   part_str = substr( logical_line, c0 + 1 )
85   printf( "%s\n", part_str )
86 }
87
88
89 function shrink_spaces( pos, \
90                         tail, removed_length, k )
91 {
92   tail = substr( logical_line, pos )
93   sub( /^[ \t]+/, " ", tail )
94   removed_length = length( logical_line ) - pos - length( tail ) + 1
95   logical_line = substr( logical_line, 0, pos - 1 ) tail
96
97
98   for ( k = 0; k < asorti( break_pos, junk ); k++ )
99     if ( ( pos + removed_length ) <= break_pos[k] )
100       break_pos[k] = break_pos[k] - removed_length;
101     else if ( pos <= break_pos[k] )
102       break_pos[k] = -1;
103
104   return removed_length
105 }
106
107
108 function shrink_spaces_to_linebreak( pos, \
109                                      junk, part_str, removed_length, i )
110 {
111   for ( i = 0; i < asorti( break_pos, junk ) && break_pos[i] < pos ; i++ )
112     ;
113  
114   if ( break_pos[i] < 1 ) 
115     return;
116
117   part_str = substr( logical_line, pos, break_pos[i] - pos + 1 )
118   sub( /^[ \t]+/, " ", part_str )
119   removed_length = ( break_pos[i] - pos + 1 ) - length( part_str )
120
121   tail = substr( logical_line, pos + removed_length )
122   logical_line = substr( logical_line, 0, pos - 1 ) tail
123
124   for ( ; i < asorti( break_pos, junk ); i++ )
125     break_pos[i] -= removed_length;
126
127   return removed_length
128 }
129
130
131 function delete_linebreaks_in_2nd_token( \
132                                            tail, paren_depth, junk, i, j, k, l )
133 {
134   if ( logical_line ~ /^[ \t]*#[ \t]*define[ \t]+[0-9A-Za-z_]+\(/ )
135   {
136     tail = logical_line
137     sub( /^[ \t]*#[ \t]*define[ \t]+[0-9A-Za-z_]+/, "", tail )
138
139     paren_depth = 0
140     l = 0
141     i = length( logical_line ) - length( tail ) + 1 # seek to the 1st op paren
142     j = i
143     do {
144       if ( substr( logical_line, j, 2 ) ~ /[ \t][ \t]/ )
145         l = shrink_spaces( j );
146       else if ( substr( logical_line, j, 1 ) == "(" )
147         paren_depth += 1;
148       else if ( substr( logical_line, j, 1 ) == ")" )
149         paren_depth -= 1;
150       j += 1
151     } while ( j < length( logical_line ) && paren_depth != 0 )
152
153     for ( k = 0; k < asorti( break_pos, junk ); k++ )
154       if ( i <= break_pos[k] && break_pos[k] < j )
155         break_pos[k] = -1;
156
157     if ( l > 0 )
158       shrink_spaces_to_linebreak( j );
159   }
160 }
161
162
163 BEGIN{
164   init_cpp_src_line()
165 }
166 {
167   append_line( $0 )
168   if ( $0 !~ /\\$/ )
169   {
170     delete_linebreaks_in_2nd_token()
171     print_line()
172     init_cpp_src_line()
173   }
174 }
175 END{
176   if ( 0 < length( logical_line ) )
177   {
178     delete_linebreaks_in_2nd_token()
179     print_line()
180   }
181 }