From: Thomas Walker Lynch Date: Fri, 7 Aug 2026 08:47:40 +0000 (+0000) Subject: ditrieus removal X-Git-Url: https://git.reasoningtechnology.com/%27%20%20%20resolved_path%20%20%20%27?a=commitdiff_plain;h=a8806cb04ab5e40767ba806935e001ada3641541;p=RT-Style ditrieus removal --- diff --git a/developer/authored/Manuscript.copy/Tool/to_pdf.py b/developer/authored/Manuscript.copy/Tool/to_pdf.py deleted file mode 100644 index 177f7bd..0000000 --- a/developer/authored/Manuscript.copy/Tool/to_pdf.py +++ /dev/null @@ -1,167 +0,0 @@ -import os -import glob -import base64 -import re -from weasyprint import HTML - -# Find the image file -img_path = None -for search_dir in ['/mnt/data', '/tmp', '.']: - for root, dirs, files in os.walk(search_dir): - if 'money_circle.jpeg' in files: - img_path = os.path.join(root, 'money_circle.jpeg') - break - if img_path: - break - -img_b64 = "" -if img_path: - with open(img_path, "rb") as f: - img_b64 = base64.b64encode(f.read()).decode('utf-8') - -html_content = """ - - - - - On Cybersecurity and Commonsense - - - - -""" - -# String replacements (hyphens, 'may', 'just') -html_content = html_content.replace('—', '-') -html_content = re.sub(r'\bmay\b', 'can', html_content) -html_content = re.sub(r'\bMay\b', 'Can', html_content) -html_content = re.sub(r'\bjust\b', 'merely', html_content) -html_content = re.sub(r'\bJust\b', 'Merely', html_content) - -# Title block replacement -title_match = re.search(r'\s*', html_content, re.IGNORECASE | re.DOTALL) -if title_match: - title, author, date, copyright_text = title_match.groups() - if not copyright_text.startswith('©') and not copyright_text.startswith('©'): - copyright_text = f"© {copyright_text}" - - title_html = f''' -
-

{title}

-

{author}

-

{date}

