mucgly 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d438186a60f6f48bf2b68fd7090f7cc3e375cca3
4
- data.tar.gz: 69d49907c80a1faee873a275f228090f48d930e0
3
+ metadata.gz: 1dfea2d4d0a44528b05456bbd1704cbbd449a232
4
+ data.tar.gz: e663a7a7e3815a9dc63b9564730ae738b51a9e87
5
5
  SHA512:
6
- metadata.gz: 04b142e789d684fc49819c5289070fcd324cebb199c6a732301279b3b40938356902152d4d2dad2ad171becb8b290305ac0bb70c2fe51ed616141bf125bbcea7
7
- data.tar.gz: 96a4e3c1271542ccd0e4174ef450f1e0344ac39121c66ca5784ba65bfbe116e5fa9b73f2037f1874a10ebedb3715b79e95356146f942530671b5a2f4e6a7f204
6
+ metadata.gz: 18654eba88520a6ffed3f834a28916caa5e17df680e4f90b359794f34e199d162d11fdeb25cccf337cf5be3ff8431fa364254fcbf9dac20e76b82be8b4a32b17
7
+ data.tar.gz: 013cd857f5d0c5003d86cc2d2f82ea42dea9642ec0c3f2b8a05277b0f3ce974e05e586b1ee5cf542d8c8ab42c514661ba65c2c3ad1773ebc558e63f3094c1417
@@ -1,5 +1,9 @@
1
1
  = Version history
2
2
 
3
+ [0.1.1] Documentation updates.
4
+ Tiny code cleanups.
5
+ Better test coverage for Mugcly module.
6
+
3
7
  [0.1.0] C-based implementation.
4
8
  100 times faster than older versions.
5
9
  Multiple command line interface and internal cmd changes.
@@ -3,8 +3,9 @@
3
3
  == Introduction
4
4
 
5
5
  Mucgly is a macro expander for inline macros that exist in the middle
6
- of body text. The macros are expected to be mostly regular Ruby code,
7
- but a few special commands are also available.
6
+ of body text. Mucgly is useful for code generation and all kinds of
7
+ templating systems. The macros are expected to be mostly regular Ruby
8
+ code, but a few special commands are also available.
8
9
 
9
10
  A very simple example:
10
11
  Adding 1 + 3 results to: -<.1+3>-
@@ -19,7 +20,7 @@ syntax and the rest is pure Ruby code. The special character (command)
19
20
  "." is used to print the Ruby code evaluation value to current output
20
21
  file (stream).
21
22
 
22
- Sample session to execute the example above:
23
+ Sample session to execute the above example interactively:
23
24
  shell> mucgly
24
25
  Adding 1 + 3 results to: -<.1+3>-
25
26
  Adding 1 + 3 results to: 4
@@ -27,7 +28,8 @@ Sample session to execute the example above:
27
28
  shell>
28
29
 
29
30
 
30
- Ruby code is always executed in the Ruby interpreters "<main>" scope.
31
+ Ruby code is always executed in the Ruby interpreters "<main>" scope,
32
+ i.e. Execution Environment.
31
33
 
32
34
  Previous example with multiple macros:
33
35
  -<@a = 1>--<@b = 3>-\
@@ -44,7 +46,14 @@ The macro on the second line refers to settings from previous
44
46
  macros. Instance variables has to be used to share data between macro
45
47
  calls (due to "<main>" evaluation). Local variables are not persistent
46
48
  enough. Mucgly module method, "Mucgly.write", is used to write out the
47
- calculation result. Mucgly module is defined within Mucgly utility.
49
+ calculation result. Mucgly module is part of Mucgly.
50
+
51
+ Typically Mucgly is executed in batch mode, e.g:
52
+ mucgly -f foo.rx.txt -f bar.rx.txt -g .rx
53
+
54
+ For all command line options, see:
55
+ mucgly -h
56
+
48
57
 
49
58
 
50
59
  == Features
@@ -79,6 +88,8 @@ calculation result. Mucgly module is defined within Mucgly utility.
79
88
 
80
89
  * Document formatting.
81
90
 
91
+ * Template generation.
92
+
82
93
  * Etc.
83
94
 
84
95
 
@@ -128,8 +139,8 @@ default hook values can be used for nested macros (if desired).
128
139
  == Special commands
129
140
 
130
141
  In addition to regular Ruby code the macros are allowed to include so
131
- called Special Commands. These commands start with the ":" characters
132
- or with ".".
142
+ called Special Commands. These commands start with ":" or with "."
143
+ character.
133
144
 
134
145
 
135
146
  === Named commands
@@ -137,17 +148,17 @@ or with ".".
137
148
  Example for named command:
138
149
  ...
139
150
  -<:hook [ ]>-\
140
- ...
151
+ ...
141
152
 
142
- Would change the hookbeg and hookend to "[" and "]" respectively. Note
143
- that hooks are changed only for the current input file. If for example
144
- an included input file changes hooks, the includer file still uses the
145
- original hooks.
153
+ This example would change the hookbeg and hookend to "[" and "]"
154
+ respectively. Note that hooks are changed only for the current input
155
+ file. If an included input file changes hooks, the includer file still
156
+ uses the original hooks.
146
157
 
147
- One special command is allowed per macro and it can't be mixed normal
148
- Ruby code. Command name is separated by ":" in the beginning and by
149
- space (" ") in the end. The rest of the macro is taken as argument to
150
- the command.
158
+ One special command is allowed per macro and it can't be mixed with
159
+ normal Ruby code. Command name is separated by ":" in the beginning
160
+ and by space (" ") in the end. The rest of the macro is taken as
161
+ argument to the command.
151
162
 
152
163
  List of ":" style special commands:
153
164
 
@@ -194,10 +205,11 @@ is same as ":comment ".
194
205
  === Multipass
195
206
 
196
207
  If the macro starts with "#" character, the macro is not excuted. The
