engrapha-notes 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,530 @@
1
+ Metadata-Version: 2.4
2
+ Name: engrapha-notes
3
+ Version: 0.1.0
4
+ Summary: Themed ReportLab notes toolkit with markdown, HTML, PPTX, and flashcard exports
5
+ Author: Bharat Dangi
6
+ License-Expression: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Operating System :: OS Independent
9
+ Requires-Python: >=3.11
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: reportlab>=4.5.1
12
+ Requires-Dist: pygments>=2.20.0
13
+ Requires-Dist: matplotlib>=3.10
14
+ Requires-Dist: engrapha-diagrams>=0.1.0
15
+ Provides-Extra: flashcards
16
+ Requires-Dist: genanki>=0.13.1; extra == "flashcards"
17
+ Provides-Extra: split
18
+ Requires-Dist: pymupdf>=1.25.0; extra == "split"
19
+ Provides-Extra: pptx
20
+ Requires-Dist: python-pptx>=1.0.2; extra == "pptx"
21
+ Provides-Extra: svg
22
+ Requires-Dist: svglib>=1.5.1; extra == "svg"
23
+ Provides-Extra: all
24
+ Requires-Dist: genanki>=0.13.1; extra == "all"
25
+ Requires-Dist: pymupdf>=1.25.0; extra == "all"
26
+ Requires-Dist: python-pptx>=1.0.2; extra == "all"
27
+ Requires-Dist: svglib>=1.5.1; extra == "all"
28
+ Provides-Extra: dev
29
+ Requires-Dist: pytest>=9.0.3; extra == "dev"
30
+ Requires-Dist: pytest-cov>=6.0; extra == "dev"
31
+ Requires-Dist: ruff>=0.9.0; extra == "dev"
32
+ Requires-Dist: mypy>=1.11.0; extra == "dev"
33
+
34
+ > **Transparency Notice:** Built to solve my own frustration with inconsistent AI-generated notes. Heavy AI assistance was used for code generation, but the architecture, testing, and curation are mine.
35
+
36
+ ![Engrapha](../assets/Engrapha_logo.svg)
37
+ # 📝 engrapha_notes
38
+
39
+ ### Project Status: Early alpha — feedback welcome!
40
+
41
+ [![Python Version](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/)
42
+ [![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
43
+ [![Format](https://img.shields.io/badge/format-PDF%20%7C%20HTML%20%7C%20PPTX%20%7C%20Anki-orange.svg)](#)
44
+
45
+ A themed ReportLab notes template generator with a built-in markdown compiler CLI.
46
+
47
+ It provides a simple, structured Python API to build beautiful academic notes, question banks, study guides, slides, and flashcards with unified dark/light themes and native vector diagrams.
48
+
49
+ ---
50
+
51
+ ## 🚀 Features
52
+
53
+ * **Premium Cover Pages**: Screenshot-worthy covers with `linear`, `notion`, `academic_modern`, `catppuccin`, `hero`, `book`, `diagram`, `modern`, `minimal`, `corporate`, `gradient`, `standard`, `academic`, and `textbook` styles. Tags, icons, and SVG background illustrations.
54
+ * **Built-in Presets**: One-line presets (`en.cover_preset()`) for instant professional covers: `engineering`, `research-paper`, `course-notes`, `networking`, `database`, `programming`.
55
+ * **Table Column Control & Wrapping**: Custom column widths in `en.info_table` and `en.toc(style="index")`. Cells automatically wrap long words (>24 characters) using zero-width font-size spaces, avoiding clipping and missing-glyph black boxes in standard PDF fonts.
56
+ * **Mathematical Formulas**: Render LaTeX syntax inline or as centered equation blocks (`en.formula()`, `en.formula_block()`).
57
+ * **Textbook Callouts**: Semantic helper blocks including `warning()`, `important()`, `exam()`, `definition()`, `theorem()`, and `proof()`.
58
+ * **Study & Revision**: Build integrated study materials using `en.question()`, `en.qbox()`, `en.answer()`, and `en.mcq()`.
59
+ * **Flashcards & Anki Export**: Automatically compile definitions into interactive flashcards via `en.flashcard()` and export directly to Anki `.apkg` format.
60
+ * **Multi-Format Publishing**: Export a single source document to PDF, HTML (`en.build_html()`), and PowerPoint (`en.build_pptx()`).
61
+ * **Themed Layouts**: 15 preset configurations for document-wide visual themes (Notion, GitHub, Linear, Academic, Textbook, Catppuccin, Sepia, etc.).
62
+ * **ThemeBuilder**: Custom dynamic theming engine to construct bespoke document layouts.
63
+ * **Prebuilt Templates**: Optimized formatting defaults like `EngineeringNotes` (technical manuals) and `QuestionBank` (exam papers/worksheets).
64
+ * **LaTeX-like Features**: Support for footnotes, cross-reference anchors, and compiled index tables.
65
+ * **Modular Compilation**: Combine multiple sub-scripts or markdown chapters using `en.include_chapter()` and `en.include_markdown()`.
66
+ * **Document Splitting**: Automate partitioning large documents by chapter boundaries or page ranges via `en.build_split_doc()`.
67
+ * **Markdown CLI Compiler**: Compile standard Markdown files (with alerts and diagram blocks) directly to themed PDFs.
68
+
69
+ ---
70
+
71
+ ## 📦 Installation
72
+
73
+ Install the package locally from the monorepo root:
74
+
75
+ ```bash
76
+ # Core: notes, diagrams, PDF export, syntax highlighting
77
+ pip install ./packages/engrapha_notes
78
+
79
+ # All extras (pptx, split, flashcards, svg):
80
+ pip install ./packages/engrapha_notes[all]
81
+
82
+ # Or pick specific extras: [flashcards], [split], [pptx], or [svg]
83
+ pip install ./packages/engrapha_notes[pptx]
84
+ ```
85
+
86
+ ---
87
+
88
+ ## 🐍 Python API Usage
89
+
90
+ ### 1. Premium Cover Pages
91
+
92
+ Create screenshot-worthy covers with modern styles, tags, icons, and background illustrations.
93
+
94
+ ```python
95
+ import engrapha_notes as en
96
+
97
+ # Simple cover with built-in preset
98
+ en.cover_preset(
99
+ "engineering",
100
+ title="Computer Networks",
101
+ subtitle="Complete Study Guide",
102
+ author="Bharat Dangi",
103
+ date="June 2026",
104
+ )
105
+
106
+ # Or build a custom premium cover
107
+ en.cover_card(
108
+ title="Computer Networks",
109
+ subtitle="Complete Engineering Notes",
110
+ author="Bharat Dangi",
111
+ cover_theme="linear", # or style="linear"
112
+ icon="💻", # emoji or text icon
113
+ tags=[
114
+ "Networking",
115
+ "Semester IV",
116
+ "Exam Notes"
117
+ ],
118
+ logo_svg="assets/engrapha_logo_black.svg",
119
+ logo_width=120.0,
120
+ banner_svg="asset_images/network_topology.svg",
121
+ banner_width=400.0,
122
+ banner_align="center",
123
+ )
124
+
125
+ # Add a faint SVG background illustration (optional svglib for native vector)
126
+ en.cover_image(
127
+ "asset_images/network_topology.svg",
128
+ opacity=0.06,
129
+ placement="background",
130
+ )
131
+
132
+ en.br()
133
+ ```
134
+
135
+ ### Cover Gallery
136
+
137
+ **Built-in Presets** (`en.cover_preset(name)`):
138
+ | Preset | Style | Icon | Best For |
139
+ | ------ | ----- | ---- | -------- |
140
+ | `engineering` | `linear` | 💻 | SaaS docs, engineering guides |
141
+ | `research-paper` | `academic_modern` | 📐 | Research papers, peer review |
142
+ | `course-notes` | `catppuccin` | 📘 | Course notes, study guides |
143
+ | `networking` | `notion` | 🔗 | CCNA, network diagrams |
144
+ | `database` | `academic_modern` | 🗃️ | Database systems, SQL |
145
+ | `programming` | `linear` | 🐘 | Programming, software engineering |
146
+
147
+ **Cover Styles** (`en.cover_card(style=...)`):
148
+ | Style | Best For |
149
+ | ----- | -------- |
150
+ | `linear` | SaaS docs, engineering guides — huge typography, gradient corner |
151
+ | `notion` | Clean, minimalist docs — icon-heavy, generous whitespace |
152
+ | `academic_modern` | O'Reilly / Manning inspired — structured, professional |
153
+ | `catppuccin` | Developer-focused — soft pastels, rounded cards |
154
+ | `textbook` | Student notes — thick accent bar, nested metadata |
155
+ | `modern` | General purpose — rounded card with accent border |
156
+ | `minimal` | Ultra clean — thin left bar, elegant typography |
157
+ | `gradient` | Colorful — diagonal corner split with dual accents |
158
+ | `corporate` | Business — top/bottom frame layout |
159
+ | `academic` | Formal — double frame with corner ornaments |
160
+ | `standard` | Legacy boxed card |
161
+ | `hero` | Massive typography, generous whitespace |
162
+ | `book` | Classic textbook aesthetic with surface color blocks |
163
+ | `diagram` | SVG background illustration with accent text |
164
+
165
+ **Cover Illustration Parameters** (`en.cover_card(...)`):
166
+ | Parameter | Type | Default | Description |
167
+ | --------- | ---- | ------- | ----------- |
168
+ | `logo_svg` | `str \| None` | `None` | Path to an SVG logo rendered above the cover card |
169
+ | `logo_width` | `float` | `120.0` | Target width in points for the logo SVG |
170
+ | `banner_svg` | `str \| None` | `None` | Path to an SVG banner rendered between subtitle and tags |
171
+ | `banner_width` | `float` | `400.0` | Target width in points for the banner SVG |
172
+ | `banner_align` | `str` | `"left"` | Alignment for the banner: `"left"`, `"center"`, or `"right"` |
173
+
174
+ > `logo_svg` and `banner_svg` require the optional `svglib` package. Install with `pip install engrapha-notes[svg]`.
175
+
176
+ ### 2. Basic Note Structuring
177
+
178
+ ```python
179
+ import engrapha_notes as en
180
+
181
+ # Choose a theme
182
+ en.set_theme(en.DARK)
183
+
184
+ # Create a cover page
185
+ en.bookmark("Cover Page")
186
+ en.suppress_footer(page_only=True)
187
+ en.sp(40)
188
+ en.cover_card("Computer Science Notes", "Unit I: Basics", style="modern", author="Bharat Dangi")
189
+ en.br()
190
+
191
+ # IMPORTANT: Do not call en.bookmark() manually for standard sections!
192
+ # en.chap_box() and en.section() automatically register themselves in the TOC.
193
+
194
+ # Add Table of Contents
195
+ en.suppress_footer(page_only=True)
196
+ en.toc(style="standard")
197
+
198
+ # Main content
199
+ en.footer(left="Algorithms", right="Unit I", show_page_num=True)
200
+ en.part_box(
201
+ "Unit I: Basic Algorithms",
202
+ subtitle="Analysis of sorting and search methods",
203
+ topics=["Complexity Theory", "Divide & Conquer", "Pivot Selection"]
204
+ )
205
+ en.chap_box("1.1 Sorting")
206
+ en.section("Quick Sort")
207
+ en.body("Quick Sort is a divide-and-conquer sorting algorithm.")
208
+ en.tip("Average case time complexity is O(N log N).")
209
+ en.note("Worst case time complexity is O(N^2) when the pivot is poorly chosen.")
210
+
211
+ # Compile the document
212
+ en.build_doc("sorting_notes.pdf")
213
+ ```
214
+
215
+ ### 3. Code Blocks and Tables
216
+
217
+ ```python
218
+ import engrapha_notes as en
219
+
220
+ # Syntax-highlighted code block with Dracula theme
221
+ en.code_block("""
222
+ public static void main(String[] args) {
223
+ System.out.println("Hello, World!");
224
+ }
225
+ """, lang="java", theme=en.DRACULA)
226
+
227
+ # Multi-column information tables with custom column widths
228
+ en.info_table(
229
+ ["Algorithm", "Best Case", "Worst Case"],
230
+ [
231
+ ["Quick Sort", "O(N log N)", "O(N^2)"],
232
+ ["Merge Sort", "O(N log N)", "O(N log N)"],
233
+ ],
234
+ col_widths=["40%", "30%", "30%"]
235
+ )
236
+ ```
237
+
238
+ ### 4. Images (Local & Remote)
239
+
240
+ You can render images from local paths or remote URLs directly into your document. Remote URLs are automatically downloaded and cached locally in `.Engrapha_cache/images` for offline access and speed.
241
+
242
+ #### Sizing and Hyperlink Example
243
+
244
+ ```python
245
+ import engrapha_notes as en
246
+
247
+ # Local image with caption and hyperlink
248
+ en.image(
249
+ "asset_images/von_neumann.png",
250
+ caption="Fig 1: Von Neumann Architecture (Local)",
251
+ link="https://en.wikipedia.org/wiki/Von_Neumann_architecture"
252
+ )
253
+
254
+ # Remote image from a URL (will be auto-cached) with specific size
255
+ en.image(
256
+ "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png",
257
+ caption="Fig 2: Google Logo (Remote)",
258
+ width=200,
259
+ height=68,
260
+ link="https://www.google.com"
261
+ )
262
+ ```
263
+
264
+ #### Fallbacks & Warning Placeholders
265
+
266
+ The image system includes two layers of fallback protection:
267
+ 1. **User-defined Fallbacks**: You can supply one or more fallback image sources via the `fallbacks` parameter.
268
+ 2. **Default Placeholder Box**: If all sources fail, the compiler renders a styled warning placeholder box.
269
+
270
+ ```python
271
+ import engrapha_notes as en
272
+
273
+ en.image(
274
+ "https://invalid-domain.com/nonexistent_image.png",
275
+ fallbacks=[
276
+ "https://alternative-invalid.com/backup.jpg",
277
+ "asset_images/von_neumann.png"
278
+ ],
279
+ caption="Von Neumann (Loaded via Fallbacks)"
280
+ )
281
+ ```
282
+
283
+ ### 5. LaTeX-like Features & References
284
+
285
+ ```python
286
+ # Label a section
287
+ en.section("Advanced Sorting")
288
+ en.label("sec_adv_sort")
289
+
290
+ # Add a footnote and index entry
291
+ en.body(f"We can use random pivots{en.footnote('A random pivot yields O(N log N) average complexity with high probability.')}.")
292
+ en.index_entry("Randomized Quick Sort")
293
+
294
+ # Cross-reference
295
+ en.body(f"For details on advanced sorting, see the section on Page {en.ref('sec_adv_sort')}.")
296
+
297
+ # Print the generated index table
298
+ en.print_index()
299
+ ```
300
+
301
+ #### Inline math in body paragraphs
302
+
303
+ `en.body()` and `Paragraph`-based helpers automatically convert `$...$` LaTeX math to inline images:
304
+
305
+ ```python
306
+ en.body("The Master Theorem gives $T(N) = \Theta(N^{\log_b a})$ when $f(N) = \Theta(N^{\log_b a})$.")
307
+ ```
308
+
309
+ #### Custom formula color and size
310
+
311
+ `formula()`, `formula_block()`, and inline `$...$` math all accept optional `color` and `fontsize` overrides:
312
+
313
+ ```python
314
+ en.formula(r"E = mc^2", color="#fbbf24", fontsize=14.0)
315
+ en.formula_block(r"\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}", color="#38bdf8")
316
+ ```
317
+
318
+ ### 6. Advanced Styling, Custom Layouts & Overrides
319
+
320
+ ```python
321
+ import engrapha_notes as en
322
+
323
+ # Custom Print Theme with Double Page Borders
324
+ print_theme = en.LIGHT.copy_with(
325
+ name="Print Light",
326
+ body_font="Times-Roman",
327
+ heading_font="Times-Bold",
328
+ size_body=10.0,
329
+ size_question=12.0,
330
+ double_page_border=True,
331
+ page_border_margin=15.0,
332
+ page_border_gap=3.0,
333
+ plain_questions=True,
334
+ )
335
+ en.set_theme(print_theme)
336
+
337
+ # Three-Column Running Headers & Footers
338
+ en.set_global_header(
339
+ left="Indian Constitution Notes",
340
+ center="Semester – IV",
341
+ right="Session-Jan-June 2025"
342
+ )
343
+ en.set_global_footer(
344
+ left="Name: Bharat Dangi",
345
+ center="Enrollment no: 0101IT241013",
346
+ show_page_num=True
347
+ )
348
+
349
+ # Suppression of Headers/Footers on Specific Pages
350
+ en.bookmark("Cover Page")
351
+ en.suppress_header(page_only=True)
352
+ en.suppress_footer(page_only=True)
353
+ en.cover_card("Indian Constitution", "Unit 1: Basics")
354
+ en.br()
355
+
356
+ # Multi-Page Grid-Based INDEX / Table of Contents
357
+ en.toc(style="index", col_widths=["10%", "29%", "10%", "16%", "14%", "7%", "14%"])
358
+
359
+ # Component-Level Typography and Color Overrides
360
+ en.qbox(
361
+ "What is Constitutionalism?",
362
+ font_name="Times-Bold",
363
+ font_size=12,
364
+ text_color="#ff0000",
365
+ bg_color="#ffffff",
366
+ border_color="#000000"
367
+ )
368
+ en.body("Constitutionalism refers to the limitation of government by law.")
369
+ ```
370
+
371
+ ### 7. Textbook Callouts & Study Helpers
372
+
373
+ ```python
374
+ import engrapha_notes as en
375
+
376
+ en.warning("High voltage! Do not touch or operate this equipment without safety gear.")
377
+ en.important("Amdahl's Law defines the theoretical speedup in latency of execution.")
378
+ en.exam("Amdahl's law is a frequent question on computer organization exams!")
379
+ en.theorem("For any right-angled triangle, a^2 + b^2 = c^2.")
380
+ en.proof("By constructing four identical triangles around a square...")
381
+
382
+ en.question("State the difference between latency and throughput.")
383
+ en.answer("Latency is the time delay for a single task; throughput is tasks per unit time.")
384
+ en.qbox("Draw and explain the Von Neumann architecture.")
385
+
386
+ en.mcq(
387
+ "Which algorithm is quickest in the worst-case scenario?",
388
+ ["Quick Sort", "Bubble Sort", "Merge Sort", "Insertion Sort"],
389
+ correct_index=2
390
+ )
391
+
392
+ en.revision_card("Key Metrics", [
393
+ "Average Latency",
394
+ "Tail Latency (p99)",
395
+ "Throughput",
396
+ "Resource Utilization"
397
+ ])
398
+
399
+ en.flashcard("Von Neumann Bottleneck", "The throughput limitation between CPU and memory.")
400
+ ```
401
+
402
+ ### 8. Frame and Packet Formats
403
+
404
+ ```python
405
+ import engrapha_notes as en
406
+
407
+ en.frame_format(
408
+ "Ethernet Frame Structure",
409
+ [
410
+ ("PREAMBLE", "7B"),
411
+ ("SFD", "1B"),
412
+ ("DEST MAC", "6B"),
413
+ ("SRC MAC", "6B"),
414
+ ("TYPE", "2B"),
415
+ ("PAYLOAD", "46-1500B"),
416
+ ("FCS", "4B"),
417
+ ]
418
+ )
419
+
420
+ en.packet_format(
421
+ "IPv4 Header Format",
422
+ [
423
+ ("Version", 4),
424
+ ("IHL", 4),
425
+ ("DSCP", 6),
426
+ ("ECN", 2),
427
+ ("Total Length", 16),
428
+ ("Identification", 16),
429
+ ("Flags", 3),
430
+ ("Fragment Offset", 13),
431
+ ("TTL", 8),
432
+ ("Protocol", 8),
433
+ ("Header Checksum", 16),
434
+ ("Source IP Address", 32),
435
+ ("Destination IP Address", 32),
436
+ ],
437
+ bit_ruler=True
438
+ )
439
+ ```
440
+
441
+ ---
442
+
443
+ ## 💻 Markdown CLI Compiler
444
+
445
+ You can compile markdown notes files directly to PDF via the command line interface using either `Engrapha` or `pdfnotes`:
446
+
447
+ ```bash
448
+ Engrapha input.md --output output.pdf --theme catppuccin-mocha
449
+ ```
450
+
451
+ ### Options:
452
+ * `input`: Path to input markdown file.
453
+ * `-o, --output`: Custom output path (defaults to input path with `.pdf` extension).
454
+ * `-t, --theme`: Theme name (default: `dark`).
455
+ * `--title`: Custom document title.
456
+ * `--author`: Custom document author.
457
+
458
+ ### Supported Themes:
459
+ * `dark` (default)
460
+ * `light`
461
+ * `ocean-dark`
462
+ * `forest-dark`
463
+ * `sunset-dark`
464
+ * `midnight-dark`
465
+ * `ocean-light`
466
+ * `sepia`
467
+ * `catppuccin-latte`
468
+ * `catppuccin-mocha`
469
+
470
+ ### Alert Boxes Mapping:
471
+ GitHub-style alert blocks are parsed and compiled automatically:
472
+ * `> [!NOTE]` → Yellow note box (via `en.note`)
473
+ * `> [!TIP]` → Green exam-tip box (via `en.tip`)
474
+ * `> [!WARNING]` / `> [!CAUTION]` → Yellow-bordered container box (via `en.highlight`)
475
+
476
+ ### Embedded Diagrams Syntax:
477
+ You can embed diagrams inside markdown using simple text DSL blocks:
478
+
479
+ ```markdown
480
+ ```flowchart
481
+ width = 400
482
+ height = 200
483
+ caption = Fig 1: Basic Process Flow
484
+ direction = LR
485
+ scale_factor = 1.0
486
+ terminal start "START"
487
+ process step "Compute Value"
488
+ terminal end "END"
489
+
490
+ edge start step
491
+ edge step end
492
+ ```
493
+ ```
494
+
495
+ *Supported diagram block types:* `flowchart`, `sequence`, `layeredstack`, `schema`/`er`, `git`, `architecture`/`arch`, `c4`/`c4container`, `aws`/`cloud`. (Other diagram types like `classdiagram` or `statemachine` must be compiled using Python script).
496
+
497
+ ---
498
+
499
+ ## 📝 Diagram Integration & Static Type Checking
500
+
501
+ When integrating diagrams created with `engrapha_diagrams` into a notes document, always use `en.add(diagram.as_flowable())` instead of manipulating the internal `story` list directly.
502
+
503
+ ### Resolving Pyright / Pylance Warnings
504
+ Static type checkers (like Pyright or Pylance in VS Code) might flag a type mismatch warning when passing a diagram list to `add()` if the signature is not correctly handled:
505
+ > `Argument of type "list[Unknown]" cannot be assigned to parameter "x" of type "Flowable" in function "add"`
506
+
507
+ This happens because `as_flowable()` returns a `list[Flowable]` (which packages the drawing flowable along with its optional caption Paragraph flowable) rather than a single `Flowable`.
508
+
509
+ **Solution:**
510
+ The `en.add()` API accepts a union of a single flowable or a list of flowables and flattens them automatically:
511
+ ```python
512
+ def add(x: Flowable | list[Flowable] | tuple[Flowable, ...]) -> None:
513
+ ```
514
+
515
+ ---
516
+
517
+ ## 📋 Requirements & License
518
+
519
+ * **Python** >= 3.11
520
+ * **reportlab** >= 4.5.1
521
+ * **pygments** >= 2.20.0
522
+ * **Engrapha-diagrams** >= 0.1.0
523
+
524
+ Optional (extended features — install with specific extras or `[all]`):
525
+ * **python-pptx** >= 1.0.2 (via `[pptx]` extra — PowerPoint export)
526
+ * **pymupdf** >= 1.25.0 (via `[split]` extra — document splitting)
527
+ * **genanki** >= 0.13.1 (via `[flashcards]` extra — Anki `.apkg` export)
528
+ * **svglib** >= 1.5.1 (via `[svg]` extra — SVG background illustration rendering)
529
+
530
+ Licensed under the **MIT License**.
@@ -0,0 +1,13 @@
1
+ engrapha_notes/__init__.py,sha256=w8Zc7mkiPaOcTh7t3Iy3gLZzb-uE_mS1rUC8rzQVJgM,3806
2
+ engrapha_notes/cli.py,sha256=KDsXHIt00mWI1gc0U900nXfJnT1iGhQtLXVfEVU-56c,32651
3
+ engrapha_notes/document.py,sha256=AKdk04wBfkkk5MLJlB_YbgOix0oFrDAdqYVinbpiUGU,113735
4
+ engrapha_notes/helpers.py,sha256=46pjoz15z3atZxPAS0PNhB_vkUQ_Vj_WluOv_U7WFH0,147442
5
+ engrapha_notes/packet.py,sha256=QvwKcjOodQoIR6RyF7h7LFn-95e9MN2csnGVDXLI1fc,9192
6
+ engrapha_notes/palette.py,sha256=zQ07_ZHGqCsvXawwMZLM6YSUbaLTw-OzqsKIiYZdm6Q,1769
7
+ engrapha_notes/styles.py,sha256=kFCSil-Z283vcdlfbQ0MnbcILFppe2T1aXGrADihBYs,1226
8
+ engrapha_notes/theme.py,sha256=0uSwegZtuDDya32ejlM87JZUgBAoEAV1VuB6vzWUqso,9195
9
+ engrapha_notes-0.1.0.dist-info/METADATA,sha256=x_pcXeKTi-dz6RRtuieuhJ4YHsTskecFaBFAgazvMF4,19058
10
+ engrapha_notes-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
11
+ engrapha_notes-0.1.0.dist-info/entry_points.txt,sha256=yHw_xePwo1cRAjCizJ46atleKrOztbzPeQPXjMADHAY,88
12
+ engrapha_notes-0.1.0.dist-info/top_level.txt,sha256=5XiQXyPvIqxkGfGW6Oq6mzuk4ubFlKX5I5wNgU9p7Vs,15
13
+ engrapha_notes-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ engrapha = engrapha_notes.cli:main
3
+ pdfnotes = engrapha_notes.cli:main
@@ -0,0 +1 @@
1
+ engrapha_notes