- -
- ''' - html_content = html_content[:title_match.start()] + title_html + html_content[title_match.end():] - -# TOC replacement -headings = re.findall(r'(.*?)', html_content, re.IGNORECASE) -toc_html = '

Table of Contents

    ' -for idx, (level, _, id_val, text) in enumerate(headings): - if not id_val: - id_val = f"heading-{idx}" - html_content = re.sub(f'{text}', f'{text}', html_content, count=1) - toc_html += f'
  • {text}
  • ' -toc_html += '
' - -html_content = re.sub(r']*>', toc_html, html_content, flags=re.IGNORECASE) - -# Image replacement -if img_b64: - html_content = re.sub(r'src="money_circle\.jpeg"', f'src="data:image/jpeg;base64,{img_b64}" class="content-image"', html_content) - -# Custom tags -html_content = re.sub(r'', '
', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '
', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) -html_content = re.sub(r'', '', html_content, flags=re.IGNORECASE) - -def replace_rt_math(m): - content = m.group(1) - if '\n' in content: - return f'
{content}
' - return f'{content}' - -def replace_rt_code(m): - content = m.group(1) - if '\n' in content: - return f'
{content}
' - return f'{content}' - -html_content = re.sub(r'(.*?)', replace_rt_math, html_content, flags=re.IGNORECASE | re.DOTALL) -html_content = re.sub(r'(.*?)', replace_rt_code, html_content, flags=re.IGNORECASE | re.DOTALL) - -css_styles = """ - @page { - size: letter; - margin: 25mm 20mm; - background-color: #FAFAFA; - @bottom-center { - content: counter(page); - font-family: 'Georgia', serif; - font-size: 10pt; - color: #555; - } - } - body { - margin: 0; - padding: 0; - font-family: 'Georgia', serif; - font-size: 11pt; - line-height: 1.6; - color: #2c3e50; - background-color: #FAFAFA; - } - *, *::before, *::after { box-sizing: border-box; } - - h1, h2, h3, h4 { - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - color: #1A365D; - page-break-after: avoid; - } - h1 { font-size: 20pt; margin-top: 1.5em; margin-bottom: 0.5em; border-bottom: 2px solid #E2E8F0; padding-bottom: 0.2em; } - h2 { font-size: 16pt; margin-top: 1.5em; margin-bottom: 0.5em; } - p { margin-bottom: 1em; text-align: justify; } - ul, ol { margin-bottom: 1em; padding-left: 2em; } - li { margin-bottom: 0.5em; } - - .title-block { text-align: center; margin-bottom: 4em; padding: 2em 0; border-bottom: 3px solid #1A365D; } - .title-block h1 { font-size: 26pt; border: none; margin-top: 0; margin-bottom: 0.5em; color: #0F2040; } - .title-block .meta-author { font-size: 14pt; font-weight: bold; margin: 0.2em 0; } - .title-block .meta-date { font-size: 12pt; color: #555; font-style: italic; margin: 0.2em 0; } - .title-block .meta-copyright { font-size: 10pt; color: #777; margin-top: 1em; } - - .toc-block { background-color: #F0F4F8; padding: 20px; border-radius: 5px; margin-bottom: 3em; page-break-after: always; } - .toc-block h2 { margin-top: 0; border: none; } - .toc-block ul { list-style-type: none; padding-left: 0; } - .toc-h1 { font-weight: bold; margin-top: 0.8em; } - .toc-h2 { padding-left: 1.5em; font-size: 0.95em; } - .toc-block a { text-decoration: none; color: #2c3e50; } - - .rt-term { font-weight: bold; color: #2980B9; } - .rt-term-em { font-weight: bold; font-style: italic; color: #2980B9; } - .rt-neologism { font-variant: small-caps; font-weight: bold; color: #C0392B; } - .rt-code-inline { font-family: 'Courier New', Courier, monospace; background-color: #EAECEE; padding: 2px 4px; border-radius: 3px; font-size: 0.9em; } - .rt-code-block { font-family: 'Courier New', Courier, monospace; background-color: #F4F6F7; padding: 15px; border-left: 4px solid #7F8C8D; border-radius: 3px; font-size: 0.9em; overflow-x: auto; white-space: pre-wrap; } - - .math { font-family: 'Times New Roman', serif; font-style: italic; font-weight: bold; color: #2C3E50; } - .math-block { text-align: center; margin: 1.5em 0; font-size: 1.2em; background-color: #F9EBEA; padding: 10px; border-radius: 5px; } - .math-inline { font-size: 1.05em; } - - table { width: 100%; border-collapse: collapse; margin: 2em 0; } - th, td { padding: 10px; text-align: left; vertical-align: top; } - th { background-color: #1A365D; color: white; font-weight: bold; } - tr { border-bottom: 1px solid #ddd; } - hr { border: 0; border-top: 1px solid #eee; } - - .content-image { display: block; max-width: 90%; margin: 2em auto; border: 1px solid #ccc; box-shadow: 0 4px 8px rgba(0,0,0,0.1); } -""" - -final_html = f"{html_content}" -HTML(string=final_html).write_pdf("White_Paper_Cybersecurity_Legislation.pdf") -print("Success") diff --git a/developer/authored/Manuscript.copy/Tool/to_pdf2.py b/developer/authored/Manuscript.copy/Tool/to_pdf2.py deleted file mode 100644 index a493d27..0000000 --- a/developer/authored/Manuscript.copy/Tool/to_pdf2.py +++ /dev/null @@ -1,479 +0,0 @@ -import re -import os -import glob -from weasyprint import HTML - -def process_rt_html(html_str, out_file): - # Fix escaped dollar signs - html_str = html_str.replace('\\$', '$') - - # Remove hardcoded page breaks that cause blank pages - html_str = re.sub(r']*["\']>\s*', '', html_str, flags=re.IGNORECASE) - - css = """ - - """ - - # Inject CSS - html_str = html_str.replace("", css + "") - - # Process Title Block - title_match = re.search(r']+)>(.*?)', html_str, re.DOTALL | re.IGNORECASE) - if title_match: - attrs = title_match.group(1) - title = re.search(r'title="(.*?)"', attrs).group(1) if 'title="' in attrs else 'Document' - author = re.search(r'author="(.*?)"', attrs).group(1) if 'author="' in attrs else '' - date = re.search(r'date="(.*?)"', attrs).group(1) if 'date="' in attrs else '' - copyright_txt = re.search(r'copyright="(.*?)"', attrs).group(1) if 'copyright="' in attrs else '' - - title_block = f''' -
-

{title}