197
- macro content is output with "#" removed from the output, including
198
- the current macro hooks. If 3 passes are needed, then "##" can be
199
- placed to the initial macro file. Multipass macro files are processes
200
- by (shell) piping the output of Mucgly to another Mucgly process.
208
+ macro content is output with one "#" removed from the output,
209
+ surrounded with the current macro hooks. If 3 passes are needed, then
210
+ "##" can be placed to the initial macro file. Multipass macro files
211
+ are processes by (shell) piping the output of one Mucgly process to
212
+ another.
201
213
 
202
214
  Multipass can be used for example to create a Table Of Contents. First
203
215
  pass collects information about document content and second pass will
@@ -92,7 +92,7 @@
92
92
  <dt id="VERSION-constant" class="">VERSION =
93
93
 
94
94
  </dt>
95
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>0.1.0</span><span class='tstring_end'>&quot;</span></span></pre></dd>
95
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>0.1.1</span><span class='tstring_end'>&quot;</span></span></pre></dd>
96
96
 
97
97
  </dl>
98
98
 
@@ -177,7 +177,7 @@
177
177
  </div>
178
178
 
179
179
  <div id="footer">
180
- Generated on Fri Feb 27 16:43:23 2015 by
180
+ Generated on Sun Apr 5 20:11:53 2015 by
181
181
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
182
182
  0.8.7.6 (ruby-2.1.2).
183
183
  </div>
@@ -104,7 +104,7 @@
104
104
  </div>
105
105
 
106
106
  <div id="footer">
107
- Generated on Fri Feb 27 16:43:23 2015 by
107
+ Generated on Sun Apr 5 20:11:53 2015 by
108
108
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
109
109
  0.8.7.6 (ruby-2.1.2).
110
110
  </div>
@@ -63,7 +63,11 @@
63
63
 
64
64
  <div id="content"><div id='filecontents'>
65
65
  <h1 id="label-Version+history">Version history</h1>
66
- <dl class="rdoc-list label-list"><dt>0.1.0
66
+ <dl class="rdoc-list label-list"><dt>0.1.1
67
+ <dd>
68
+ <p>Documentation updates. Tiny code cleanups. Better test coverage for Mugcly
69
+ module.</p>
70
+ </dd><dt>0.1.0
67
71
  <dd>
68
72
  <p>C-based implementation. 100 times faster than older versions. Multiple
69
73
  command line interface and internal cmd changes. Not fully backwards
@@ -81,7 +85,7 @@ compatible with older versions.</p>
81
85
  </div></div>
82
86
 
83
87
  <div id="footer">
84
- Generated on Fri Feb 27 16:43:23 2015 by
88
+ Generated on Sun Apr 5 20:11:53 2015 by
85
89
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
86
90
  0.8.7.6 (ruby-2.1.2).
87
91
  </div>
@@ -67,8 +67,9 @@
67
67
  <h2 id="label-Introduction">Introduction</h2>
68
68
 
69
69
  <p>Mucgly is a macro expander for inline macros that exist in the middle of
70
- body text. The macros are expected to be mostly regular Ruby code, but a
71
- few special commands are also available.</p>
70
+ body text. Mucgly is useful for code generation and all kinds of templating
71
+ systems. The macros are expected to be mostly regular Ruby code, but a few
72
+ special commands are also available.</p>
72
73
 
73
74
  <p>A very simple example:</p>
74
75
 
@@ -84,7 +85,7 @@ is mostly regular Ruby code. The first character is special syntax and the
84
85
  rest is pure Ruby code. The special character (command) “.” is used to
85
86
  print the Ruby code evaluation value to current output file (stream).</p>
86
87
 
87
- <p>Sample session to execute the example above:</p>
88
+ <p>Sample session to execute the above example interactively:</p>
88
89
 
89
90
  <pre class="code ruby"><code class="ruby">shell&gt; mucgly
90
91
  Adding 1 + 3 results to: -&lt;.1+3&gt;-
@@ -92,7 +93,8 @@ Adding 1 + 3 results to: 4
92
93
  &lt;Ctrl-D&gt;
93
94
  shell&gt;</code></pre>
94
95
 
95
- <p>Ruby code is always executed in the Ruby interpreters “&lt;main&gt;” scope.</p>
96
+ <p>Ruby code is always executed in the Ruby interpreters “&lt;main&gt;” scope,
97
+ i.e. Execution Environment.</p>
96
98
 
97
99
  <p>Previous example with multiple macros:</p>
98
100
 
@@ -110,7 +112,15 @@ the first line outputs nothing.</p>
110
112
  Instance variables has to be used to share data between macro calls (due to
111
113
  “&lt;main&gt;” evaluation). Local variables are not persistent enough.
112
114
  Mucgly module method, “Mucgly.write”, is used to write out the calculation
113
- result. Mucgly module is defined within Mucgly utility.</p>
115
+ result. Mucgly module is part of Mucgly.</p>
116
+
117
+ <p>Typically Mucgly is executed in batch mode, e.g:</p>
118
+
119
+ <pre class="code ruby"><code class="ruby">mucgly -f foo.rx.txt -f bar.rx.txt -g .rx</code></pre>
120
+
121
+ <p>For all command line options, see:</p>
122
+
123
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_mucgly'>mucgly</span> <span class='op'>-</span><span class='id identifier rubyid_h'>h</span></code></pre>
114
124
 
115
125
  <h2 id="label-Features">Features</h2>
116
126
  <ul><li>
@@ -143,6 +153,8 @@ command line.</p>
143
153
  </li><li>
144
154
  <p>Document formatting.</p>
145
155
  </li><li>
156
+ <p>Template generation.</p>
157
+ </li><li>
146
158
  <p>Etc.</p>
147
159
  </li></ul>
148
160
 
@@ -189,25 +201,25 @@ be used for nested macros (if desired).</p>
189
201
  <h2 id="label-Special+commands">Special commands</h2>
190
202
 
191
203
  <p>In addition to regular Ruby code the macros are allowed to include so
192
- called Special Commands. These commands start with the “:” characters or
193
- with “.”.</p>
204
+ called Special Commands. These commands start with “:” or with “.”
205
+ character.</p>
194
206
 
195
207
  <h3 id="label-Named+commands">Named commands</h3>
196
208
 
197
209
  <p>Example for named command:</p>
