Lines Matching +full:ascii +full:. +full:r

3    Free Software Foundation, Inc.
4 Written by James Clark (jjc@jclark.com)
6 This file is part of groff.
11 version.
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
19 with groff; see the file COPYING. If not, write to the Free Software
20 Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */
22 #include "driver.h"
23 #include "stringclass.h"
24 #include "cset.h"
26 #include "ps.h"
38 cset white_space("\n\r \t\f");
139 resource::resource(resource_type t, string &n, string &v, unsigned r)
140 : next(0), type(t), flags(0), revision(r), filename(0), rank(-1)
142 name.move(n);
143 version.move(v);
145 if (name.search('\0') >= 0)
147 filename = name.extract();
198 resource *r;
199 for (r = resource_list; r; r = r->next)
200 if (r->type == type
201 && r->name == name
202 && r->version == version
203 && r->revision == revision)
204 return r;
205 r = new resource(type, name, version, revision);
206 r->next = resource_list;
207 resource_list = r;
208 return r;
211 // Just a specialized version of lookup_resource().
215 resource *r;
216 for (r = resource_list; r; r = r->next)
217 if (r->type == RESOURCE_FONT
218 && strlen(name) == (size_t)r->name.length()
219 && memcmp(name, r->name.contents(), r->name.length()) == 0)
220 return r;
222 r = new resource(RESOURCE_FONT, s);
223 r->next = resource_list;
224 resource_list = r;
225 return r;
233 typedef resource *Presource; // Work around g++ bug.
238 resource *r;
239 for (r = resource_list; r; r = r->next)
240 if (r->rank >= nranks)
241 nranks = r->rank + 1;
243 // Sort resource_list in reverse order of rank.
251 for (r = resource_list; r; r = r->next) {
252 i = r->rank < 0 ? 0 : r->rank + 1;
253 *tail[i] = r;
265 for (r = resource_list; r; r = r->next)
266 if (r->next)
267 assert(r->rank >= r->next->rank);
268 for (r = resource_list; r; r = r->next)
269 if (r->type == RESOURCE_FONT && r->rank >= 0)
270 supply_resource(r, -1, out.get_file());
277 for (resource *r = resource_list; r; r = r->next)
278 if (r->flags & flag) {
288 r->print_type_and_name(outfp);
295 for (resource *r = resource_list; r; r = r->next)
296 if (r->type == RESOURCE_FONT && (r->flags & resource::FONT_NEEDED))
297 supply_resource(r, 0, 0);
298 print_resources_comment(resource::NEEDED, out.get_file());
299 print_resources_comment(resource::SUPPLIED, out.get_file());
300 print_language_level_comment(out.get_file());
301 print_extensions_comment(out.get_file());
306 FILE *outfp = out.get_file();
307 out.end_line();
314 if (putenv(strsave(e.contents())))
332 out.end_line();
334 resource *r = lookup_resource(RESOURCE_FILE, name);
335 supply_resource(r, -1, out.get_file(), 1);
338 void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
341 if (r->flags & resource::BUSY) {
342 r->name += '\0';
344 resource_table[r->type],
345 r->name.contents());
347 r->flags |= resource::BUSY;
348 if (rank > r->rank)
349 r->rank = rank;
352 if (r->filename != 0) {
353 if (r->type == RESOURCE_FONT) {
354 fp = font::open_file(r->filename, &path);
356 error("can't find `%1'", r->filename);
357 a_delete r->filename;
358 r->filename = 0;
363 fp = include_search_path.open_file_cautious(r->filename);
365 error("can't open `%1': %2", r->filename, strerror(errno));
366 a_delete r->filename;
367 r->filename = 0;
370 path = r->filename;
375 if (r->type == RESOURCE_FILE && is_document) {
377 print_ps_string(r->name, outfp);
382 r->print_type_and_name(outfp);
388 if (r->type == RESOURCE_FONT)
391 if (r->type == RESOURCE_FILE && is_document)
396 r->flags |= resource::SUPPLIED;
400 if (r->type == RESOURCE_FILE && is_document) {
402 print_ps_string(r->name, outfp);
407 r->print_type_and_name(outfp);
411 r->flags |= resource::NEEDED;
413 r->flags &= ~resource::BUSY;
420 buf.clear();
425 while (c != '\r' && c != '\n' && c != EOF) {
433 if (c == '\r') {
443 res.clear();
456 res.clear();
459 if (**pp == '\0' || **pp == '\r' || **pp == '\n') {
481 case 'r':
585 if ((size_t)buf.length() < strlen(comment) + 3)
589 const char *bufp = buf.contents() + 2;
600 // Return 1 if the line should be copied out.
605 resource *r = read_resource_arg(&ptr);
606 if (r)
607 r->flags |= resource::SUPPLIED;
614 resource *r = read_resource_arg(&ptr);
615 if (r) {
616 if (r->type == RESOURCE_FONT) {
618 supply_resource(r, rank + 1, outfp);
620 r->flags |= resource::FONT_NEEDED;
623 supply_resource(r, rank, outfp);
631 resource *r = read_file_arg(&ptr);
632 if (r)
633 r->flags |= resource::SUPPLIED;
640 resource *r = read_file_arg(&ptr);
641 if (r)
642 supply_resource(r, rank, outfp, 1);
649 resource *r = read_procset_arg(&ptr);
650 if (r) {
651 r->flags |= resource::SUPPLIED;
654 r->print_type_and_name(outfp);
664 resource *r = read_procset_arg(&ptr);
665 if (r)
666 supply_resource(r, rank, outfp);
673 resource *r = read_file_arg(&ptr);
674 if (r) {
675 r->flags |= resource::SUPPLIED;
678 r->print_type_and_name(outfp);
688 resource *r = read_file_arg(&ptr);
689 if (r)
690 supply_resource(r, rank, outfp);
697 resource *r = read_font_arg(&ptr);
698 if (r) {
699 r->flags |= resource::SUPPLIED;
702 r->print_type_and_name(outfp);
712 resource *r = read_font_arg(&ptr);
713 if (r) {
715 supply_resource(r, rank + 1, outfp);
717 r->flags |= resource::FONT_NEEDED;
762 if (c == '\r') {
794 static const char *types[] = { "Binary", "Hex", "ASCII" };
836 if (c == '\r') {
860 fputs(buf.contents(), outfp);
883 if (c == '\r') {
902 fputs(buf.contents(), outfp);
931 error("unknown extension `%1'", s.contents());
938 // out Page: Trailer {Begin,End}Prolog {Begin,End}Setup sections.
942 // the first line of the file.
948 // just analyzing the file (ie outfp is 0), then we can return immediately.
997 if ((size_t)buf.length() < sizeof(PS_MAGIC)
998 || memcmp(buf.contents(), PS_MAGIC, sizeof(PS_MAGIC) - 1) != 0) {
1003 fputs(buf.contents(), outfp);
1009 fputs(buf.contents(), outfp);
1023 if ((ptr = matches_comment(buf, comment_table[i].name))) {
1025 = (this->*(comment_table[i].proc))(ptr, rank, fp, outfp);
1068 fputs(buf.contents(), outfp);
1085 char *p = strtok(buf, " \t\r\n");
1088 char *q = strtok(0, " \t\r\n");
1101 int len = s.length();
1102 const char *str = s.contents();
1139 case '\r':
1140 fputs("\\r", outfp);