-
{author} | {date}
- -
- ''' - html_str = html_str[:title_match.start()] + title_block + html_str[title_match.end():] - - # Process TOC - toc_match = re.search(r'', html_str, re.IGNORECASE) - if toc_match: - level = toc_match.group(1) - headings = [] - if '-' in level: - headings = re.findall(r'(.*?)', html_str, re.IGNORECASE) - else: - headings = re.findall(rf'(.*?)', html_str, re.IGNORECASE) - - toc_html = '
Table of Contents
    ' - for lvl, text in headings: - # exclude COVER SHEET from TOC - if "COVER SHEET" in text: - continue - toc_html += f'
  • {text}
  • ' - toc_html += '
' - - html_str = html_str[:toc_match.start()] + toc_html + html_str[toc_match.end():] - - # Term Replacement (First occurrence) - seen_terms = set() - def term_replace(match): - text = match.group(1) - l_text = text.lower() - if l_text not in seen_terms: - seen_terms.add(l_text) - return f'{text}' - else: - return f'{text}' - - html_str = re.sub(r'(.*?)', term_replace, html_str) - - # Neologism Replacement (First occurrence) - seen_neos = set() - def neo_replace(match): - text = match.group(1) - l_text = text.lower() - if l_text not in seen_neos: - seen_neos.add(l_text) - return f'{text}' - else: - return f'{text}' - - html_str = re.sub(r'(.*?)', neo_replace, html_str) - - HTML(string=html_str).write_pdf(out_file) - -# Locate the uploaded file -uploaded_files = glob.glob('/mnt/data/user_uploads/*abstract.html') -if not uploaded_files: - uploaded_files = glob.glob('/mnt/data/uploads/*abstract.html') -if not uploaded_files: - # Look for it anywhere under /mnt/data - for root, dirs, files in os.walk('/mnt/data'): - for file in files: - if file == 'abstract.html': - uploaded_files.append(os.path.join(root, file)) - -if uploaded_files: - filepath = uploaded_files[0] - with open(filepath, 'r', encoding='utf-8') as f: - html_content = f.read() - process_rt_html(html_content, 'abstract.pdf') - print("PDF successfully generated.") -else: - print("Could not find abstract.html in the data directory.") - -Code output -Traceback (most recent call last): - File "", line 1, in - import bs4 -ModuleNotFoundError: No module named 'bs4' - -Python -import re -import os -import glob -from weasyprint import HTML - -def process_rt_html(html_str, out_file): - html_str = html_str.replace('\\$', '$') - html_str = re.sub(r']*["\']>\s*', '', html_str, flags=re.IGNORECASE) - - css = """ - - """ - - html_str = html_str.replace("", css + "") - - title_match = re.search(r']+)>(.*?)', html_str, re.DOTALL | re.IGNORECASE) - if title_match: - attrs = title_match.group(1) - title = re.search(r'title="(.*?)"', attrs).group(1) if 'title="' in attrs else 'Document' - author = re.search(r'author="(.*?)"', attrs).group(1) if 'author="' in attrs else '' - date = re.search(r'date="(.*?)"', attrs).group(1) if 'date="' in attrs else '' - copyright_txt = re.search(r'copyright="(.*?)"', attrs).group(1) if 'copyright="' in attrs else '' - - title_block = f''' -
-

{title}