198
210
 
199
- <pre class="code ruby"><code class="ruby"> ...
200
- -&lt;:hook [ ]&gt;-\
211
+ <pre class="code ruby"><code class="ruby">...
212
+ -&lt;:hook [ ]&gt;-\
201
213
  ...</code></pre>
202
214
 
203
- <p>Would change the hookbeg and hookend to “[” and “]” respectively. Note that
204
- hooks are changed only for the current input file. If for example an
205
- included input file changes hooks, the includer file still uses the
215
+ <p>This example would change the hookbeg and hookend to “[” and “]”
216
+ respectively. Note that hooks are changed only for the current input file.
217
+ If an included input file changes hooks, the includer file still uses the
206
218
  original hooks.</p>
207
219
 
208
- <p>One special command is allowed per macro and it can&#39;t be mixed normal
209
- Ruby code. Command name is separated by “:” in the beginning and by space
210
- (“ ”) in the end. The rest of the macro is taken as argument to the
220
+ <p>One special command is allowed per macro and it can&#39;t be mixed with
221
+ normal Ruby code. Command name is separated by “:” in the beginning and by
222
+ space (“ ”) in the end. The rest of the macro is taken as argument to the
211
223
  command.</p>
212
224
 
213
225
  <p>List of “:” style special commands:</p>
@@ -263,10 +275,10 @@ same as “:comment ”.</p>
263
275
  <h3 id="label-Multipass">Multipass</h3>
264
276
 
265
277
  <p>If the macro starts with “#” character, the macro is not excuted. The macro
266
- content is output with “#” removed from the output, including the current
267
- macro hooks. If 3 passes are needed, then “##” can be placed to the initial
268
- macro file. Multipass macro files are processes by (shell) piping the
269
- output of Mucgly to another Mucgly process.</p>
278
+ content is output with one “#” removed from the output, surrounded with the
279
+ current macro hooks. If 3 passes are needed, then “##” can be placed to the
280
+ initial macro file. Multipass macro files are processes by (shell) piping
281
+ the output of one Mucgly process to another.</p>
270
282
 
271
283
  <p>Multipass can be used for example to create a Table Of Contents. First pass
272
284
  collects information about document content and second pass will insert the
@@ -404,7 +416,7 @@ GEM executable (i.e. same command line options).</p>
404
416
  </div></div>
405
417
 
406
418
  <div id="footer">
407
- Generated on Fri Feb 27 16:43:23 2015 by
419
+ Generated on Sun Apr 5 20:11:53 2015 by
408
420
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
409
421
  0.8.7.6 (ruby-2.1.2).
410
422
  </div>
@@ -67,8 +67,9 @@
67
67
  <h2 id="label-Introduction">Introduction</h2>
68
68
 
69
69
  <p>Mucgly is a macro expander for inline macros that exist in the middle of
70
- body text. The macros are expected to be mostly regular Ruby code, but a
71
- few special commands are also available.</p>
70
+ body text. Mucgly is useful for code generation and all kinds of templating
71
+ systems. The macros are expected to be mostly regular Ruby code, but a few
72
+ special commands are also available.</p>
72
73
 
73
74
  <p>A very simple example:</p>
74
75
 
@@ -84,7 +85,7 @@ is mostly regular Ruby code. The first character is special syntax and the
84
85
  rest is pure Ruby code. The special character (command) “.” is used to
85
86
  print the Ruby code evaluation value to current output file (stream).</p>
86
87
 
87
- <p>Sample session to execute the example above:</p>
88
+ <p>Sample session to execute the above example interactively:</p>
88
89
 
89
90
  <pre class="code ruby"><code class="ruby">shell&gt; mucgly
90
91
  Adding 1 + 3 results to: -&lt;.1+3&gt;-
@@ -92,7 +93,8 @@ Adding 1 + 3 results to: 4
92
93
  &lt;Ctrl-D&gt;
93
94
  shell&gt;</code></pre>
94
95
 
95
- <p>Ruby code is always executed in the Ruby interpreters “&lt;main&gt;” scope.</p>
96
+ <p>Ruby code is always executed in the Ruby interpreters “&lt;main&gt;” scope,
97
+ i.e. Execution Environment.</p>
96
98
 
97
99
  <p>Previous example with multiple macros:</p>
98
100
 
@@ -110,7 +112,15 @@ the first line outputs nothing.</p>
110
112
  Instance variables has to be used to share data between macro calls (due to
111
113
  “&lt;main&gt;” evaluation). Local variables are not persistent enough.
112
114
  Mucgly module method, “Mucgly.write”, is used to write out the calculation
113
- result. Mucgly module is defined within Mucgly utility.</p>
115
+ result. Mucgly module is part of Mucgly.</p>
116
+
117
+ <p>Typically Mucgly is executed in batch mode, e.g:</p>
118
+
119
+ <pre class="code ruby"><code class="ruby">mucgly -f foo.rx.txt -f bar.rx.txt -g .rx</code></pre>
120
+
121
+ <p>For all command line options, see:</p>
122
+
123
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_mucgly'>mucgly</span> <span class='op'>-</span><span class='id identifier rubyid_h'>h</span></code></pre>
114
124
 
115
125
  <h2 id="label-Features">Features</h2>
116
126
  <ul><li>
@@ -143,6 +153,8 @@ command line.</p>
143
153
  </li><li>
144
154
  <p>Document formatting.</p>
145
155
  </li><li>
156
+ <p>Template generation.</p>
157
+ </li><li>
146
158
  <p>Etc.</p>
147
159
  </li></ul>
148
160
 
@@ -189,25 +201,25 @@ be used for nested macros (if desired).</p>
189
201
  <h2 id="label-Special+commands">Special commands</h2>
190
202
 
191
203
  <p>In addition to regular Ruby code the macros are allowed to include so
192
- called Special Commands. These commands start with the “:” characters or
193
- with “.”.</p>
204
+ called Special Commands. These commands start with “:” or with “.”
205
+ character.</p>
194
206
 
195
207
  <h3 id="label-Named+commands">Named commands</h3>
196
208
 
