Introduction
Introduction Statistics Contact Development Disclaimer Help
format.h - abc2ps - A powerful sheet setting tool using the simple abc notation
git clone git://vernunftzentrum.de/abc2ps.git
Log
Files
Refs
---
format.h (16143B)
---
1 /*
2 * This file is part of abc2ps,
3 * Copyright (C) 1996,1997,1998 Michael Methfessel
4 * See file abc2ps.c for details.
5 */
6
7 /* subroutines connected with page layout */
8
9
10 /* ----- fontspec ----- */
11 void fontspec (f,name,size,box)
12 char name [];
13 float size;
14 int box;
15 struct FONTSPEC *f;
16 {
17 strcpy (f->name, name);
18 f->size = size;
19 f->box = box;
20 }
21
22 /* ----- add_font ----- */
23 /* checks font list, adds font if new */
24 int add_font (f)
25 struct FONTSPEC *f;
26 {
27 int i,i0,fnum;
28
29 i0=-1;
30 for (i=0;i<nfontnames;i++) {
31 if (!strcmp(f->name,fontnames[i])) i0=i;
32 }
33
34 if (i0>=0) {
35 fnum=i0;
36 if (vb>=10) printf("Already at %d: font %s\n",fnum,f->name);
37 }
38 else {
39 fnum=nfontnames;
40 strcpy(fontnames[fnum],f->name);
41 if (vb>=10) printf("Add new at %d: font %s\n",fnum,f->name);
42 nfontnames++;
43 }
44 return fnum;
45 }
46
47
48 /* ----- make_font_list ----- */
49 void make_font_list (f)
50 struct FORMAT *f;
51 {
52 if (vb>=10) printf ("Adding fonts from format..\n");
53 add_font (&f->titlefont);
54 add_font (&f->subtitlefont);
55 add_font (&f->composerfont);
56 add_font (&f->partsfont);
57 add_font (&f->tempofont);
58 add_font (&f->vocalfont);
59 add_font (&f->textfont);
60 add_font (&f->wordsfont);
61 add_font (&f->gchordfont);
62 add_font (&f->voicefont);
63 add_font (&f->barnumfont);
64 add_font (&f->barlabelfont);
65 }
66
67
68 /* ----- set_standard_format ----- */
69 void set_standard_format (f)
70 struct FORMAT *f;
71 {
72 strcpy (f->name, "standard");
73 f->pageheight = PAGEHEIGHT * CM;
74 f->staffwidth = STAFFWIDTH * CM;
75 f->leftmargin = LEFTMARGIN * CM;
76 f->topmargin = 1.0 * CM;
77 f->botmargin = 1.0 * CM;
78 f->topspace = 0.8 * CM;
79 f->titlespace = 0.2 * CM;
80 f->subtitlespace = 0.1 * CM;
81 f->composerspace = 0.2 * CM;
82 f->musicspace = 0.2 * CM;
83 f->partsspace = 0.3 * CM;
84 f->staffsep = 46.0 * PT;
85 f->sysstaffsep = 40.0 * PT;
86 f->systemsep = 55.0 * PT;
87 f->vocalspace = 23.0 * PT;
88 f->textspace = 0.5 * CM;
89 f->wordsspace = 0.0 * CM;
90 f->scale = 0.70;
91 f->maxshrink = 0.65;
92 f->landscape = 0;
93 f->titleleft = 0;
94 f->stretchstaff = 1;
95 f->stretchlast = 0;
96 f->continueall = 0;
97 f->breakall = 0;
98 f->writehistory = 0;
99 f->withxrefs = 0;
100 f->oneperpage = 0;
101 f->titlecaps = 0;
102 f->barsperstaff = 0;
103 f->barnums = -1;
104 f->lineskipfac = 1.1;
105 f->parskipfac = 0.4;
106 f->strict1 = 0.5;
107 f->strict2 = 0.8;
108 f->indent = 0.0;
109 fontspec (&f->titlefont, "Times-Roman", 15.0, 0);
110 fontspec (&f->subtitlefont, "Times-Roman", 12.0, 0);
111 fontspec (&f->composerfont, "Times-Italic", 11.0, 0);
112 fontspec (&f->partsfont, "Times-Roman", 11.0, 0);
113 fontspec (&f->tempofont, "Times-Bold", 10.0, 0);
114 fontspec (&f->vocalfont, "Times-Bold", 13.0, 0);
115 fontspec (&f->textfont, "Times-Roman", 12.0, 0);
116 fontspec (&f->wordsfont, "Times-Roman", 12.0, 0);
117 fontspec (&f->gchordfont, "Helvetica", 12.0, 0);
118 fontspec (&f->voicefont, "Times-Roman", 12.0, 0);
119 fontspec (&f->barnumfont, "Times-Italic", 12.0, 0);
120 fontspec (&f->barlabelfont, "Times-Bold", 18.0, 0);
121 fontspec (&f->indexfont, "Times-Roman", 11.0, 0);
122 if (vb>=10) printf ("Loading format \"%s\"\n",f->name);
123 }
124
125 /* ----- set_pretty_format ----- */
126 void set_pretty_format (f)
127 struct FORMAT *f;
128 {
129 set_standard_format (f);
130 strcpy (f->name, "pretty");
131 f->titlespace = 0.4 * CM;
132 f->composerspace = 0.25 * CM;
133 f->musicspace = 0.25 * CM;
134 f->partsspace = 0.3 * CM;
135 f->staffsep = 50.0 * PT;
136 f->sysstaffsep = 45.0 * PT;
137 f->systemsep = 55.0 * PT;
138 f->scale = 0.75;
139 f->maxshrink = 0.55;
140 f->parskipfac = 0.1;
141 fontspec (&f->titlefont, "Times-Roman", 18.0, 0);
142 fontspec (&f->subtitlefont, "Times-Roman", 15.0, 0);
143 fontspec (&f->composerfont, "Times-Italic", 12.0, 0);
144 fontspec (&f->partsfont, "Times-Roman", 12.0, 0);
145 fontspec (&f->tempofont, "Times-Bold", 10.0, 0);
146 fontspec (&f->vocalfont, "Times-Bold", 14.0, 0);
147 fontspec (&f->textfont, "Times-Roman", 10.0, 0);
148 fontspec (&f->wordsfont, "Times-Roman", 10.0, 0);
149 fontspec (&f->gchordfont, "Helvetica", 12.0, 0);
150 fontspec (&f->voicefont, "Times-Roman", 12.0, 0);
151 }
152
153 /* ----- set_pretty2_format ----- */
154 void set_pretty2_format (f)
155 struct FORMAT *f;
156 {
157 set_standard_format (f);
158 strcpy (f->name, "pretty2");
159 f->titlespace = 0.4 * CM;
160 f->composerspace = 0.3 * CM;
161 f->musicspace = 0.25 * CM;
162 f->partsspace = 0.2 * CM;
163 f->staffsep = 55.0 * PT;
164 f->sysstaffsep = 45.0 * PT;
165 f->systemsep = 55.0 * PT;
166 f->textspace = 0.2 * CM;
167 f->scale = 0.70;
168 f->maxshrink = 0.55;
169 f->titleleft = 1;
170 f->parskipfac = 0.1;
171 fontspec (&f->titlefont, "Helvetica-Bold", 16.0, 0);
172 fontspec (&f->subtitlefont, "Helvetica-Bold", 13.0, 0);
173 fontspec (&f->composerfont, "Helvetica", 10.0, 0);
174 fontspec (&f->partsfont, "Times-Roman", 12.0, 0);
175 fontspec (&f->tempofont, "Times-Bold", 10.0, 0);
176 fontspec (&f->vocalfont, "Times-Bold", 13.0, 0);
177 fontspec (&f->textfont, "Times-Roman", 10.0, 0);
178 fontspec (&f->wordsfont, "Times-Roman", 10.0, 0);
179 fontspec (&f->gchordfont, "Helvetica", 12.0, 0);
180 fontspec (&f->voicefont, "Times-Roman", 12.0, 0);
181 fontspec (&f->barnumfont, "Times-Roman", 11.0, 1);
182 fontspec (&f->barlabelfont, "Times-Bold", 18.0, 1);
183 }
184
185
186 /* ----- print_font ----- */
187 void print_font (str,fs)
188 char *str;
189 struct FONTSPEC fs;
190 {
191 printf (" %-14s %s %.1f", str, fs.name, fs.size);
192 if (fs.box) printf (" box");
193 printf ("\n");
194 }
195
196
197 /* ----- print_format ----- */
198 void print_format (f)
199 struct FORMAT f;
200 {
201 char yn[2][5]={"no","yes"};
202
203 printf ("\nFormat \"%s\":\n", f.name);
204 printf (" pageheight %.2fcm\n", f.pageheight/CM);
205 printf (" staffwidth %.2fcm\n", f.staffwidth/CM);
206 printf (" topmargin %.2fcm\n", f.topmargin/CM);
207 printf (" botmargin %.2fcm\n", f.botmargin/CM);
208 printf (" leftmargin %.2fcm\n", f.leftmargin/CM);
209 printf (" topspace %.2fcm\n", f.topspace/CM);
210 printf (" titlespace %.2fcm\n", f.titlespace/CM);
211 printf (" subtitlespace %.2fcm\n", f.subtitlespace/CM);
212 printf (" composerspace %.2fcm\n", f.composerspace/CM);
213 printf (" musicspace %.2fcm\n", f.musicspace/CM);
214 printf (" partsspace %.2fcm\n", f.partsspace/CM);
215 printf (" wordsspace %.2fcm\n", f.wordsspace/CM);
216 printf (" textspace %.2fcm\n", f.textspace/CM);
217 printf (" vocalspace %.1fpt\n", f.vocalspace);
218 printf (" staffsep %.1fpt\n", f.staffsep);
219 printf (" sysstaffsep %.1fpt\n", f.sysstaffsep);
220 printf (" systemsep %.1fpt\n", f.systemsep);
221 printf (" scale %.2f\n", f.scale);
222 printf (" maxshrink %.2f\n", f.maxshrink);
223 printf (" strictness1 %.2f\n", f.strict1);
224 printf (" strictness2 %.2f\n", f.strict2);
225 printf (" indent %.1fpt\n", f.indent);
226
227 print_font("titlefont", f.titlefont);
228 print_font("subtitlefont", f.subtitlefont);
229 print_font("composerfont", f.composerfont);
230 print_font("partsfont", f.partsfont);
231 print_font("tempofont", f.tempofont);
232 print_font("vocalfont", f.vocalfont);
233 print_font("gchordfont", f.gchordfont);
234 print_font("textfont", f.textfont);
235 print_font("wordsfont", f.wordsfont);
236 print_font("voicefont", f.voicefont);
237 print_font("barnumberfont",f.barnumfont);
238 print_font("barlabelfont", f.barlabelfont);
239 print_font("indexfont", f.indexfont);
240
241 printf (" lineskipfac %.1f\n", f.lineskipfac);
242 printf (" parskipfac %.1f\n", f.parskipfac);
243 printf (" barsperstaff %d\n", f.barsperstaff);
244 printf (" barnumbers %d\n", f.barnums);
245 printf (" landscape %s\n", yn[f.landscape]);
246 printf (" titleleft %s\n", yn[f.titleleft]);
247 printf (" titlecaps %s\n", yn[f.titlecaps]);
248 printf (" stretchstaff %s\n", yn[f.stretchstaff]);
249 printf (" stretchlast %s\n", yn[f.stretchlast]);
250 printf (" writehistory %s\n", yn[f.writehistory]);
251 printf (" continueall %s\n", yn[f.continueall]);
252 printf (" breakall %s\n", yn[f.breakall]);
253 printf (" oneperpage %s\n", yn[f.oneperpage]);
254 printf (" withxrefs %s\n", yn[f.withxrefs]);
255
256 }
257
258
259 /* ----- g_unum: read a number with a unit ----- */
260 void g_unum (l,s,num)
261 char *l,*s;
262 float *num;
263 {
264 float a,b;
265 char unit[81];
266
267 strcpy(unit,"pt");
268 sscanf(s,"%f%s", &a, unit);
269
270 if (!strcmp(unit,"cm")) b=a*CM;
271 else if (!strcmp(unit,"mm")) b=a*CM*0.1;
272 else if (!strcmp(unit,"in")) b=a*IN;
273 else if (!strcmp(unit,"pt")) b=a*PT;
274 else {
275 printf ("+++ Unknown unit \"%s\" in line: %s\n",unit,l);
276 exit (3);
277 }
278 *num = b;
279 }
280
281 /* ----- g_logv: read a logical variable ----- */
282 void g_logv (l,s,v)
283 char *l,*s;
284 int *v;
285 {
286 int k;
287 char t[31];
288
289 strcpy(t,"1");
290 sscanf (s,"%s", t);
291 if (!strcmp(t,"1") || !strcmp(t,"yes") || !strcmp(t,"true"))
292 k=1;
293 else if (!strcmp(t,"0") || !strcmp(t,"no") || !strcmp(t,"false"))
294 k=0;
295 else {
296 printf ("\n+++ Unknown logical value \"%s\" near \"%s\"\n",t,l);
297 exit (3);
298 }
299 *v = k;
300 }
301
302
303 /* ----- g_fltv: read a float variable, no units ----- */
304 void g_fltv (l,nch,v)
305 char *l;
306 int nch;
307 float *v;
308 {
309 float k;
310
311 sscanf (l+nch,"%f", &k);
312 *v = k;
313 }
314
315 /* ----- g_intv: read an int variable, no units ----- */
316 void g_intv (l,nch,v)
317 char *l;
318 int nch;
319 int *v;
320 {
321 int k;
322
323 sscanf (l+nch,"%d", &k);
324 *v = k;
325 }
326
327
328
329 /* ----- g_fspc: read a font specifier ----- */
330 void g_fspc (l,nch,fn)
331 char *l;
332 int nch;
333 struct FONTSPEC *fn;
334 {
335 char fname[101],ssiz[101],sbox[101];
336 float fsize;
337
338 fsize=fn->size;
339 strcpy(sbox,"SnOt");
340 strcpy(ssiz,"SnOt");
341
342 sscanf (l+nch,"%s %s %s", fname, ssiz, sbox);
343 if (strcmp(fname,"*")) strcpy (fn->name, fname);
344
345 if (strcmp(ssiz,"*")) sscanf(ssiz,"%f",&fsize);
346 fn->size = fsize;
347
348 if (!strcmp(sbox,"box")) fn->box=1;
349 else if (!strcmp(sbox,"SnOt")) ;
350 else wng ("incorrect font spec: ", l+nch);
351
352 if (!file_initialized) add_font (fn);
353 }
354
355
356 /* ----- interpret_format_line ----- */
357 /* read a line with a format directive, set in format struct f */
358 int interpret_format_line (l,f)
359 char l[];
360 struct FORMAT *f;
361 {
362 char w[81],fnm[81];
363 int nch,i,fnum;
364 char *s;
365 struct FONTSPEC tempfont;
366
367 strcpy(w,"");
368 sscanf(l,"%s%n", w, &nch);
369 if (!strcmp(w,"")) return 0;
370 if (w[0]=='%') return 0;
371 if (vb>=6) printf ("Interpret format line: %s\n", l);
372 if (!strcmp(w,"end")) return 1;
373 s=l+nch;
374
375 if (!strcmp(w,"pageheight")) g_unum(l,s,&f->pageheight);
376 else if (!strcmp(w,"staffwidth")) g_unum(l,s,&f->staffwidth);
377 else if (!strcmp(w,"topmargin")) g_unum(l,s,&f->topmargin);
378 else if (!strcmp(w,"botmargin")) g_unum(l,s,&f->botmargin);
379 else if (!strcmp(w,"leftmargin")) g_unum(l,s,&f->leftmargin);
380 else if (!strcmp(w,"topspace")) g_unum(l,s,&f->topspace);
381 else if (!strcmp(w,"wordsspace")) g_unum(l,s,&f->wordsspace);
382 else if (!strcmp(w,"titlespace")) g_unum(l,s,&f->titlespace);
383 else if (!strcmp(w,"subtitlespace")) g_unum(l,s,&f->subtitlespace);
384 else if (!strcmp(w,"composerspace")) g_unum(l,s,&f->composerspace);
385 else if (!strcmp(w,"musicspace")) g_unum(l,s,&f->musicspace);
386 else if (!strcmp(w,"partsspace")) g_unum(l,s,&f->partsspace);
387 else if (!strcmp(w,"staffsep")) g_unum(l,s,&f->staffsep);
388 else if (!strcmp(w,"sysstaffsep")) g_unum(l,s,&f->sysstaffsep);
389 else if (!strcmp(w,"systemsep")) g_unum(l,s,&f->systemsep);
390 else if (!strcmp(w,"vocalspace")) g_unum(l,s,&f->vocalspace);
391 else if (!strcmp(w,"textspace")) g_unum(l,s,&f->textspace);
392
393 else if (!strcmp(w,"scale")) g_fltv(l,nch,&f->scale);
394 else if (!strcmp(w,"maxshrink")) g_fltv(l,nch,&f->maxshrink);
395 else if (!strcmp(w,"lineskipfac")) g_fltv(l,nch,&f->lineskipfac);
396 else if (!strcmp(w,"parskipfac")) g_fltv(l,nch,&f->parskipfac);
397 else if (!strcmp(w,"barsperstaff")) g_intv(l,nch,&f->barsperstaff);
398 else if (!strcmp(w,"barnumbers")) g_intv(l,nch,&f->barnums);
399 else if (!strcmp(w,"strictness1")) g_fltv(l,nch,&f->strict1);
400 else if (!strcmp(w,"strictness2")) g_fltv(l,nch,&f->strict2);
401 else if (!strcmp(w,"strictness")) {
402 g_fltv(l,nch,&f->strict1); f->strict2=f->strict1; }
403 else if (!strcmp(w,"indent")) g_unum(l,s,&f->indent);
404
405 else if (!strcmp(w,"titleleft")) g_logv(l,s,&f->titleleft);
406 else if (!strcmp(w,"titlecaps")) g_logv(l,s,&f->titlecaps);
407 else if (!strcmp(w,"landscape")) g_logv(l,s,&f->landscape);
408 else if (!strcmp(w,"stretchstaff")) g_logv(l,s,&f->stretchstaff);
409 else if (!strcmp(w,"stretchlast")) g_logv(l,s,&f->stretchlast);
410 else if (!strcmp(w,"continueall")) g_logv(l,s,&f->continueall);
411 else if (!strcmp(w,"breakall")) g_logv(l,s,&f->breakall);
412 else if (!strcmp(w,"writehistory")) g_logv(l,s,&f->writehistory);
413 else if (!strcmp(w,"withxrefs") ) g_logv(l,s,&f->withxrefs);
414 else if (!strcmp(w,"oneperpage") ) g_logv(l,s,&f->oneperpage);
415
416 else if (!strcmp(w,"titlefont")) g_fspc(l,nch,&f->titlefont);
417 else if (!strcmp(w,"subtitlefont")) g_fspc(l,nch,&f->subtitlefont);
418 else if (!strcmp(w,"vocalfont")) g_fspc(l,nch,&f->vocalfont);
419 else if (!strcmp(w,"partsfont")) g_fspc(l,nch,&f->partsfont);
420 else if (!strcmp(w,"tempofont")) g_fspc(l,nch,&f->tempofont);
421 else if (!strcmp(w,"textfont")) g_fspc(l,nch,&f->textfont);
422 else if (!strcmp(w,"composerfont")) g_fspc(l,nch,&f->composerfont);
423 else if (!strcmp(w,"wordsfont")) g_fspc(l,nch,&f->wordsfont);
424 else if (!strcmp(w,"gchordfont")) g_fspc(l,nch,&f->gchordfont);
425 else if (!strcmp(w,"voicefont")) g_fspc(l,nch,&f->voicefont);
426 else if (!strcmp(w,"barnumberfont")) g_fspc(l,nch,&f->barnumfont);
427 else if (!strcmp(w,"barlabelfont")) g_fspc(l,nch,&f->barlabelfont);
428 else if (!strcmp(w,"indexfont")) g_fspc(l,nch,&f->indexfont);
429
430 else if (!strcmp(w,"font")) {
431 sscanf(l,"%*s %s", fnm);
432 fnum=-1;
433 for (i=0;i<nfontnames;i++) {
434 if (!strcmp(fnm,fontnames[i])) fnum=i;
435 }
436 if (fnum<0) {
437 if (file_initialized) {
438 printf ("+++ Cannot predefine when output file open: %s\n", l);
439 exit (3);
440 }
441 tempfont.size=12.0;
442 g_fspc(l,nch,&tempfont);
443 }
444 }
445
446 else {
447 if (vb>=5) printf ("Ignore format line: %s\n", l);
448 return 2;
449 }
450 return 0;
451 }
452
453 /* ----- read_fmt_file ----- */
454 int read_fmt_file (filename,dirname,f)
455 char filename [],dirname[];
456 struct FORMAT *f;
457 {
458 FILE *fp;
459 char line[BSIZE],fname[201];
460 int i,end;
461
462 strcpy(fname,filename);
463 if ((fp = fopen (fname,"r")) == NULL) {
464 if (strlen(dirname)==0)
465 return 0;
466 else {
467 strcpy(fname,dirname);
468 strcat(fname,"/");
469 strcat(fname,filename);
470 if ((fp = fopen (fname,"r")) == NULL) return 0;
471 }
472 }
473
474 if (vb>=4) printf ("Reading format file %s:\n", fname);
475 printf ("%s .. ", fname);
476 strcpy (line, "");
477 abc2ps_getline(line, BSIZE, fp);
478 for (i=0;i<200;i++) {
479 end=interpret_format_line (line,f);
480 if (end==1) return 1;
481 strcpy (line, "");
482 if (feof(fp)) return 1;
483 if (!abc2ps_getline(line, BSIZE, fp)) return 1 ;
484 }
485 fclose (fp);
486 return 1;
487 }
488
489
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.