-
{author} | {date}
- -
- ''' - html_str = html_str[:title_match.start()] + title_block + html_str[title_match.end():] - - toc_match = re.search(r'', html_str, re.IGNORECASE) - if toc_match: - level = toc_match.group(1) - headings = [] - if '-' in level: - headings = re.findall(r'(.*?)', html_str, re.IGNORECASE) - else: - headings = re.findall(rf'(.*?)', html_str, re.IGNORECASE) - - toc_html = '
Table of Contents
    ' - for lvl, text in headings: - if "COVER SHEET" in text: - continue - toc_html += f'
  • {text}
  • ' - toc_html += '
' - - # Add page break AFTER the TOC instead of before it - toc_html += '
' - - html_str = html_str[:toc_match.start()] + toc_html + html_str[toc_match.end():] - - seen_terms = set() - def term_replace(match): - text = match.group(1) - l_text = text.lower() - if l_text not in seen_terms: - seen_terms.add(l_text) - return f'{text}' - else: - return f'{text}' - - html_str = re.sub(r'(.*?)', term_replace, html_str) - - seen_neos = set() - def neo_replace(match): - text = match.group(1) - l_text = text.lower() - if l_text not in seen_neos: - seen_neos.add(l_text) - return f'{text}' - else: - return f'{text}' - - html_str = re.sub(r'(.*?)', neo_replace, html_str) - - HTML(string=html_str).write_pdf(out_file) - -uploaded_files = glob.glob('/mnt/data/user_uploads/*abstract.html') -if not uploaded_files: - uploaded_files = glob.glob('/mnt/data/uploads/*abstract.html') -if not uploaded_files: - for root, dirs, files in os.walk('/mnt/data'): - for file in files: - if file == 'abstract.html': - uploaded_files.append(os.path.join(root, file)) - -if uploaded_files: - filepath = uploaded_files[0] - with open(filepath, 'r', encoding='utf-8') as f: - html_content = f.read() - - # One last aggressive check to ensure we absolutely strip ANY style="page-break..." strings - # in case the earlier regex missed a specific formatting - html_content = re.sub(r'style="[^"]*page-break-after:\s*always;?[^"]*"', '', html_content, flags=re.IGNORECASE) - - process_rt_html(html_content, 'abstract_no_gap.pdf') - print("PDF successfully generated.") -else: - print("Could not find abstract.html in the data directory.") diff --git a/developer/document/debug_vars.txt b/developer/document/debug_vars.txt index 5a3bab6..4e6a6a1 100644 --- a/developer/document/debug_vars.txt +++ b/developer/document/debug_vars.txt @@ -10,3 +10,45 @@ Pass 2 — structure. Sections, counters, TOC, and whatever the book needs that Pass 3 — render and fix. The real test bed. Expect layout faults we haven't seen, since a book exercises depths and lengths the manuals don't. Pass 4 — copy editing, a chapter at a time. Slowest, most judgement-dependent, and best done once everything else is stable. + + +--- + +No update tool + +-> we will manually update too complex for a script + +README.md is stale — it advertises , , in hyphen form. RT-constraint doesn't exist in the engine under either spelling. + +-> remind me later we will get back to this. + + + is documented but unimplemented. The user manual lists it as a manuscript type alongside article and memo; nothing in the engine references it. For a 4-volume work this is probably the single most consequential gap. + +-> ignore + +User manual omissions: RT·term-em and RT·neologism-em (both live in term.js, and the book uses term-em 5 times), RT·noop, RT·e, RT·label, RT·tuple/RT·tuple-meta, RT·vector/RT·vector-meta, and the splitable attribute. + +-> I am surprised they are not in there, apparently they got dropped, remind me later we will get back to this. + +to_pdf.py is dead against current documents — it regex-rewrites , , etc. in hyphen form, which matches nothing in a v4/v5 file. to_pdf2.py has the same problem on 8 lines. Two PDF tools with unclear precedence is worth resolving. + +-> it has been removed from the project. + + +RT-code-format.html has a broken tag: RT·code>snake_case is missing its opening <. Renders as literal text. + +term.js violates its own migration note. The design manual's migration notes say to drop dual-spelling selectors in favor of the canonical form; term.js uses the all-lowercase form exclusively ('rt·term, rt·term-em, …'), as does footnote.js. Worth a consistency sweep. + +todo.txt triage. Still open and relevant to the book: paginate's ad-hoc page numbering vs. the counters; unifying footnote/endnote under Note with path keys; the Count/Note capitalization and space-vs-dot key path convention; justified text inserting spaces into inline RT blocks; table types. The theme-name/manifest mismatch item at the top appears already fixed — all three themes' meta.name match their manifest keys and filenames. Close it. + +footnote.js is a validation stub (processing lives in the paginator). Fine, but the user manual presents it as a peer of endnote. + +Q +The title. The file is TM-2026.html, titled "Computational Naturalism", and there's a chapter called "Or, does it go the other way? Computational Naturalism". You described this as volume 1 of Tom's Turing Complete Computer Architecture. Is "Computational Naturalism" the volume-1 title, a working title, or a leftover from a reorganization? + +RT·chapter — implement or convert? Given is also unimplemented and you have three more volumes coming, I'd lean toward building RT·book and RT·chapter properly in the engine rather than flattening chapters into depth-0 sections. That's more work now and much less later. But it's your call, and the section route gets a readable book faster. + +Lists and blockquotes. 29 raw ones in the book. Add RT elements, or accept raw HTML as legitimate for these? + +Order of operations. Do you want me to start with the engine gaps (so the migration has a target), or with a mechanical first pass on the book (theme-selector, copyright, the comment, the
 blocks) to get it rendering before we touch structure?