197
209
  <p>Example for named command:</p>
198
210
 
199
- <pre class="code ruby"><code class="ruby"> ...
200
- -&lt;:hook [ ]&gt;-\
211
+ <pre class="code ruby"><code class="ruby">...
212
+ -&lt;:hook [ ]&gt;-\
201
213
  ...</code></pre>
202
214
 
203
- <p>Would change the hookbeg and hookend to “[” and “]” respectively. Note that
204
- hooks are changed only for the current input file. If for example an
205
- included input file changes hooks, the includer file still uses the
215
+ <p>This example would change the hookbeg and hookend to “[” and “]”
216
+ respectively. Note that hooks are changed only for the current input file.
217
+ If an included input file changes hooks, the includer file still uses the
206
218
  original hooks.</p>
207
219
 
208
- <p>One special command is allowed per macro and it can&#39;t be mixed normal
209
- Ruby code. Command name is separated by “:” in the beginning and by space
210
- (“ ”) in the end. The rest of the macro is taken as argument to the
220
+ <p>One special command is allowed per macro and it can&#39;t be mixed with
221
+ normal Ruby code. Command name is separated by “:” in the beginning and by
222
+ space (“ ”) in the end. The rest of the macro is taken as argument to the
211
223
  command.</p>
212
224
 
213
225
  <p>List of “:” style special commands:</p>
@@ -263,10 +275,10 @@ same as “:comment ”.</p>
263
275
  <h3 id="label-Multipass">Multipass</h3>
264
276
 
265
277
  <p>If the macro starts with “#” character, the macro is not excuted. The macro
266
- content is output with “#” removed from the output, including the current
267
- macro hooks. If 3 passes are needed, then “##” can be placed to the initial
268
- macro file. Multipass macro files are processes by (shell) piping the
269
- output of Mucgly to another Mucgly process.</p>
278
+ content is output with one “#” removed from the output, surrounded with the
279
+ current macro hooks. If 3 passes are needed, then “##” can be placed to the
280
+ initial macro file. Multipass macro files are processes by (shell) piping
281
+ the output of one Mucgly process to another.</p>
270
282
 
271
283
  <p>Multipass can be used for example to create a Table Of Contents. First pass
272
284
  collects information about document content and second pass will insert the
@@ -404,7 +416,7 @@ GEM executable (i.e. same command line options).</p>
404
416
  </div></div>
405
417
 
406
418
  <div id="footer">
407
- Generated on Fri Feb 27 16:43:23 2015 by
419
+ Generated on Sun Apr 5 20:11:53 2015 by
408
420
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
409
421
  0.8.7.6 (ruby-2.1.2).
410
422
  </div>
@@ -103,7 +103,7 @@
103
103
  </div>
104
104
 
105
105
  <div id="footer">
106
- Generated on Fri Feb 27 16:43:23 2015 by
106
+ Generated on Sun Apr 5 20:11:53 2015 by
107
107
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
108
108
  0.8.7.6 (ruby-2.1.2).
109
109
  </div>
@@ -21,7 +21,7 @@ void mucgly_main( int argc, char** argv );
21
21
  /* Enable the define is input char based debugging is required. Set
22
22
  GDB breakpoint at mucgly_debug. */
23
23
  void mucgly_debug( void ) {}
24
- #if 1
24
+ #if 0
25
25
  # define DEBUG_CHAR '~'
26
26
  #endif
27
27
 
@@ -38,8 +38,8 @@ void mucgly_debug( void ) {}
38
38
  * parsing.
39
39
  *
40
40
  * Pstate contains Filestack. Filestack is a stack of input files. The
41
- * input file stack grows when the "lower" level files performs
42
- * include command.
41
+ * input file stack grows when the "lower" level files perform
42
+ * include commands.
43
43
  *
44
44
  * Filestack contains Stackfiles. Stackfile presents the read status
45
45
  * of an input file. It contains character position information for
