lorid

convert chordpro to pdf
git clone git://git.relim.de/lorid.git
Log | Files | Refs | README | LICENSE

commit 1e03dbee8b6bdea6018d26c78f3920874ff9e2ac
parent 017d02ea42569d580c16d427f157a5e2909a7864
Author: nibo <nibo@relim.de>
Date:   Sat,  7 Dec 2024 17:51:04 +0100

Improve chord diagram parsing and rendering

Diffstat:
Mchord_diagram.c | 6+++---
Mchordpro.c | 31++++++++++++++++++++-----------
Mout_pdf.c | 2+-
3 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/chord_diagram.c b/chord_diagram.c @@ -451,9 +451,9 @@ string_diagram_draw( base_position[4] = 0; sprintf((char *)&base_position, "%d", diagram->base_fret); if (diagram->base_fret > 9) { - base_pos_x = x - field_width - field_width / 2; + base_pos_x = x - field_width - field_width; } else { - base_pos_x = x - field_width; + base_pos_x = x - field_width - field_width / 3; } if (!pdfioContentSetTextFont(stream, "chord-diagram-regular-font", field_width*1.15)) { fprintf(stderr, "pdfioContentSetTextFont failed.\n"); @@ -505,7 +505,7 @@ string_diagram_draw( fprintf(stderr, "pdfioContentSetTextFont failed.\n"); return false; } - if (!text_show(stream, diagram->name, x+centered_x, y_above_diagram + 5.0)) { + if (!text_show(stream, diagram->name, x+centered_x, y_above_diagram + 7.0)) { fprintf(stderr, "text_show failed.\n"); return false; } diff --git a/chordpro.c b/chordpro.c @@ -2666,9 +2666,11 @@ cho_chord_diagram_parse(const char *str) char name[20]; char option[10]; char key[3]; + char base_fret[3]; int n = 0; int o = 0; int k = 0; + int b = 0; int f = 0; int i; int fret_count = 0; @@ -2749,24 +2751,31 @@ cho_chord_diagram_parse(const char *str) break; case CDS_BASE_FRET: if (is_whitespace(c)) { - if (diagram->u.sd->base_fret == -2) { + if (b == 0) { break; } + base_fret[b] = 0; + l = str_to_number(base_fret); + if (l == -1) { + LOG_DEBUG("str_to_number failed."); + cho_log(LOG_ERR, "Invalid base-fret value '%s' in chord diagram.", base_fret); + return NULL; + } + if (l == 0) { + cho_log(LOG_ERR, "Invalid base-fret value '%c' in chord diagram.", c); + return NULL; + } + diagram->u.sd->base_fret = (int8_t)l; state = CDS_OPTION_NAME; break; } - number = char_to_positive_int(c); - if (number == -1) { - LOG_DEBUG("char_to_positive_int failed."); - cho_log(LOG_ERR, "Invalid base-fret value '%c' in chord diagram.", c); - return NULL; - } - if (number == 0) { - cho_log(LOG_ERR, "Invalid base-fret value '%c' in chord diagram.", c); + if (b > 1) { + cho_log(LOG_ERR, "base-fret value is too long."); + printf("c: %c\n", c); return NULL; } - diagram->u.sd->base_fret = number; - state = CDS_OPTION_NAME; + base_fret[b] = c; + b++; break; case CDS_FRETS: number = -2; diff --git a/out_pdf.c b/out_pdf.c @@ -1847,7 +1847,7 @@ pdf_content_render(struct PDFContent *content, pdfio_file_t *file) double x = MARGIN_HORIZONTAL; double y = 40.0; double size = 50.0; - double padding = 20.0; + double padding = 30.0; struct ChordDiagram **d = pages[p]->diagrams; /* TODO: Handle line break when too long */ while (*d) {