Compare commits

..

No commits in common. "52b508bdd2ac405ae86938de7f5ca05f647700da" and "a1237db52cf8007032e7789c291d66b6de851552" have entirely different histories.

3 changed files with 92 additions and 962 deletions

File diff suppressed because it is too large Load Diff

View File

@ -209,11 +209,6 @@ static const char * const docfont_names[] =
"FM" "FM"
}; };
#define BQ_PADDING 18.0 // Padding for block quotes
#define BQ_THICKNESS 3.0 // Thickness of block quote bar
#define CODE_PADDING 4.5 // Padding for code blocks
#define IMAGE_PPI 100.0 // Pixels per inch for images #define IMAGE_PPI 100.0 // Pixels per inch for images
#define LINE_HEIGHT 1.4 // Multiplier for line height #define LINE_HEIGHT 1.4 // Multiplier for line height
@ -675,8 +670,12 @@ format_block(docdata_t *dd, // I - Document data
{ {
// Add an orange bar to the left of block quotes... // Add an orange bar to the left of block quotes...
set_color(dd, DOCCOLOR_ORANGE); set_color(dd, DOCCOLOR_ORANGE);
pdfioContentPathRect(dd->st, left - BQ_PADDING, dd->y - (LINE_HEIGHT - 1.0) * fsize - BQ_THICKNESS, BQ_THICKNESS, lineheight + 2.0 * BQ_THICKNESS); pdfioContentSave(dd->st);
pdfioContentFill(dd->st, /*even_odd*/false); pdfioContentSetLineWidth(dd->st, 3.0);
pdfioContentPathMoveTo(dd->st, left - 6.0, dd->y - (LINE_HEIGHT - 1.0) * fsize);
pdfioContentPathLineTo(dd->st, left - 6.0, dd->y + fsize);
pdfioContentStroke(dd->st);
pdfioContentRestore(dd->st);
} }
num_frags = 0; num_frags = 0;
@ -828,23 +827,18 @@ format_code(docdata_t *dd, // I - Document data
{ {
new_page(dd); new_page(dd);
margin_top = 0.0; margin_top = (1.0 - LINE_HEIGHT) * lineheight;
} }
dd->y -= lineheight + margin_top + CODE_PADDING; dd->y -= lineheight + margin_top;
if ((dd->y - lineheight) < dd->art_box.y1) if ((dd->y - lineheight) < dd->art_box.y1)
{ {
new_page(dd); new_page(dd);
dd->y -= lineheight + CODE_PADDING; dd->y -= lineheight / LINE_HEIGHT;
} }
// Draw the top padding...
set_color(dd, DOCCOLOR_LTGRAY);
pdfioContentPathRect(dd->st, left - CODE_PADDING, dd->y + SIZE_CODEBLOCK, right - left + 2.0 * CODE_PADDING, CODE_PADDING);
pdfioContentFillAndStroke(dd->st, false);
// Start a code text block... // Start a code text block...
set_font(dd, DOCFONT_MONOSPACE, SIZE_CODEBLOCK); set_font(dd, DOCFONT_MONOSPACE, SIZE_CODEBLOCK);
pdfioContentTextBegin(dd->st); pdfioContentTextBegin(dd->st);
@ -853,7 +847,7 @@ format_code(docdata_t *dd, // I - Document data
for (code = mmdGetFirstChild(block); code; code = mmdGetNextSibling(code)) for (code = mmdGetFirstChild(block); code; code = mmdGetNextSibling(code))
{ {
set_color(dd, DOCCOLOR_LTGRAY); set_color(dd, DOCCOLOR_LTGRAY);
pdfioContentPathRect(dd->st, left - CODE_PADDING, dd->y - (LINE_HEIGHT - 1.0) * SIZE_CODEBLOCK, right - left + 2.0 * CODE_PADDING, lineheight); pdfioContentPathRect(dd->st, left - 3.0, dd->y - (LINE_HEIGHT - 1.0) * SIZE_CODEBLOCK, right - left + 6.0, lineheight);
pdfioContentFillAndStroke(dd->st, false); pdfioContentFillAndStroke(dd->st, false);
set_color(dd, DOCCOLOR_RED); set_color(dd, DOCCOLOR_RED);
@ -879,11 +873,6 @@ format_code(docdata_t *dd, // I - Document data
// End the current text block... // End the current text block...
pdfioContentTextEnd(dd->st); pdfioContentTextEnd(dd->st);
dd->y += lineheight; dd->y += lineheight;
// Draw the bottom padding...
set_color(dd, DOCCOLOR_LTGRAY);
pdfioContentPathRect(dd->st, left - CODE_PADDING, dd->y - CODE_PADDING - (LINE_HEIGHT - 1.0) * SIZE_CODEBLOCK, right - left + 2.0 * CODE_PADDING, CODE_PADDING);
pdfioContentFillAndStroke(dd->st, false);
} }
@ -929,7 +918,7 @@ format_doc(docdata_t *dd, // I - Document data
break; break;
case MMD_TYPE_BLOCK_QUOTE : case MMD_TYPE_BLOCK_QUOTE :
format_doc(dd, current, DOCFONT_ITALIC, left + BQ_PADDING, right - BQ_PADDING); format_doc(dd, current, DOCFONT_ITALIC, left + 36.0, right - 36.0);
break; break;
case MMD_TYPE_ORDERED_LIST : case MMD_TYPE_ORDERED_LIST :
@ -1009,7 +998,7 @@ format_doc(docdata_t *dd, // I - Document data
break; break;
case MMD_TYPE_CODE_BLOCK : case MMD_TYPE_CODE_BLOCK :
format_code(dd, current, left + CODE_PADDING, right - CODE_PADDING); format_code(dd, current, left + 36.0, right - 36.0);
break; break;
} }
} }
@ -1485,7 +1474,7 @@ render_line(docdata_t *dd, // I - Document data
if (!dd->st) if (!dd->st)
{ {
new_page(dd); new_page(dd);
margin_top = 0.0; margin_top = (1.0 - LINE_HEIGHT) * lineheight;
} }
dd->y -= margin_top + lineheight; dd->y -= margin_top + lineheight;
@ -1493,7 +1482,7 @@ render_line(docdata_t *dd, // I - Document data
{ {
new_page(dd); new_page(dd);
dd->y -= lineheight; dd->y -= lineheight / LINE_HEIGHT;
} }
for (i = 0, frag = frags; i < num_frags; i ++, frag ++) for (i = 0, frag = frags; i < num_frags; i ++, frag ++)

View File

@ -1,10 +1,22 @@
--- ---
title: Markdown to PDF Converter Test File title: Markdown to PDF Converter Example
... ...
Markdown to PDF Converter Example
=================================
Markdown to PDF Converter Test File The `md2pdf` example program reads a markdown file and formats the content onto
=================================== pages in a PDF file. It demonstrates how to:
- Embed base and TrueType fonts,
- Format text,
- Embed JPEG and PNG images,
- Add headers and footers, and
- Add hyperlinks.
Source Files
------------
The `md2pdf` program is organized into three source files: `md2pdf.c` which The `md2pdf` program is organized into three source files: `md2pdf.c` which
contains the code to format the markdown content and `mmd.h` and `mmd.c` (from contains the code to format the markdown content and `mmd.h` and `mmd.c` (from
@ -12,73 +24,4 @@ the [Miniature Markdown Library][MMD] project) which load the markdown content.
[MMD]: https://www.msweet.org/mmd/ [MMD]: https://www.msweet.org/mmd/
This is a test file for `md2pdf`. Here is a bullet list:
- Embed base and TrueType fonts,
- Format text with embedded JPEG and PNG images and check boxes, with support
for wrapping, alignment in table cells, leader text (as used for lists), and
variable line height,
- Add headers and footers, and
- Add hyperlinks and document platform.
And here is an ordered list:
1. Embed base and TrueType fonts,
2. Format text with embedded JPEG and PNG images and check boxes, with support
for wrapping, alignment in table cells, leader text (as used for lists), and
variable line height,
3. Add headers and footers, and
4. Add hyperlinks and document platform.
Code Blocks
-----------
```
0 1 2 3 4 5 6 7 8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
```
Images
------
PDFio book cover image:
![PDFio](../doc/pdfio-epub.png)
Tables
------
Table with leading/trailing pipes:
| Heading 1 | Heading 2 | Heading 3 |
| --------- | --------- | --------- |
| Cell 1,1 | Cell 1,2 | Cell 1,3 |
| Cell 2,1 | Cell 2,2 | Cell 2,3 |
| Cell 3,1 | Cell 3,2 | Cell 3,3 |
Table without leading/trailing pipes:
Heading 1 | Heading 2 | Heading 3
--------- | --------- | ---------
Cell 1,1 | Cell 1,2 | Cell 1,3
Cell 2,1 | Cell 2,2 | Cell 2,3
Cell 3,1 | Cell 3,2 | Cell 3,3
Table with alignment:
Left Alignment | Center Alignment | Right Alignment
:-------- | :-------: | --------:
Cell 1,1 | Cell 1,2 | 1
Cell 2,1 | Cell 2,2 | 12
Cell 3,1 | Cell 3,2 | 123
Table in block quote:
> Heading 1 | Heading 2 | Heading 3
> --------- | --------- | ---------
> Cell 1,1 | Cell 1,2 | Cell 1,3
> Cell 2,1 | Cell 2,2 | Cell 2,3
> Cell 3,1 | Cell 3,2 | Cell 3,3