@@ -65,7 +65,7 @@ void mucgly_debug( void ) {}
65
65
  struct stackfile_s {
66
66
 
67
67
  gchar* filename; /**< Filename. */
68
- FILE* fh; /**< Stream handle. */
68
+ FILE* fh; /**< IO stream handle. */
69
69
  GString* buf; /**< Put-back buffer (oldest-is-last). */
70
70
 
71
71
  int lineno; /**< Line number (0->). */
@@ -137,7 +137,7 @@ struct pstate_s {
137
137
 
138
138
  GList* output; /**< Stack of output streams. */
139
139
 
140
- gboolean flush;
140
+ gboolean flush; /**< Flush out-stream immediately. */
141
141
  };
142
142
  typedef struct pstate_s pstate_t;
143
143
 
@@ -149,9 +149,11 @@ typedef enum hook_e { hook_none, hook_end, hook_beg, hook_esc } hook_t;
149
149
  /** Current filestack from pstate_t (for convenience). */
150
150
  #define ps_has_file(ps) ((stackfile_t*)(ps)->fs->file)
151
151
 
152
+
152
153
  /** Current stackfile from pstate_t (for convenience). */
153
154
  #define ps_topfile(ps) ((stackfile_t*)(ps)->fs->file->data)
154
155
 
156
+
155
157
  /** Current stackfile from filestack_t (for convenience). */
156
158
  #define fs_topfile(fs) ((stackfile_t*)(fs)->file->data)
157
159
 
@@ -185,7 +187,7 @@ void sf_set_hook( stackfile_t* sf, hook_t hook, char* value );
185
187
  * ------------------------------------------------------------ */
186
188
 
187
189
 
188
- /**
190
+ /**
189
191
  * Compare two strings upto length of str1.
190
192
  *
191
193
  * @param str1 String 1.
@@ -204,8 +206,8 @@ int len_str_cmp( char* str1, char* str2 )
204
206
  }
205
207
 
206
208
 
207
- /**
208
- * Common utility function to output user info messages.
209
+ /**
210
+ * Common routine for user info message output.
209
211
  *
210
212
  * @param sf Currently processed file (or NULL).
211
213
  * @param infotype Severity type.
@@ -251,7 +253,7 @@ void mucgly_user_info( stackfile_t* sf, char* infotype, char* format, va_list ap
251
253
  }
252
254
 
253
255
 
254
- /**
256
+ /**
255
257
  * Report warning to user (no exit).
256
258
  *
257
259
  * @param sf Current input file.
@@ -266,7 +268,7 @@ void mucgly_warn( stackfile_t* sf, char* format, ... )
266
268
  }
267
269
 
268
270
 
269
- /**
271
+ /**
270
272
  * Report error to user (and exit).
271
273
  *
272
274
  * @param sf Current input file.
@@ -282,7 +284,7 @@ void mucgly_error( stackfile_t* sf, char* format, ... )
282
284
  }
283
285
 
284
286
 
285
- /**
287
+ /**
286
288
  * Report fatal error to user (and exit).
287
289
  *
288
290
  * @param sf Current input file.
@@ -298,7 +300,7 @@ void mucgly_fatal( stackfile_t* sf, char* format, ... )
298
300
  }
299
301
 
300
302
 
301
- /**
303
+ /**
302
304
  * Create new Stackfile.
303
305
  *
304
306
  * @param filename Filename (NULL for stdin).
@@ -369,7 +371,7 @@ stackfile_t* sf_new( gchar* filename, stackfile_t* inherit )
369
371
  }
370
372
 
371
373
 
372
- /**
374
+ /**
373
375
  * Store macro start info.
374
376
  *
375
377
  * @param sf Stackfile.
@@ -382,7 +384,7 @@ void sf_mark_macro( stackfile_t* sf )
382
384
  }
383
385
 
384
386
 
385
- /**
387
+ /**
386
388
  * Reset macro start info.
387
389
  *
388
390
  * @param sf Stackfile.
@@ -393,7 +395,7 @@ void sf_unmark_macro( stackfile_t* sf )
393
395
  }
394
396
 
395
397
 
396
- /**
398
+ /**
397
399
  * Free Stackfile and close the file stream.
398
400
  *
399
401
  * @param sf Stackfile.
@@ -417,7 +419,7 @@ void sf_rem( stackfile_t* sf )
417
419
  }
418
420
 
419
421
 
420
- /**
422
+ /**
421
423
  * Get char from Stackfile.
422
424
  *
423
425
  * @param sf Stackfile.
@@ -477,7 +479,7 @@ int sf_get( stackfile_t* sf )
477
479
  }
478
480
 
479
481
 
480
- /**
482
+ /**
481
483
  * Put char back to Stackfile.
482
484
  *
483
485
  * @param sf Stackfile.
@@ -505,7 +507,7 @@ gboolean sf_put( stackfile_t* sf, char c )
505
507
  }
506
508
 
507
509
 
508
- /**
510
+ /**
509
511
  * Set hook value.
510
512
  *
511
513
  * @param sf Stackfile.
@@ -545,7 +547,7 @@ void sf_set_hook( stackfile_t* sf, hook_t hook, char* value )
545
547
  }
546
548
 
547
549
 
548
- /**
550
+ /**
549
551
  * Create new Filestack.
550
552
  *
551
553
  * @return Filestack.
@@ -560,7 +562,7 @@ filestack_t* fs_new( void )
560
562
  }
561
563
 
562
564
 
563
- /**
565
+ /**
564
566
  * Free Filestack and close all Stackfiles.
565
567
  *
566
568
  * @param fs Filestack.
@@ -583,7 +585,7 @@ filestack_t* fs_rem( filestack_t* fs )
583
585
  }
584
586
 
585
587
 
586
- /**
588
+ /**
587
589
  * Push file on top of Filestack.
588
590
  *
589
591
  * @param fs Filestack.
@@ -608,7 +610,7 @@ void fs_push_file( filestack_t* fs, gchar* filename )
608
610
  }
609
611
 
610
612
 
611
- /**
613
+ /**
612
614
  * Pop file from top of Filestack. File is closed.
613
615
  *
614
616
  * @param fs Filestack.
@@ -629,7 +631,7 @@ void fs_pop_file( filestack_t* fs )
629
631
  }
630
632
 
631
633
 
632
- /**
634
+ /**
633
635
  * Get char from (through) Filestack (i.e. top file).
634
636
  *
635
637
  * @param fs Filestack.
@@ -662,7 +664,7 @@ int fs_get( filestack_t* fs )
662
664
  }
663
665
 
664
666
 
665
- /**
667
+ /**
666
668
  * Put back char.
667
669
  *
668
670
  * @param fs Filestack.
@@ -677,7 +679,7 @@ gboolean fs_put( filestack_t* fs, char c )
677
679
  }
678
680
 
679
681
 
680
- /**
682
+ /**
681
683
  * Get n chars from Filestack. If ret is non-null, use that for
682
684
  * storage.
683
685
  *
@@ -727,7 +729,7 @@ GString* fs_get_n( filestack_t* fs, int n, GString* ret )
727
729
  }
728
730
 
729
731
 
730
- /**
732
+ /**
731
733
  * Put chars in str back to Filestack. If n is 0, then use strlen to
732
734
  * get the count.
733
735
  *
@@ -753,7 +755,7 @@ gboolean fs_put_n( filestack_t* fs, gchar* str, int n )
753
755
  }
754
756
 
755
757
 
756
- /**
758
+ /**
757
759
  * Create new Outfile. If filename is NULL, then stream is stdout.
758
760
  *
759
761
  * @param filename File name (or NULL for stdout).
@@ -800,7 +802,7 @@ outfile_t* outfile_new( gchar* filename )
800
802
  }
801
803
 
802
804
 
803
- /**
805
+ /**
804
806
  * Free Outfile and close output stream if non-stdout.
805
807
  *
806
808
  * @param of Outfile.
@@ -815,7 +817,7 @@ void outfile_rem( outfile_t* of )
815
817
  }
816
818
 
817
819
 
818
- /**
820
+ /**
819
821
  * Create Pstate. Create input file stack and output file
820
822
  * stack. Initialize parsing state.
821
823
  *
@@ -850,7 +852,7 @@ pstate_t* ps_new( gchar* outfile )
850
852
  }
851
853
 
852
854
 
853
- /**
855
+ /**
854
856
  * Free Pstate. Close all input and output files.
855
857
  *
856
858
  * @param ps Pstate.
@@ -871,7 +873,7 @@ void ps_rem( pstate_t* ps )
871
873
  }
872
874
 
873
875
 
874
- /**
876
+ /**
875
877
  * Fast check for current input char being first char of any of the
876
878
  * hooks.
877
879
  *
@@ -895,7 +897,7 @@ gboolean ps_check_hook( pstate_t* ps, int c )
895
897
  }
896
898
 
897
899
 
898
- /**
900
+ /**
899
901
  * Check if input has the match string coming next. Erase the matched
900
902
  * string if erase is true and input is matched.
901
903
  *
@@ -928,7 +930,7 @@ gboolean ps_check( pstate_t* ps, gchar* match, gboolean erase )
928
930
  }
929
931
 
930
932
 
931
- /**
933
+ /**
932
934
  * Check input for hookesc.
933
935
  *
934
936
  * @param ps Pstate.
@@ -944,7 +946,7 @@ gboolean ps_check_hookesc( pstate_t* ps )
944
946
  }
945
947
 
946
948
 
947
- /**
949
+ /**
948
950
  * Check input for hookbeg.
949
951
  *
950
952
  * @param ps Pstate.
@@ -960,7 +962,7 @@ gboolean ps_check_hookbeg( pstate_t* ps )
960
962
  }
961
963
 
962
964
 
963
- /**
965
+ /**
964
966
  * Check input for hookend.
965
967
  *
966
968
  * @param ps Pstate.
@@ -976,7 +978,7 @@ gboolean ps_check_hookend( pstate_t* ps )
976
978
  }
977
979
 
978
980
 
979
- /**
981
+ /**
980
982
  * Get char (through Filestack).
981
983
  *
982
984
  * @param ps Pstate.
@@ -989,7 +991,7 @@ int ps_in( pstate_t* ps )
989
991
  }
990
992
 
991
993
 
992
- /**
994
+ /**
993
995
  * Output char to current output stream.
994
996
  *
995
997
  * @param ps Pstate.
@@ -1008,7 +1010,7 @@ void ps_out( pstate_t* ps, int c )
1008
1010
  }
1009
1011
 
1010
1012
 
1011
- /**
1013
+ /**
1012
1014
  * Output chars with ps_out.
1013
1015
  *
1014
1016
  * @param ps Pstate.
@@ -1028,7 +1030,7 @@ void ps_out_str( pstate_t* ps, gchar* str )
1028
1030
  }
1029
1031
 
1030
1032
 
1031
- /**
1033
+ /**
1032
1034
  * Push new output stream on top of output file stack.
1033
1035
  *
1034
1036
  * @param ps Pstate.
@@ -1041,7 +1043,7 @@ void ps_push_file( pstate_t* ps, gchar* filename )
1041
1043
  }
1042
1044
 
1043
1045
 
1044
- /**
1046
+ /**
1045
1047
  * Pop file from output file stack. Close the stream.
1046
1048
  *
1047
1049
  * @param ps Pstate.
@@ -1056,7 +1058,7 @@ void ps_pop_file( pstate_t* ps )
1056
1058
  }
1057
1059
 
1058
1060
 
1059
- /**
1061
+ /**
1060
1062
  * Return current Stackfile (input stream).
1061
1063
  *
1062
1064
  * @param ps Pstate.
@@ -1074,7 +1076,7 @@ stackfile_t* ps_current_file( pstate_t* ps )
1074
1076
  }
1075
1077
 
1076
1078
 
1077
- /**
1079
+ /**
1078
1080
  * Initialize macro content collection.
1079
1081
  *
1080
1082
  * @param ps Pstate.
@@ -1085,7 +1087,7 @@ void ps_start_collect( pstate_t* ps )
1085
1087
  }
1086
1088
 
1087
1089
 
1088
- /**
1090
+ /**
1089
1091
  * Add content to macro.
1090
1092
  *
1091
1093
  * @param ps Pstate.
@@ -1097,7 +1099,7 @@ void ps_collect( pstate_t* ps, int c )
1097
1099
  }
1098
1100
 
1099
1101
 
1100
- /**
1102
+ /**
1101
1103
  * Get current macro content.
1102
1104
  *
1103
1105
  * @param ps Pstate.
@@ -1110,7 +1112,7 @@ char* ps_get_macro( pstate_t* ps )
1110
1112
  }
1111
1113
 
1112
1114
 
1113
- /**
1115
+ /**
1114
1116
  * Evaluate str as Ruby code and convert result to string. Conversion
1115
1117
  * is performed if execution was successful and conversion was
1116
1118
  * requested.
@@ -1165,7 +1167,7 @@ gchar* ps_eval_ruby_str( pstate_t* ps, gchar* str, gboolean to_str, char* ctxt )
1165
1167
  }
1166
1168
 
1167
1169
 
1168
- /**
1170
+ /**
1169
1171
  * Load file Ruby intepreter.
1170
1172
  *
1171
1173
  * @param filename Source file.
@@ -1181,7 +1183,7 @@ void ps_load_ruby_file( pstate_t* ps, gchar* filename )
1181
1183
  }
1182
1184
 
1183
1185
 
1184
- /**
1186
+ /**
1185
1187
  * Execute Mucgly command/macro.
1186
1188
  *
1187
1189
  * @param ps Pstate.
@@ -1313,7 +1315,7 @@ gboolean ps_eval_cmd( pstate_t* ps )
1313
1315
  }
1314
1316
 
1315
1317
 
1316
- /* Convenience macro for non-hook processing. */
1318
+ /** Convenience macro for non-hook processing. */
1317
1319
  #define NON_HOOK_SEQ { \
1318
1320
  /* Non-hook input. */ \
1319
1321
  if ( ps->in_macro ) \
@@ -1334,7 +1336,7 @@ gboolean ps_eval_cmd( pstate_t* ps )
1334
1336
  }
1335
1337
 
1336
1338
 
1337
- /**
1339
+ /**
1338
1340
  * Process input file (or stack of files).
1339
1341
  *
1340
1342
  * @param ps Pstate.
@@ -1543,7 +1545,7 @@ void ps_process_file( pstate_t* ps, gchar* infile, gchar* outfile )
1543
1545
  * ------------------------------------------------------------ */
1544
1546
 
1545
1547
 
1546
- /**
1548
+ /**
1547
1549
  * Mucgly.write method. Write output current output without NL.
1548
1550
  *
1549
1551
  * @param obj Not used.
@@ -1568,7 +1570,7 @@ VALUE mucgly_write( VALUE obj, VALUE rstr )
1568
1570
  }
1569
1571
 
1570
1572
 
1571
- /**
1573
+ /**
1572
1574
  * Mucgly.puts method. Write output current output with NL.
1573
1575
  *
1574
1576
  * @param obj Not used.
@@ -1595,7 +1597,7 @@ VALUE mucgly_puts( VALUE obj, VALUE rstr )
1595
1597
  }
1596
1598
 
1597
1599
 
1598
- /**
1600
+ /**
1599
1601
  * Mucgly.hookbeg method. Get hookbeg.
1600
1602
  *
1601
1603
  * @param obj Not used.
@@ -1608,7 +1610,7 @@ VALUE mucgly_hookbeg( VALUE obj )
1608
1610
  }
1609
1611
 
1610
1612
 
1611
- /**
1613
+ /**
1612
1614
  * Mucgly.hookend method. Get hookend.
1613
1615
  *
1614
1616
  * @param obj Not used.
@@ -1621,7 +1623,7 @@ VALUE mucgly_hookend( VALUE obj )
1621
1623
  }
1622
1624
 
1623
1625
 
1624
- /**
1626
+ /**
1625
1627
  * Mucgly.hookesc method. Get hookesc.
1626
1628
  *
1627
1629
  * @param obj Not used.
@@ -1634,7 +1636,7 @@ VALUE mucgly_hookesc( VALUE obj )
1634
1636
  }
1635
1637
 
1636
1638
 
1637
- /**
1639
+ /**
1638
1640
  * Mucgly.sethookbeg method. Set hookbeg.
1639
1641
  *
1640
1642
  * @param obj Not used.
@@ -1651,7 +1653,7 @@ VALUE mucgly_sethookbeg( VALUE obj, VALUE rstr )
1651
1653
  }
1652
1654
 
1653
1655
 
1654
- /**
1656
+ /**
1655
1657
  * Mucgly.sethookend method. Set hookend.
1656
1658
  *
1657
1659
  * @param obj Not used.
@@ -1668,7 +1670,7 @@ VALUE mucgly_sethookend( VALUE obj, VALUE rstr )
1668
1670
  }
1669
1671
 
1670
1672
 
1671
- /**
1673
+ /**
1672
1674
  * Mucgly.sethookesc method. Set hookesc.
1673
1675
  *
1674
1676
  * @param obj Not used.
@@ -1685,7 +1687,7 @@ VALUE mucgly_sethookesc( VALUE obj, VALUE rstr )
1685
1687
  }
1686
1688
 
1687
1689
 
1688
- /**
1690
+ /**
1689
1691
  * Mucgly.ifilename method. Gets current input file name.
1690
1692
  *
1691
1693
  * @param obj Not used.
@@ -1698,7 +1700,7 @@ VALUE mucgly_ifilename( VALUE obj )
1698
1700
  }
1699
1701
 
1700
1702
 
1701
- /**
1703
+ /**
1702
1704
  * Mucgly.ilinenumber method. Gets current input file line.
1703
1705
  *
1704
1706
  * @param obj Not used.
@@ -1711,7 +1713,7 @@ VALUE mucgly_ilinenumber( VALUE obj )
1711
1713
  }
1712
1714
 
1713
1715
 
1714
- /**
1716
+ /**
1715
1717
  * Mucgly.ofilename method. Gets current output file name.
1716
1718
  *
1717
1719
  * @param obj Not used.
@@ -1726,7 +1728,7 @@ VALUE mucgly_ofilename( VALUE obj )
1726
1728
  }
1727
1729
 
1728
1730
 
1729
- /**
1731
+ /**
1730
1732
  * Mucgly.olinenumber method. Gets current output file line.
1731
1733
  *
1732
1734
  * @param obj Not used.
@@ -1741,7 +1743,7 @@ VALUE mucgly_olinenumber( VALUE obj )
1741
1743
  }
1742
1744
 
1743
1745
 
1744
- /**
1746
+ /**
1745
1747
  * Mucgly.pushinput method. Push new input stream.
1746
1748
  *
1747
1749
  * @param obj Not used.
@@ -1759,7 +1761,7 @@ VALUE mucgly_pushinput( VALUE obj, VALUE rstr )
1759
1761
  }
1760
1762
 
1761
1763
 
1762
- /**
1764
+ /**
1763
1765
  * Mucgly.closeinput method. Pop input stream and close file stream.
1764
1766
  *
1765
1767
  * @param obj Not used.
@@ -1773,7 +1775,7 @@ VALUE mucgly_closeinput( VALUE obj )
1773
1775
  }
1774
1776
 
1775
1777
 
1776
- /**
1778
+ /**
1777
1779
  * Mucgly.pushoutput method. Push new output stream.
1778
1780
  *
1779
1781
  * @param obj Not used.
@@ -1791,7 +1793,7 @@ VALUE mucgly_pushoutput( VALUE obj, VALUE rstr )
1791
1793
  }
1792
1794
 
1793
1795
 
1794
- /**
1796
+ /**
1795
1797
  * Mucgly.closeoutput method. Pop output stream and close file stream.
1796
1798
  *
1797
1799
  * @param obj Not used.
@@ -1806,7 +1808,7 @@ VALUE mucgly_closeoutput( VALUE obj )
1806
1808
 
1807
1809
 
1808
1810
  #ifdef MUCGLY_LIB
1809
- /**
1811
+ /**
1810
1812
  * Call mucgly C-side entry point. Convert Ruby ARGV array to C-array
1811
1813
  * for C-side command line arg parsing.
1812
1814
  *
@@ -1835,7 +1837,7 @@ VALUE mucgly_run_mucgly( VALUE obj, VALUE cli )
1835
1837
  #endif
1836
1838
 
1837
1839
 
1838
- /**
1840
+ /**
1839
1841
  * Create Mucgly Ruby module and register all methods to it.
1840
1842
  *
1841
1843
  */
@@ -1869,7 +1871,7 @@ void Init_mucgly( void )
1869
1871
  }
1870
1872
 
1871
1873
 
1872
- /**
1874
+ /**
1873
1875
  * Generate outfile name from infile by removing the outfile_tag from
1874
1876
  * infile name.
1875
1877
  *
@@ -1941,30 +1943,30 @@ void mucgly_main( int argc, char** argv )
1941
1943
 
1942
1944
  GOptionEntry opts_table[] =
1943
1945
  {
1944
- { "files", 'f', 0, G_OPTION_ARG_FILENAME_ARRAY,
1945
- &opt_files, "Input file(s) (default: stdin).", NULL },
1946
- { "configs", 'c', 0, G_OPTION_ARG_FILENAME_ARRAY,
1947
- &opt_configs, "Ruby configuration file(s).", NULL },
1948
- { "output", 'o', 0, G_OPTION_ARG_FILENAME,
1949
- &opt_output, "Output file(s) (default: stdout).", NULL },
1950
- { "genout", 'g', 0, G_OPTION_ARG_STRING,
1951
- &opt_genout, "Generate output file names (remove arg from input filename).", NULL },
1952
- { "cli_cmds", 'l', 0, G_OPTION_ARG_STRING_ARRAY,
1953
- &opt_cli_cmds, "Command line configuration(s).", NULL },
1954
- { "beg_sep", 'b', 0, G_OPTION_ARG_STRING,
1955
- &opt_beg_sep, "Set hookbeg separator (default: '-<').", NULL },
1956
- { "end_sep", 'e', 0, G_OPTION_ARG_STRING,
1957
- &opt_end_sep, "Set hookend separator (default: '>-').", NULL },
1958
- { "esc_sep", 's', 0, G_OPTION_ARG_STRING,
1959
- &opt_esc_sep, "Set hookesc separator (default: '\\').", NULL },
1960
- { "all_sep", 'a', 0, G_OPTION_ARG_STRING,
1961
- &opt_all_sep, "Set all separators.", NULL },
1962
- { "module", 'm', 0, G_OPTION_ARG_NONE,
1963
- &opt_module, "Include Mucgly module at start.", NULL },
1964
- { "interact", 'i', 0, G_OPTION_ARG_NONE,
1965
- &opt_interact, "Flush output for proper interaction.", NULL },
1966
- { "no_init", 'n', 0, G_OPTION_ARG_NONE,
1967
- &opt_no_init, "No init file (MUCGLY env var).", NULL },
1946
+ { "files", 'f', 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_files,
1947
+ "Input file(s) (default: stdin).", NULL },
1948
+ { "configs", 'c', 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_configs,
1949
+ "Ruby configuration file(s).", NULL },
1950
+ { "output", 'o', 0, G_OPTION_ARG_FILENAME, &opt_output,
1951
+ "Output file(s) (default: stdout).", NULL },
1952
+ { "genout", 'g', 0, G_OPTION_ARG_STRING, &opt_genout,
1953
+ "Generate output file names (remove arg from input filename).", NULL },
1954
+ { "cli_cmds", 'l', 0, G_OPTION_ARG_STRING_ARRAY, &opt_cli_cmds,
1955
+ "Command line configuration(s).", NULL },
1956
+ { "beg_sep", 'b', 0, G_OPTION_ARG_STRING, &opt_beg_sep,
1957
+ "Set hookbeg separator (default: '-<').", NULL },
1958
+ { "end_sep", 'e', 0, G_OPTION_ARG_STRING, &opt_end_sep,
1959
+ "Set hookend separator (default: '>-').", NULL },
1960
+ { "esc_sep", 's', 0, G_OPTION_ARG_STRING, &opt_esc_sep,
1961
+ "Set hookesc separator (default: '\\').", NULL },
1962
+ { "all_sep", 'a', 0, G_OPTION_ARG_STRING, &opt_all_sep,
1963
+ "Set all separators.", NULL },
1964
+ { "module", 'm', 0, G_OPTION_ARG_NONE, &opt_module,
1965
+ "Include Mucgly module at startup.", NULL },
1966
+ { "interact", 'i', 0, G_OPTION_ARG_NONE, &opt_interact,
1967
+ "Flush output for convenient interaction.", NULL },
1968
+ { "no_init", 'n', 0, G_OPTION_ARG_NONE, &opt_no_init,
1969
+ "No init file (skip MUCGLY env var).", NULL },
1968
1970
  { NULL }
1969
1971
  };
1970
1972
 
@@ -1997,9 +1999,7 @@ void mucgly_main( int argc, char** argv )
1997
1999
  "MUCGLY env set, but the file \"%s\" does not exist!",
1998
2000
  init );
1999
2001
  else
2000
- {
2001
- ps_load_ruby_file( ps, init );
2002
- }
2002
+ ps_load_ruby_file( ps, init );
2003
2003
  }
2004
2004
  }
2005
2005
 
@@ -2051,8 +2051,10 @@ void mucgly_main( int argc, char** argv )
2051
2051
 
2052
2052
 
2053
2053
  if ( opt_interact )
2054
+ /* Flush output immediately in interactive mode. */
2054
2055
  ps->flush = TRUE;
2055
2056
 
2057
+
2056
2058
  /* Process input files. */
2057
2059
  if ( opt_files )
2058
2060
  {
@@ -2080,7 +2082,7 @@ void mucgly_main( int argc, char** argv )
2080
2082
 
2081
2083
 
2082
2084
  #ifndef MUCGLY_LIB
2083
- /**
2085
+ /**
2084
2086
  * C-top entry point.
2085
2087
  *
2086
2088
  * @param argc Cli arg count.