create ppt of same templet and formate ..with my given remedies ..follow similar formate as attechment..remedies are ACONITE, BRYONIA, EUPATORIUM, FERRUM PHOS, CHAMOMILLA, GELSEMIUM, BELLADONA, BAPTISIA, NUX VOMICA
cd /tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/ && python3 -c " from pptx import Presentation from pptx.util import Emu, Pt from pptx.dml.color import RGBColor import json prs = Presentation('Fever therapeutics.pptx') print(f'Slide size: {prs.slide_width.inches:.2f} x {prs.slide_height.inches:.2f} inches') print(f'Total slides: {len(prs.slides)}') print() for i, slide in enumerate(prs.slides, 1): print(f'=== SLIDE {i} (layout: {slide.slide_layout.name}) ===') for shape in slide.shapes: left = round(Emu(shape.left).inches, 3) if shape.left is not None else None top = round(Emu(shape.top).inches, 3) if shape.top is not None else None w = round(Emu(shape.width).inches, 3) if shape.width is not None else None h = round(Emu(shape.height).inches, 3) if shape.height is not None else None print(f' Shape: {shape.name} | Type: {shape.shape_type} | pos=({left},{top}) size=({w},{h})') if shape.has_text_frame: for pi, para in enumerate(shape.text_frame.paragraphs): for run in para.runs: color = None if run.font.color and run.font.color.type: try: color = str(run.font.color.rgb) except: pass bold = run.font.bold size = run.font.size.pt if run.font.size else None print(f' Para {pi}: [{run.text}] bold={bold} size={size} color={color}') print() "
cd /tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/ && python3 -c " from pptx import Presentation from pptx.util import Emu, Pt from pptx.dml.color import RGBColor from pptx.oxml.ns import qn import lxml.etree as etree prs = Presentation('Fever therapeutics.pptx') # Check slide 1 background and title formatting slide = prs.slides[0] bg = slide.background fill = bg.fill print('Slide 1 background fill type:', fill.type) # Check title shape formatting for shape in slide.shapes: if shape.has_text_frame: tf = shape.text_frame print(f'Shape: {shape.name}') for para in tf.paragraphs: pPr = para._p.find(qn('a:pPr')) if pPr is not None: print(' Para align:', pPr.get('algn')) for run in para.runs: print(f' Run: [{run.text[:40]}]') print(f' bold={run.font.bold}, italic={run.font.italic}, size={run.font.size}') try: print(f' color={run.font.color.rgb}') except: print(f' color=theme/inherited') print() "
mkdir -p /tmp/workspace/fever-remedies/ && python /tmp/skills/pptx/scripts/office/unpack.py "/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/Fever therapeutics.pptx" /tmp/workspace/fever-remedies/unpacked/ && echo "Unpacked OK" && ls /tmp/workspace/fever-remedies/unpacked/ppt/slides/
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.oxml.ns import qn from copy import deepcopy import lxml.etree as etree import copy # Load template prs = Presentation('/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/Fever therapeutics.pptx') # Remedy data - all 9 remedies with their fever indications remedies = [ { "name": "ACONITE", "content": [ ("TYPE: ", "Sudden inflammatory fever, Synocha, Croup, Scarlet fever"), ("STAGES: ", "Chill and heat appear simultaneously"), ("Chill: ", "With great thirst, cannot bear being covered, better in cold air"), ("Heat: ", "Dry burning heat, skin hot and dry, cannot uncover"), ("Sweat: ", "Hot sweat – profuse, sour, relieves complaints"), ("THIRST: ", "Intense, unquenchable thirst for cold water during all stages"), ("", "Sudden onset after exposure to cold dry wind"), ("", "Great restlessness, anxiety and fear of death"), ("", "Pulse: Full, bounding, hard and rapid"), ("", "Skin: Dry, hot, burning – no perspiration initially"), ] }, { "name": "BRYONIA", "content": [ ("TYPE: ", "Continued fever, Typhoid, Pneumonia, Rheumatic fever"), ("STAGES: ", ""), ("Chill: ", "With external chilliness, very sensitive to draft of air"), ("Heat: ", "With internal burning and dryness, hot to touch"), ("Sweat: ", "Sour smelling, profuse, with relief of symptoms"), ("THIRST: ", "Great thirst for large quantities of cold water at long intervals"), ("", "Aggravation from least motion – lies perfectly still"), ("", "Dull, heavy, pressing frontal headache during fever"), ("", "Constipation, dry mouth, lips, and throat"), ("", "Desires rest and quiet; irritable when disturbed"), ] }, { "name": "EUPATORIUM PERFOLIATUM", "content": [ ("TYPE: ", "Intermittent fever, Influenza, Dengue-like fever"), ("STAGES: ", ""), ("Chill: ", "7-9 AM; preceded by thirst; thirst persists during chill"), ("Heat: ", "With great soreness and aching of bones (as if bones are broken)"), ("Sweat: ", "Relieves all symptoms except headache"), ("THIRST: ", "Great thirst before and during chill stage"), ("", "Aching pains in bones, joints and muscles – as if broken"), ("", "Vomiting of bile before and at close of chill"), ("", "Great prostration and weakness during fever"), ("", "Eyeballs sore and aching"), ] }, { "name": "FERRUM PHOSPHORICUM", "content": [ ("TYPE: ", "First stage of all inflammatory and catarrhal fevers"), ("STAGES: ", ""), ("Chill: ", "With short shiverings, pale face, disposition to yawn"), ("Heat: ", "Moderate fever, flushed red face, skin hot and moist"), ("Sweat: ", "Night sweats, debilitating, with weakness"), ("THIRST: ", "Present but moderate – thirst for cold water"), ("", "Pulse: Full, soft, compressible – not hard like Aconite"), ("", "No anxiety or great fear unlike Aconite"), ("", "Gradual onset, not as sudden as Aconite"), ("", "First stage: Before exudation or pus formation"), ] }, { "name": "CHAMOMILLA", "content": [ ("TYPE: ", "Fever in children, Dentition fever, Febrile convulsions"), ("STAGES: ", ""), ("Chill: ", "With heat of face, hot and cold alternate; one cheek red, other pale"), ("Heat: ", "Burning hot, skin dry, red face, sweaty scalp and head"), ("Sweat: ", "Hot sweat on face and head only while body is cold"), ("THIRST: ", "Thirsty, wants cold water during heat"), ("", "One cheek red and hot, other pale and cold (characteristic)"), ("", "Extreme irritability, peevishness, cannot be pacified"), ("", "Child wants to be carried – better when carried"), ("", "Oversensitivity to pain – cries and moans with fever"), ] }, { "name": "GELSEMIUM", "content": [ ("TYPE: ", "Bilious remittent fever, Influenza, Catarrhal fever"), ("STAGES: ", ""), ("Chill: ", "Runs up and down the spine, external heat worse during chill"), ("Heat: ", "Wants to be held still – general prostration; drowsy"), ("Sweat: ", "Profuse, relieving; cold sweat with anxiety"), ("THIRST: ", "Thirstless – absence of thirst is characteristic"), ("", "Great muscular prostration, heaviness of eyelids, limbs"), ("", "Dusky flushed face, slowness of thought and movement"), ("", "Dizziness, drowsiness, dullness and trembling (4 Ds)"), ("", "Slow gradual onset; anxiety with fever, wants to be held"), ] }, { "name": "BELLADONNA", "content": [ ("TYPE: ", "Active, violent inflammatory fever, Scarlatina, Cerebral fever"), ("STAGES: ", ""), ("Chill: ", "Alternates with heat; chills start from extremities"), ("Heat: ", "Intense, violent, sudden dry burning heat; radiates from body"), ("Sweat: ", "On covered parts only; offensive, sour smelling"), ("THIRST: ", "Thirstless – although mouth and throat are dry"), ("", "Face red, flushed, hot and dry; carotids pulsate"), ("", "Pupils dilated; eyes bright, glistening"), ("", "Violent throbbing headache with fever – worse jar/light"), ("", "Delirium: vivid, active – tries to escape, sees monsters"), ] }, { "name": "BAPTISIA", "content": [ ("TYPE: ", "Typhoid fever, Septic fever, Low grade continued fever"), ("STAGES: ", ""), ("Chill: ", "Commences in back; aching all over the body"), ("Heat: ", "With foul, putrid discharges; dusky, besotted face"), ("Sweat: ", "Offensive, profuse, without relief"), ("THIRST: ", "Thirst present, wants water frequently in small quantities"), ("", "Besotted (drugged look), dusky, dark red face"), ("", "Confusion of mind – thinks parts of body are scattered"), ("", "All discharges horribly offensive (breath, stool, urine)"), ("", "Falls asleep while answering – great prostration"), ] }, { "name": "NUX VOMICA", "content": [ ("TYPE: ", "Intermittent fever, Gastric fever, Catarrhal fever"), ("STAGES: ", ""), ("Chill: ", "Cannot get warm even with hot drinks; must be covered even during heat"), ("Heat: ", "During heat must be covered; face red, heat not > by uncovering"), ("Sweat: ", "Sour, hot, partial – one-sided, with chilliness on uncovering"), ("THIRST: ", "During heat stage; wants hot drinks; no thirst during chill"), ("", "Great chilliness – sensitive to cold in all stages"), ("", "Gastric symptoms – nausea, vomiting, retching during fever"), ("", "Irritable, oversensitive, quarrelsome during fever"), ("", "Fever from overindulgence in food, alcohol, stimulants"), ] }, ] # We'll use slide 1 as the base template (standard layout) # Duplicate it 9 times and edit content # First, examine slide1 XML to understand structure slide1 = prs.slides[0] def add_slide_copy(prs, source_slide): """Duplicate a slide and add it to the presentation""" template = source_slide blank_layout = prs.slide_layouts[0] from pptx.oxml.ns import nsmap from lxml import etree # Get the slide XML tree slide_xml = copy.deepcopy(template._element) # Add a new slide new_slide = prs.slides.add_slide(prs.slide_layouts[5]) # blank layout # Replace its XML with a deep copy of template new_slide._element.getparent().replace(new_slide._element, slide_xml) # Fix relationships - copy from source rId_map = {} for rel in template.part.rels.values(): if rel.reltype != 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout': try: new_slide.part.rels[rel.rId] except KeyError: pass return new_slide # Actually, let's use a simpler approach: # Use python-pptx to build from template, duplicating slides properly # by manipulating the presentation XML directly from pptx.opc.constants import RELATIONSHIP_TYPE as RT from pptx.oxml import parse_xml from pptx.oxml.ns import nsmap from lxml import etree import copy def duplicate_slide(prs, slide_index): """Properly duplicate a slide in python-pptx""" template = prs.slides[slide_index] blank_layout = prs.slide_layouts[0] copied_slide = prs.slides.add_slide(blank_layout) # Copy element copied_slide.shapes._spTree.clear() for shp in template.shapes: copied_slide.shapes._spTree.append(copy.deepcopy(shp._element)) # Copy background if set copied_slide.background._element[:] = [copy.deepcopy(e) for e in template.background._element] return copied_slide # Build new presentation from the template # Start fresh from template file prs2 = Presentation('/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/Fever therapeutics.pptx') # We'll delete all existing slides and create 9 new ones based on slide 1 layout # First let's get the source slide XML source_slide = prs2.slides[0] # Create 9 duplicate slides new_slides = [] for i in range(9): ns = duplicate_slide(prs2, 0) new_slides.append(ns) print(f"Total slides now: {len(prs2.slides)}") print(f"New slides created: {len(new_slides)}") # Now delete the original 6 slides (they're at indices 0-5) # We can't easily delete with python-pptx, so let's just edit the 6 existing + use the 9 new ones # Actually let's remove original slides by manipulating presentation XML from pptx.oxml.ns import qn prs_xml = prs2.presentation sldIdLst = prs_xml.find(qn('p:sldIdLst')) all_sld_ids = sldIdLst.findall(qn('p:sldId')) print(f"sldId entries: {len(all_sld_ids)}") # Remove first 6 (original slides) for sldId in all_sld_ids[:6]: sldIdLst.remove(sldId) print(f"After removal, sldId entries: {len(sldIdLst.findall(qn('p:sldId')))}") print(f"Total slides obj: {len(prs2.slides)}") prs2.save('/tmp/workspace/fever-remedies/test_structure.pptx') print("Saved structure test") PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.oxml.ns import qn from lxml import etree import copy # Remedy data remedies = [ { "name": "ACONITE", "content": [ ("TYPE: ", "Sudden inflammatory fever, Synocha, Croup, Scarlet fever"), ("STAGES: ", ""), ("Chill: ", "Sudden after exposure to cold dry wind; great anxiety"), ("Heat: ", "Dry burning heat, skin hot and dry, cannot uncover"), ("Sweat: ", "Hot profuse sweat relieves all complaints"), ("THIRST: ", "Intense, unquenchable thirst for cold water in all stages"), ("", "Sudden onset after cold dry wind exposure"), ("", "Great restlessness, anxiety and fear of death"), ("", "Pulse: Full, bounding, hard and rapid"), ("", "No perspiration in early stage; skin dry, burning, hot"), ] }, { "name": "BRYONIA", "content": [ ("TYPE: ", "Continued fever, Typhoid, Pneumonia, Rheumatic fever"), ("STAGES: ", ""), ("Chill: ", "External chilliness, very sensitive to draft of air"), ("Heat: ", "Internal burning, dry; hot to touch"), ("Sweat: ", "Sour smelling, profuse, with relief of symptoms"), ("THIRST: ", "Great thirst for large quantities of cold water at long intervals"), ("", "Aggravation from least motion – lies perfectly still"), ("", "Heavy, pressing frontal headache during fever"), ("", "Constipation, dry mouth, lips, and throat"), ("", "Irritable when disturbed; wants rest and quiet"), ] }, { "name": "EUPATORIUM PERFOLIATUM", "content": [ ("TYPE: ", "Intermittent fever, Influenza, Dengue-like fever"), ("STAGES: ", ""), ("Chill: ", "7-9 AM; preceded and accompanied by intense thirst"), ("Heat: ", "Great soreness and aching of bones as if broken"), ("Sweat: ", "Relieves all symptoms except headache"), ("THIRST: ", "Great thirst before and during chill stage (characteristic)"), ("", "Aching pains in bones, joints, muscles – bones feel broken"), ("", "Vomiting of bile before and at close of chill"), ("", "Great prostration and weakness during fever"), ("", "Eyeballs sore and aching on movement"), ] }, { "name": "FERRUM PHOSPHORICUM", "content": [ ("TYPE: ", "First stage of all inflammatory and catarrhal fevers"), ("STAGES: ", ""), ("Chill: ", "Short shiverings, pale face, disposition to yawn"), ("Heat: ", "Moderate fever, flushed red face, hot and moist skin"), ("Sweat: ", "Night sweats, debilitating, with weakness"), ("THIRST: ", "Present but moderate – thirst for cold water"), ("", "Pulse: Full, soft, compressible (not hard as Aconite)"), ("", "No great anxiety or fear unlike Aconite"), ("", "Gradual onset, not as sudden as Aconite"), ("", "Indicated before exudation or pus formation occurs"), ] }, { "name": "CHAMOMILLA", "content": [ ("TYPE: ", "Fever in children, Dentition fever, Febrile convulsions"), ("STAGES: ", ""), ("Chill: ", "Heat of face; one cheek red, other pale and cold"), ("Heat: ", "Burning hot, dry skin, red face, sweaty scalp and head"), ("Sweat: ", "Hot sweat on face and head only; body cold"), ("THIRST: ", "Thirsty, wants cold water during heat stage"), ("", "One cheek red/hot, other pale/cold (pathognomonic)"), ("", "Extreme irritability and peevishness – cannot be pacified"), ("", "Child demands to be carried – symptoms better when carried"), ("", "Oversensitivity to pain; cries and moans continuously"), ] }, { "name": "GELSEMIUM", "content": [ ("TYPE: ", "Bilious remittent fever, Influenza, Catarrhal fever"), ("STAGES: ", ""), ("Chill: ", "Runs up and down the spine; shivering despite external heat"), ("Heat: ", "General prostration; drowsy, heavy, wants to lie still"), ("Sweat: ", "Profuse, relieving; cold sweat with anxiety"), ("THIRST: ", "Thirstless – absence of thirst is characteristic"), ("", "Great muscular prostration, heaviness of eyelids and limbs"), ("", "Dusky flushed face, slow thought and movement"), ("", "Dizziness, Drowsiness, Dullness and Trembling (4 Ds)"), ("", "Slow gradual onset; anxiety during fever, wants to be held"), ] }, { "name": "BELLADONNA", "content": [ ("TYPE: ", "Violent inflammatory fever, Scarlatina, Cerebral fever"), ("STAGES: ", ""), ("Chill: ", "Alternates with heat; chills start from extremities"), ("Heat: ", "Intense, sudden, dry burning; radiates from body"), ("Sweat: ", "On covered parts only; offensive, sour smelling"), ("THIRST: ", "Thirstless – although mouth and throat are very dry"), ("", "Face red, flushed, hot; carotids pulsate strongly"), ("", "Pupils dilated; eyes bright, glistening and glassy"), ("", "Violent throbbing headache – worse from jar and light"), ("", "Delirium: vivid and active – sees monsters, tries to escape"), ] }, { "name": "BAPTISIA", "content": [ ("TYPE: ", "Typhoid fever, Septic fever, Low grade continued fever"), ("STAGES: ", ""), ("Chill: ", "Commences in back; aching all over the body"), ("Heat: ", "With foul putrid discharges; dusky, besotted face"), ("Sweat: ", "Offensive, profuse, without relief of symptoms"), ("THIRST: ", "Thirst present – wants water frequently in small quantities"), ("", "Besotted (drugged look), dusky, dark red face"), ("", "Confusion of mind – thinks parts of body are scattered"), ("", "All discharges horribly offensive (breath, stool, urine)"), ("", "Falls asleep while answering – great prostration and weakness"), ] }, { "name": "NUX VOMICA", "content": [ ("TYPE: ", "Intermittent fever, Gastric fever, Catarrhal fever"), ("STAGES: ", ""), ("Chill: ", "Cannot get warm; must be covered even with hot drinks"), ("Heat: ", "Must remain covered; face red; heat not > by uncovering"), ("Sweat: ", "Sour, hot, partial – one-sided; chilliness on uncovering"), ("THIRST: ", "During heat only; wants hot drinks; none during chill"), ("", "Great chilliness – oversensitive to cold in all stages"), ("", "Gastric symptoms – nausea, vomiting, retching during fever"), ("", "Irritable, oversensitive, quarrelsome during fever"), ("", "Fever from overindulgence in food, alcohol, stimulants"), ] }, ] def set_slide_content(slide, title_text, content_items): """Set title and bullet content on a slide matching template format""" for shape in slide.shapes: if shape.has_text_frame: tf = shape.text_frame # Detect title vs content by placeholder type or position if 'Title' in shape.name: # Clear and set title tf.clear() para = tf.paragraphs[0] run = para.add_run() run.text = title_text run.font.bold = True else: # Content placeholder - add bullet items tf.clear() for idx, (bold_part, normal_part) in enumerate(content_items): if idx == 0: para = tf.paragraphs[0] else: para = tf.add_paragraph() if bold_part: run1 = para.add_run() run1.text = bold_part run1.font.bold = True if normal_part: run2 = para.add_run() run2.text = normal_part run2.font.bold = False # Load template fresh prs = Presentation('/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/Fever therapeutics.pptx') # Get the presentation XML element prs_part = prs.part prs_elm = prs_part._element sldIdLst = prs_elm.find(qn('p:sldIdLst')) # We'll build by using the add_slide.py approach through script # Actually let's just duplicate and edit using python-pptx directly # Get source slide (slide 1 - clean standard layout) source = prs.slides[0] def duplicate_and_add(prs, source_slide_idx): """Duplicate a slide and append to presentation""" from pptx.oxml.ns import qn src_slide = prs.slides[source_slide_idx] # Add a new slide with blank layout new_slide = prs.slides.add_slide(prs.slide_layouts[5]) # Clear the new slide's spTree sp_tree = new_slide.shapes._spTree for child in list(sp_tree): sp_tree.remove(child) # Copy all shapes from source src_sp_tree = src_slide.shapes._spTree for elem in src_sp_tree: sp_tree.append(copy.deepcopy(elem)) return new_slide # Create 9 new slides by duplicating slide 0 new_slides = [] for i in range(9): ns = duplicate_and_add(prs, 0) new_slides.append(ns) print(f"Total slides: {len(prs.slides)}") # Now edit each new slide for i, (slide, remedy) in enumerate(zip(new_slides, remedies)): set_slide_content(slide, remedy["name"], remedy["content"]) print(f"Set content for slide {i+1}: {remedy['name']}") # Remove original 6 slides by manipulating sldIdLst sldIdLst = prs._element.find(qn('p:sldIdLst')) all_ids = sldIdLst.findall(qn('p:sldId')) print(f"Total sldId entries: {len(all_ids)}") # Remove first 6 (original template slides) for sldId in all_ids[:6]: sldIdLst.remove(sldId) print(f"After removal: {len(sldIdLst.findall(qn('p:sldId')))} slides") # Save output_path = '/tmp/workspace/fever-remedies/Fever_Remedies_Homeopathy.pptx' prs.save(output_path) print(f"Saved to: {output_path}") PYEOF
python3 -c " from pptx import Presentation from pptx.util import Emu prs = Presentation('/tmp/workspace/fever-remedies/Fever_Remedies_Homeopathy.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): print(f'--- Slide {i} ---') for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): text = shape.text_frame.text[:100] print(f' {shape.name}: {text}') print() "
Fever Remedies Homeopathy
Presentation · PPTX
| Slide | Remedy |
|---|---|
| 1 | ACONITE |
| 2 | BRYONIA |
| 3 | EUPATORIUM PERFOLIATUM |
| 4 | FERRUM PHOSPHORICUM |
| 5 | CHAMOMILLA |
| 6 | GELSEMIUM |
| 7 | BELLADONNA |
| 8 | BAPTISIA |
| 9 | NUX VOMICA |
COMBINE BOTH PPT AND CREATE BEATIFUL AESTHETIC YET ACADEMIC SOFT COLOUR PALATTE PPT ....START FROM THE FRVER THERA AND THEN FEVER THERAPEUTICS
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Emu def extract_ppt(path, label): prs = Presentation(path) print(f"\n{'='*60}") print(f"{label} - Total slides: {len(prs.slides)}") print(f"{'='*60}") for i, slide in enumerate(prs.slides, 1): print(f"\n--- Slide {i} (layout: {slide.slide_layout.name}) ---") for shape in slide.shapes: if shape.has_text_frame and shape.text_frame.text.strip(): print(f" [{shape.name}]:") for para in shape.text_frame.paragraphs: line = "" for run in para.runs: b = "[B]" if run.font.bold else "" line += b + run.text + b if line.strip(): print(f" {line}") extract_ppt('/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/FEVER THERA.pptx', 'FEVER THERA') extract_ppt('/tmp/workspace/attachments/58d38776-3479-49b9-8d3b-0eb14163375b/Fever therapeutics.pptx', 'Fever therapeutics') PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu, Cm from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.oxml.ns import qn from pptx.oxml import parse_xml from lxml import etree import copy # ─── COLOUR PALETTE ──────────────────────────────────────────────────────────── # Soft academic palette BG_MAIN = RGBColor(0xF7, 0xF3, 0xEE) # warm off-white / parchment BG_TITLE_CARD = RGBColor(0x2E, 0x4A, 0x6B) # deep navy (title slide + section dividers) BG_SECTION = RGBColor(0x4A, 0x7B, 0x9D) # slate blue – section divider bg ACCENT_BAR = RGBColor(0x7B, 0xB5, 0xC8) # light teal – top accent bar ACCENT2 = RGBColor(0xC8, 0x9E, 0x72) # warm gold – decorative line TITLE_TEXT = RGBColor(0x2E, 0x4A, 0x6B) # navy – slide title text LABEL_TEXT = RGBColor(0x2E, 0x4A, 0x6B) # navy – bold label BODY_TEXT = RGBColor(0x2B, 0x2B, 0x2B) # near-black – body text WHITE = RGBColor(0xFF, 0xFF, 0xFF) LIGHT_RULE = RGBColor(0xD4, 0xC5, 0xB0) # dividing line W = Inches(13.33) H = Inches(7.5) prs = Presentation() prs.slide_width = W prs.slide_height = H # ─── HELPER: solid fill on shape ─────────────────────────────────────────────── def solid_fill(shape, color): sp = shape._element spPr = sp.find(qn('p:spPr')) if spPr is None: spPr = etree.SubElement(sp, qn('p:spPr')) # remove any existing fill for tag in ('a:noFill','a:solidFill','a:gradFill','a:pattFill','a:blipFill'): for el in spPr.findall(tag): spPr.remove(el) solidFill = etree.SubElement(spPr, qn('a:solidFill')) srgb = etree.SubElement(solidFill, qn('a:srgbClr')) srgb.set('val', '%02X%02X%02X' % (color.r, color.g, color.b)) def slide_bg_color(slide, color): background = slide.background fill = background.fill fill.solid() fill.fore_color.rgb = color def add_rect(slide, x, y, w, h, color): shape = slide.shapes.add_shape(1, x, y, w, h) # MSO_SHAPE_TYPE.RECTANGLE solid_fill(shape, color) shape.line.fill.background() return shape def set_para_align(para, align): pPr = para._p.get_or_add_pPr() pPr.set('algn', align) def add_textbox(slide, x, y, w, h, text, font_size, bold=False, color=BODY_TEXT, align='l', italic=False, wrap=True): txBox = slide.shapes.add_textbox(x, y, w, h) tf = txBox.text_frame tf.word_wrap = wrap para = tf.paragraphs[0] set_para_align(para, align) run = para.add_run() run.text = text run.font.size = Pt(font_size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color return txBox def add_rich_para(tf, items, first=False): """ items = list of (text, bold) tuples for one paragraph """ if first: para = tf.paragraphs[0] else: para = tf.add_paragraph() set_para_align(para, 'l') for text, bold in items: if not text: continue run = para.add_run() run.text = text run.font.size = Pt(18) run.font.bold = bold run.font.color.rgb = LABEL_TEXT if bold else BODY_TEXT # ─── SLIDE BUILDER FUNCTIONS ─────────────────────────────────────────────────── def make_title_slide(prs, title, subtitle): layout = prs.slide_layouts[6] # blank slide = prs.slides.add_slide(layout) slide_bg_color(slide, BG_TITLE_CARD) # Decorative left bar add_rect(slide, Inches(0), Inches(0), Inches(0.35), H, ACCENT_BAR) # Decorative gold horizontal line add_rect(slide, Inches(0.6), Inches(3.65), Inches(12.1), Inches(0.045), ACCENT2) # Main title tb = add_textbox(slide, Inches(0.7), Inches(2.3), Inches(12.0), Inches(1.3), title, 42, bold=True, color=WHITE, align='l') # Subtitle add_textbox(slide, Inches(0.7), Inches(3.8), Inches(12.0), Inches(0.9), subtitle, 22, bold=False, color=RGBColor(0xB8, 0xD4, 0xE8), align='l') # Bottom tag add_textbox(slide, Inches(0.7), Inches(6.5), Inches(12.0), Inches(0.6), "Homeopathic Materia Medica | Fever Therapeutics", 13, color=RGBColor(0x8A, 0xAD, 0xC8), align='l', italic=True) return slide def make_section_divider(prs, section_title, subtitle=""): layout = prs.slide_layouts[6] slide = prs.slides.add_slide(layout) slide_bg_color(slide, BG_SECTION) # Top accent stripe add_rect(slide, Inches(0), Inches(0), W, Inches(0.18), ACCENT2) # Bottom accent stripe add_rect(slide, Inches(0), Inches(7.32), W, Inches(0.18), ACCENT2) # Section number block on left add_rect(slide, Inches(0), Inches(0.18), Inches(3.5), Inches(7.14), RGBColor(0x26, 0x3D, 0x5C)) # Section label (vertical feel) add_textbox(slide, Inches(0.2), Inches(2.5), Inches(3.1), Inches(0.6), "SECTION", 14, bold=True, color=RGBColor(0x7B, 0xB5, 0xC8), align='l') # Section title add_textbox(slide, Inches(4.0), Inches(2.4), Inches(9.0), Inches(2.0), section_title, 36, bold=True, color=WHITE, align='l') if subtitle: add_textbox(slide, Inches(4.0), Inches(4.6), Inches(9.0), Inches(0.8), subtitle, 19, color=RGBColor(0xB8, 0xD4, 0xE8), align='l') return slide def make_remedy_slide(prs, remedy_name, content_items): """ content_items = list of (bold_label, normal_text) """ layout = prs.slide_layouts[6] slide = prs.slides.add_slide(layout) slide_bg_color(slide, BG_MAIN) # Top navy header bar add_rect(slide, Inches(0), Inches(0), W, Inches(1.35), BG_TITLE_CARD) # Gold accent line below header add_rect(slide, Inches(0), Inches(1.35), W, Inches(0.05), ACCENT2) # Teal left sidebar add_rect(slide, Inches(0), Inches(1.4), Inches(0.22), Inches(6.1), ACCENT_BAR) # Remedy name in header add_textbox(slide, Inches(0.45), Inches(0.22), Inches(12.4), Inches(0.9), remedy_name, 34, bold=True, color=WHITE, align='l') # Content area content_x = Inches(0.42) content_y = Inches(1.55) content_w = Inches(12.45) content_h = Inches(5.7) txBox = slide.shapes.add_textbox(content_x, content_y, content_w, content_h) tf = txBox.text_frame tf.word_wrap = True first = True for label, text in content_items: if first: para = tf.paragraphs[0] first = False else: para = tf.add_paragraph() set_para_align(para, 'l') # Space between major sections pPr = para._p.get_or_add_pPr() pPr.set('spc', '0') if label: r1 = para.add_run() r1.text = label r1.font.size = Pt(17.5) r1.font.bold = True r1.font.color.rgb = LABEL_TEXT if text: r2 = para.add_run() r2.text = text r2.font.size = Pt(17.5) r2.font.bold = False r2.font.color.rgb = BODY_TEXT # Subtle bottom rule add_rect(slide, Inches(0.42), Inches(7.15), Inches(12.5), Inches(0.04), LIGHT_RULE) # Slide footer add_textbox(slide, Inches(0.45), Inches(7.2), Inches(12.0), Inches(0.25), "Homeopathic Materia Medica – Fever Therapeutics", 9.5, italic=True, color=RGBColor(0xAA, 0x99, 0x88), align='l') return slide # ─── DATA ────────────────────────────────────────────────────────────────────── # FEVER THERA (9 remedies) – slides 1-9 fever_thera = [ ("ACONITE NAPELLUS", [ ("TYPE: ", "Sudden inflammatory fever, Synocha, Croup, Scarlet fever"), ("STAGES:", ""), ("Chill: ", "Sudden after exposure to cold dry wind; great anxiety"), ("Heat: ", "Dry burning heat, skin hot and dry, cannot uncover"), ("Sweat: ", "Hot profuse sweat relieves all complaints"), ("THIRST: ", "Intense, unquenchable thirst for cold water in all stages"), ("", "Sudden onset after cold dry wind exposure"), ("", "Great restlessness, anxiety and fear of death"), ("", "Pulse: Full, bounding, hard and rapid"), ("", "No perspiration in early stage; skin dry, burning, hot"), ]), ("BRYONIA ALBA", [ ("TYPE: ", "Continued fever, Typhoid, Pneumonia, Rheumatic fever"), ("STAGES:", ""), ("Chill: ", "External chilliness, very sensitive to draft of air"), ("Heat: ", "Internal burning, dry; hot to touch"), ("Sweat: ", "Sour smelling, profuse, with relief of symptoms"), ("THIRST: ", "Great thirst for large quantities of cold water at long intervals"), ("", "Aggravation from least motion – lies perfectly still"), ("", "Heavy, pressing frontal headache during fever"), ("", "Constipation, dry mouth, lips, and throat"), ("", "Irritable when disturbed; wants rest and quiet"), ]), ("EUPATORIUM PERFOLIATUM", [ ("TYPE: ", "Intermittent fever, Influenza, Dengue-like fever"), ("STAGES:", ""), ("Chill: ", "7–9 AM; preceded and accompanied by intense thirst"), ("Heat: ", "Great soreness and aching of bones as if broken"), ("Sweat: ", "Relieves all symptoms except headache"), ("THIRST: ", "Great thirst before and during chill stage (characteristic)"), ("", "Aching pains in bones, joints, muscles – bones feel broken"), ("", "Vomiting of bile before and at close of chill"), ("", "Great prostration and weakness during fever"), ("", "Eyeballs sore and aching on movement"), ]), ("FERRUM PHOSPHORICUM", [ ("TYPE: ", "First stage of all inflammatory and catarrhal fevers"), ("STAGES:", ""), ("Chill: ", "Short shiverings, pale face, disposition to yawn"), ("Heat: ", "Moderate fever, flushed red face, hot and moist skin"), ("Sweat: ", "Night sweats, debilitating, with weakness"), ("THIRST: ", "Present but moderate – thirst for cold water"), ("", "Pulse: Full, soft, compressible (not hard as Aconite)"), ("", "No great anxiety or fear unlike Aconite"), ("", "Gradual onset, not as sudden as Aconite"), ("", "Indicated before exudation or pus formation occurs"), ]), ("CHAMOMILLA", [ ("TYPE: ", "Fever in children, Dentition fever, Febrile convulsions"), ("STAGES:", ""), ("Chill: ", "Heat of face; one cheek red, other pale and cold"), ("Heat: ", "Burning hot, dry skin, red face, sweaty scalp and head"), ("Sweat: ", "Hot sweat on face and head only; body cold"), ("THIRST: ", "Thirsty, wants cold water during heat stage"), ("", "One cheek red/hot, other pale/cold (pathognomonic)"), ("", "Extreme irritability and peevishness – cannot be pacified"), ("", "Child demands to be carried – symptoms better when carried"), ("", "Oversensitivity to pain; cries and moans continuously"), ]), ("GELSEMIUM", [ ("TYPE: ", "Bilious remittent fever, Influenza, Catarrhal fever"), ("STAGES:", ""), ("Chill: ", "Runs up and down the spine; shivering despite external heat"), ("Heat: ", "General prostration; drowsy, heavy, wants to lie still"), ("Sweat: ", "Profuse, relieving; cold sweat with anxiety"), ("THIRST: ", "Thirstless – absence of thirst is characteristic"), ("", "Great muscular prostration, heaviness of eyelids and limbs"), ("", "Dusky flushed face, slow thought and movement"), ("", "Dizziness, Drowsiness, Dullness and Trembling (4 Ds)"), ("", "Slow gradual onset; anxiety during fever, wants to be held"), ]), ("BELLADONNA", [ ("TYPE: ", "Violent inflammatory fever, Scarlatina, Cerebral fever"), ("STAGES:", ""), ("Chill: ", "Alternates with heat; chills start from extremities"), ("Heat: ", "Intense, sudden, dry burning; radiates from body"), ("Sweat: ", "On covered parts only; offensive, sour smelling"), ("THIRST: ", "Thirstless – although mouth and throat are very dry"), ("", "Face red, flushed, hot; carotids pulsate strongly"), ("", "Pupils dilated; eyes bright, glistening and glassy"), ("", "Violent throbbing headache – worse from jar and light"), ("", "Delirium: vivid and active – sees monsters, tries to escape"), ]), ("BAPTISIA TINCTORIA", [ ("TYPE: ", "Typhoid fever, Septic fever, Low grade continued fever"), ("STAGES:", ""), ("Chill: ", "Commences in back; aching all over the body"), ("Heat: ", "With foul putrid discharges; dusky, besotted face"), ("Sweat: ", "Offensive, profuse, without relief of symptoms"), ("THIRST: ", "Thirst present – wants water frequently in small quantities"), ("", "Besotted (drugged look), dusky, dark red face"), ("", "Confusion of mind – thinks parts of body are scattered"), ("", "All discharges horribly offensive (breath, stool, urine)"), ("", "Falls asleep while answering – great prostration and weakness"), ]), ("NUX VOMICA", [ ("TYPE: ", "Intermittent fever, Gastric fever, Catarrhal fever"), ("STAGES:", ""), ("Chill: ", "Cannot get warm; must be covered even with hot drinks"), ("Heat: ", "Must remain covered; face red; heat not > by uncovering"), ("Sweat: ", "Sour, hot, partial – one-sided; chilliness on uncovering"), ("THIRST: ", "During heat only; wants hot drinks; none during chill"), ("", "Great chilliness – oversensitive to cold in all stages"), ("", "Gastric symptoms – nausea, vomiting, retching during fever"), ("", "Irritable, oversensitive, quarrelsome during fever"), ("", "Fever from overindulgence in food, alcohol, stimulants"), ]), ] # Fever therapeutics (6 remedies) fever_therapeutics = [ ("PHOSPHORUS", [ ("STAGES: ", "All 3 stages are present"), ("Heat: ", "At night – beginning in stomach, faint and unnatural hunger"), ("Chill: ", "Evening followed by internal heat"), ("Sweat: ", "Excessive perspiration with thirst; nightsweat without relief"), ("THIRST: ", "No thirst during chill and heat; thirst only during sweat stage"), ("", "Small and quick pulse"), ("", "Suddenness of symptoms"), ("", "Craves ICE during fever"), ("", "Painless fever"), ]), ("SULPHUR", [ ("TYPE: ", "Remittent fever, Measles (purple eruptions)"), ("STAGES:", ""), ("Chill: ", "Spreading up to back"), ("Heat: ", "With general throbbing between scapula"), ("", "Frequent flushes of heat; violent spells of heat in whole body"), ("Sweat: ", "Without relief, with sulphur odour, single part (axilla, nape, hand, foot)"), ("THIRST: ", "Great thirst with dry skin"), ("", "Bad effects of vaccination"), ]), ("CHINA OFFICINALIS", [ ("TYPE: ", "Intermittent (returns every week; anticipates paroxysm)"), ("STAGE: ", "All stages well marked – Chill → Thirst → Chill → Thirst"), ("Chill: ", "Begins in breast, forenoon"), ("Heat: ", "Red hot face with cold hands with distended veins"), ("Sweat: ", "Drenching at night < exertion"), ("THIRST: ", "No thirst during heat stage or thirst for cold water"), ("", "Marked weakness and prostration"), ("", "Sensitive to draft of air"), ("", "Desire to uncover and aversion to food"), ]), ("PYROGENIUM", [ ("TYPE: ", "Septic fever"), ("STAGES: ", "Chills intermingled with heat and sweat"), ("", "Temperature rises rapidly with great aching"), ("Sweat: ", "Does not cause fall in temperature"), ("PULSE: ", "High; temperature and pulse are out of proportion"), ("", "Loquacity – talks faster than usual during fever"), ("", "Delirium and confusion of mind about his body and limbs"), ("Chills: ", "Better warm bed; quotidian (7 PM); cold sweat, hot sweat at high temp"), ("SLEEP: ", "Full of frightful dreams; feels suffocated; cries during sleep"), ]), ("ARNICA MONTANA", [ ("TYPES: ", "Intermittent, septic, traumatic, typhoid"), ("Chills: ", "Shivering all over the body"), ("Heat: ", "Head or face alone hot, body cold"), ("Sweat: ", "Profuse nightly sweat, offensive"), ("", "Must uncover but it chills him"), ("", "Parts become sore, painful and bruised"), ("", "Bed feels hard"), ("", "Muttering delirium during fever"), ]), ("RHUS TOXICODENDRON", [ ("TYPES: ", "Intermittent fever, Adynamic"), ("Chills: ", "Easily chilled < least uncovering; pain in limbs"), ("", "With dry cough and restlessness"), ("", "As if dashed with cold water or cold water in veins"), ("", "Wants to yawn and stretch during chills"), ("Heat: ", "With delirium – low, incoherent talk; answers correctly, slowly or hastily"), ("Sweat: ", "With sleepiness"), ("", "Urticaria during fever"), ]), ] # ─── BUILD PRESENTATION ─────────────────────────────────────────────────────── # 1. Title slide make_title_slide(prs, "FEVER THERAPEUTICS", "A Complete Homeopathic Materia Medica Guide") # 2. Section divider – FEVER THERA make_section_divider(prs, "FEVER THERA", "Aconite • Bryonia • Eupatorium • Ferrum Phos • Chamomilla\nGelsemium • Belladonna • Baptisia • Nux Vomica") # 3. Fever Thera slides (9) for name, content in fever_thera: make_remedy_slide(prs, name, content) # 4. Section divider – Fever Therapeutics make_section_divider(prs, "FEVER THERAPEUTICS", "Phosphorus • Sulphur • China • Pyrogenium • Arnica • Rhus Tox") # 5. Fever Therapeutics slides (6) for name, content in fever_therapeutics: make_remedy_slide(prs, name, content) # Save out = '/tmp/workspace/fever-remedies/Combined_Fever_Therapeutics.pptx' prs.save(out) print(f"Saved: {out}") print(f"Total slides: {len(prs.slides)}") PYEOF
python3 << 'PYEOF' from pptx import Presentation from pptx.util import Inches, Pt, Emu from pptx.dml.color import RGBColor from pptx.enum.text import PP_ALIGN from pptx.oxml.ns import qn, nsmap from lxml import etree import copy # ─── COLOUR PALETTE ──────────────────────────────────────────────────────────── BG_MAIN = RGBColor(0xF7, 0xF3, 0xEE) # warm parchment BG_TITLE_CARD = RGBColor(0x2E, 0x4A, 0x6B) # deep navy BG_SECTION = RGBColor(0x4A, 0x7B, 0x9D) # slate blue ACCENT_BAR = RGBColor(0x7B, 0xB5, 0xC8) # light teal ACCENT2 = RGBColor(0xC8, 0x9E, 0x72) # warm gold TITLE_TEXT = RGBColor(0x2E, 0x4A, 0x6B) LABEL_TEXT = RGBColor(0x2E, 0x4A, 0x6B) BODY_TEXT = RGBColor(0x2B, 0x2B, 0x2B) WHITE = RGBColor(0xFF, 0xFF, 0xFF) LIGHT_RULE = RGBColor(0xD4, 0xC5, 0xB0) SECTION_DARK = RGBColor(0x26, 0x3D, 0x5C) W = Inches(13.33) H = Inches(7.5) prs = Presentation() prs.slide_width = W prs.slide_height = H # ─── HELPERS ─────────────────────────────────────────────────────────────────── def rgb_hex(color): return '%02X%02X%02X' % (color.r, color.g, color.b) def solid_fill_shape(shape, color): """Apply solid fill to a shape using python-pptx's fill API""" shape.fill.solid() shape.fill.fore_color.rgb = color shape.line.fill.background() # no line def slide_bg_color(slide, color): slide.background.fill.solid() slide.background.fill.fore_color.rgb = color def add_rect(slide, x, y, w, h, color): shape = slide.shapes.add_shape(1, x, y, w, h) solid_fill_shape(shape, color) return shape def set_para_align(para, align='l'): pPr = para._p.get_or_add_pPr() pPr.set('algn', align) def add_textbox(slide, x, y, w, h, text, font_size, bold=False, color=None, align='l', italic=False): if color is None: color = BODY_TEXT txBox = slide.shapes.add_textbox(x, y, w, h) tf = txBox.text_frame tf.word_wrap = True para = tf.paragraphs[0] set_para_align(para, align) run = para.add_run() run.text = text run.font.size = Pt(font_size) run.font.bold = bold run.font.italic = italic run.font.color.rgb = color return txBox # ─── SLIDE TYPES ─────────────────────────────────────────────────────────────── def make_title_slide(prs, title, subtitle): slide = prs.slides.add_slide(prs.slide_layouts[6]) slide_bg_color(slide, BG_TITLE_CARD) # Left accent bar add_rect(slide, Inches(0), Inches(0), Inches(0.32), H, ACCENT_BAR) # Gold rule add_rect(slide, Inches(0.55), Inches(3.7), Inches(12.4), Inches(0.045), ACCENT2) # Title add_textbox(slide, Inches(0.6), Inches(2.1), Inches(12.2), Inches(1.4), title, 44, bold=True, color=WHITE, align='l') # Subtitle add_textbox(slide, Inches(0.6), Inches(3.85), Inches(12.2), Inches(0.9), subtitle, 21, color=RGBColor(0xB8, 0xD4, 0xE8), align='l') # Footer add_textbox(slide, Inches(0.6), Inches(6.6), Inches(12.0), Inches(0.5), "Homeopathic Materia Medica | Fever Therapeutics", 12, italic=True, color=RGBColor(0x8A, 0xAD, 0xC8), align='l') return slide def make_section_divider(prs, section_title, subtitle=""): slide = prs.slides.add_slide(prs.slide_layouts[6]) slide_bg_color(slide, BG_SECTION) # Top + bottom gold stripes add_rect(slide, Inches(0), Inches(0), W, Inches(0.16), ACCENT2) add_rect(slide, Inches(0), Inches(7.34), W, Inches(0.16), ACCENT2) # Dark left panel add_rect(slide, Inches(0), Inches(0.16), Inches(3.6), Inches(7.18), SECTION_DARK) # "SECTION" label in left panel add_textbox(slide, Inches(0.22), Inches(2.6), Inches(3.1), Inches(0.55), "SECTION", 13, bold=True, color=RGBColor(0x7B, 0xB5, 0xC8), align='l') # Section title add_textbox(slide, Inches(4.0), Inches(2.35), Inches(9.0), Inches(2.0), section_title, 37, bold=True, color=WHITE, align='l') if subtitle: add_textbox(slide, Inches(4.0), Inches(4.6), Inches(9.1), Inches(1.1), subtitle, 18, color=RGBColor(0xD0, 0xE8, 0xF5), align='l') return slide def make_remedy_slide(prs, remedy_name, content_items): slide = prs.slides.add_slide(prs.slide_layouts[6]) slide_bg_color(slide, BG_MAIN) # Header bar (navy) add_rect(slide, Inches(0), Inches(0), W, Inches(1.28), BG_TITLE_CARD) # Gold underline on header add_rect(slide, Inches(0), Inches(1.28), W, Inches(0.048), ACCENT2) # Teal left accent strip (body area) add_rect(slide, Inches(0), Inches(1.328), Inches(0.2), Inches(6.17), ACCENT_BAR) # Remedy name add_textbox(slide, Inches(0.38), Inches(0.19), Inches(12.5), Inches(0.9), remedy_name, 33, bold=True, color=WHITE, align='l') # Content text box cx, cy, cw, ch = Inches(0.38), Inches(1.45), Inches(12.7), Inches(5.75) txBox = slide.shapes.add_textbox(cx, cy, cw, ch) tf = txBox.text_frame tf.word_wrap = True first = True for label, text in content_items: if first: para = tf.paragraphs[0] first = False else: para = tf.add_paragraph() set_para_align(para, 'l') if label: r1 = para.add_run() r1.text = label r1.font.size = Pt(17) r1.font.bold = True r1.font.color.rgb = LABEL_TEXT if text: r2 = para.add_run() r2.text = text r2.font.size = Pt(17) r2.font.bold = False r2.font.color.rgb = BODY_TEXT # Bottom rule add_rect(slide, Inches(0.38), Inches(7.14), Inches(12.6), Inches(0.038), LIGHT_RULE) # Footer add_textbox(slide, Inches(0.42), Inches(7.22), Inches(12.0), Inches(0.24), "Homeopathic Materia Medica – Fever Therapeutics", 9, italic=True, color=RGBColor(0xAA, 0x99, 0x88), align='l') return slide # ─── DATA ────────────────────────────────────────────────────────────────────── fever_thera = [ ("ACONITE NAPELLUS", [ ("TYPE: ", "Sudden inflammatory fever, Synocha, Croup, Scarlet fever"), ("Chill: ", "Sudden after exposure to cold dry wind; great anxiety"), ("Heat: ", "Dry burning heat, skin hot and dry, cannot uncover"), ("Sweat: ", "Hot profuse sweat relieves all complaints"), ("THIRST: ", "Intense, unquenchable thirst for cold water in all stages"), ("", "Sudden onset after cold dry wind exposure"), ("", "Great restlessness, anxiety and fear of death"), ("", "Pulse: Full, bounding, hard and rapid"), ("", "No perspiration in early stage; skin dry, burning, hot"), ]), ("BRYONIA ALBA", [ ("TYPE: ", "Continued fever, Typhoid, Pneumonia, Rheumatic fever"), ("Chill: ", "External chilliness, very sensitive to draft of air"), ("Heat: ", "Internal burning, dry; hot to touch"), ("Sweat: ", "Sour smelling, profuse, with relief of symptoms"), ("THIRST: ", "Great thirst for large quantities of cold water at long intervals"), ("", "Aggravation from least motion – lies perfectly still"), ("", "Heavy, pressing frontal headache during fever"), ("", "Constipation, dry mouth, lips, and throat"), ("", "Irritable when disturbed; wants rest and quiet"), ]), ("EUPATORIUM PERFOLIATUM", [ ("TYPE: ", "Intermittent fever, Influenza, Dengue-like fever"), ("Chill: ", "7–9 AM; preceded and accompanied by intense thirst"), ("Heat: ", "Great soreness and aching of bones as if broken"), ("Sweat: ", "Relieves all symptoms except headache"), ("THIRST: ", "Great thirst before and during chill stage (characteristic)"), ("", "Aching pains in bones, joints, muscles – bones feel broken"), ("", "Vomiting of bile before and at close of chill"), ("", "Great prostration and weakness during fever"), ("", "Eyeballs sore and aching on movement"), ]), ("FERRUM PHOSPHORICUM", [ ("TYPE: ", "First stage of all inflammatory and catarrhal fevers"), ("Chill: ", "Short shiverings, pale face, disposition to yawn"), ("Heat: ", "Moderate fever, flushed red face, hot and moist skin"), ("Sweat: ", "Night sweats, debilitating, with weakness"), ("THIRST: ", "Present but moderate – thirst for cold water"), ("", "Pulse: Full, soft, compressible (not hard as Aconite)"), ("", "No great anxiety or fear unlike Aconite"), ("", "Gradual onset, not as sudden as Aconite"), ("", "Indicated before exudation or pus formation occurs"), ]), ("CHAMOMILLA", [ ("TYPE: ", "Fever in children, Dentition fever, Febrile convulsions"), ("Chill: ", "Heat of face; one cheek red, other pale and cold"), ("Heat: ", "Burning hot, dry skin, red face, sweaty scalp and head"), ("Sweat: ", "Hot sweat on face and head only; body cold"), ("THIRST: ", "Thirsty, wants cold water during heat stage"), ("", "One cheek red/hot, other pale/cold (pathognomonic)"), ("", "Extreme irritability and peevishness – cannot be pacified"), ("", "Child demands to be carried – symptoms better when carried"), ("", "Oversensitivity to pain; cries and moans continuously"), ]), ("GELSEMIUM", [ ("TYPE: ", "Bilious remittent fever, Influenza, Catarrhal fever"), ("Chill: ", "Runs up and down the spine; shivering despite external heat"), ("Heat: ", "General prostration; drowsy, heavy, wants to lie still"), ("Sweat: ", "Profuse, relieving; cold sweat with anxiety"), ("THIRST: ", "Thirstless – absence of thirst is characteristic"), ("", "Great muscular prostration, heaviness of eyelids and limbs"), ("", "Dusky flushed face, slow thought and movement"), ("", "Dizziness, Drowsiness, Dullness and Trembling (4 Ds)"), ("", "Slow gradual onset; anxiety during fever, wants to be held"), ]), ("BELLADONNA", [ ("TYPE: ", "Violent inflammatory fever, Scarlatina, Cerebral fever"), ("Chill: ", "Alternates with heat; chills start from extremities"), ("Heat: ", "Intense, sudden, dry burning; radiates from body"), ("Sweat: ", "On covered parts only; offensive, sour smelling"), ("THIRST: ", "Thirstless – although mouth and throat are very dry"), ("", "Face red, flushed, hot; carotids pulsate strongly"), ("", "Pupils dilated; eyes bright, glistening and glassy"), ("", "Violent throbbing headache – worse from jar and light"), ("", "Delirium: vivid and active – sees monsters, tries to escape"), ]), ("BAPTISIA TINCTORIA", [ ("TYPE: ", "Typhoid fever, Septic fever, Low grade continued fever"), ("Chill: ", "Commences in back; aching all over the body"), ("Heat: ", "With foul putrid discharges; dusky, besotted face"), ("Sweat: ", "Offensive, profuse, without relief of symptoms"), ("THIRST: ", "Thirst present – wants water frequently in small quantities"), ("", "Besotted (drugged look), dusky, dark red face"), ("", "Confusion of mind – thinks parts of body are scattered"), ("", "All discharges horribly offensive (breath, stool, urine)"), ("", "Falls asleep while answering – great prostration and weakness"), ]), ("NUX VOMICA", [ ("TYPE: ", "Intermittent fever, Gastric fever, Catarrhal fever"), ("Chill: ", "Cannot get warm; must be covered even with hot drinks"), ("Heat: ", "Must remain covered; face red; heat not > by uncovering"), ("Sweat: ", "Sour, hot, partial – one-sided; chilliness on uncovering"), ("THIRST: ", "During heat only; wants hot drinks; none during chill"), ("", "Great chilliness – oversensitive to cold in all stages"), ("", "Gastric symptoms – nausea, vomiting, retching during fever"), ("", "Irritable, oversensitive, quarrelsome during fever"), ("", "Fever from overindulgence in food, alcohol, stimulants"), ]), ] fever_therapeutics = [ ("PHOSPHORUS", [ ("STAGES: ", "All 3 stages are present"), ("Heat: ", "At night – beginning in stomach, faint and unnatural hunger"), ("Chill: ", "Evening followed by internal heat"), ("Sweat: ", "Excessive perspiration with thirst; nightsweat without relief"), ("THIRST: ", "No thirst during chill and heat; thirst only during sweat stage"), ("", "Small and quick pulse"), ("", "Suddenness of symptoms"), ("", "Craves ICE during fever"), ("", "Painless fever"), ]), ("SULPHUR", [ ("TYPE: ", "Remittent fever, Measles (purple eruptions)"), ("Chill: ", "Spreading up to back"), ("Heat: ", "With general throbbing between scapula"), ("", "Frequent flushes of heat; violent spells of heat in whole body"), ("Sweat: ", "Without relief, with sulphur odour, single part (axilla, nape, hand, foot)"), ("THIRST: ", "Great thirst with dry skin"), ("", "Bad effects of vaccination"), ]), ("CHINA OFFICINALIS", [ ("TYPE: ", "Intermittent (returns every week; anticipates paroxysm)"), ("STAGE: ", "All stages well marked – Chill then Thirst then Chill then Thirst"), ("Chill: ", "Begins in breast, forenoon"), ("Heat: ", "Red hot face with cold hands with distended veins"), ("Sweat: ", "Drenching at night < exertion"), ("THIRST: ", "No thirst during heat stage or thirst for cold water"), ("", "Marked weakness and prostration"), ("", "Sensitive to draft of air"), ("", "Desire to uncover and aversion to food"), ]), ("PYROGENIUM", [ ("TYPE: ", "Septic fever"), ("STAGES: ", "Chills intermingled with heat and sweat"), ("", "Temperature rises rapidly with great aching"), ("Sweat: ", "Does not cause fall in temperature"), ("PULSE: ", "High; temperature and pulse are out of proportion"), ("", "Loquacity – talks faster than usual during fever"), ("", "Delirium and confusion of mind about his body and limbs"), ("Chills: ", "Better warm bed; quotidian (7 PM); cold sweat, hot sweat at high temp"), ("SLEEP: ", "Full of frightful dreams; feels suffocated; cries during sleep"), ]), ("ARNICA MONTANA", [ ("TYPES: ", "Intermittent, septic, traumatic, typhoid"), ("Chills: ", "Shivering all over the body"), ("Heat: ", "Head or face alone hot, body cold"), ("Sweat: ", "Profuse nightly sweat, offensive"), ("", "Must uncover but it chills him"), ("", "Parts become sore, painful and bruised"), ("", "Bed feels hard"), ("", "Muttering delirium during fever"), ]), ("RHUS TOXICODENDRON", [ ("TYPES: ", "Intermittent fever, Adynamic"), ("Chills: ", "Easily chilled < least uncovering; pain in limbs"), ("", "With dry cough and restlessness"), ("", "As if dashed with cold water or cold water in veins"), ("", "Wants to yawn and stretch during chills"), ("Heat: ", "With delirium – low, incoherent talk; answers correctly, slowly or hastily"), ("Sweat: ", "With sleepiness"), ("", "Urticaria during fever"), ]), ] # ─── BUILD ───────────────────────────────────────────────────────────────────── make_title_slide(prs, "FEVER THERAPEUTICS", "A Complete Homeopathic Materia Medica Guide") make_section_divider(prs, "FEVER THERA", "Aconite | Bryonia | Eupatorium | Ferrum Phos | Chamomilla\n" "Gelsemium | Belladonna | Baptisia | Nux Vomica") for name, content in fever_thera: make_remedy_slide(prs, name, content) make_section_divider(prs, "FEVER THERAPEUTICS", "Phosphorus | Sulphur | China | Pyrogenium | Arnica | Rhus Tox") for name, content in fever_therapeutics: make_remedy_slide(prs, name, content) out = '/tmp/workspace/fever-remedies/Combined_Fever_Therapeutics.pptx' prs.save(out) print(f"Saved: {out}") print(f"Total slides: {len(prs.slides)}") PYEOF
python3 -c " from pptx import Presentation prs = Presentation('/tmp/workspace/fever-remedies/Combined_Fever_Therapeutics.pptx') print(f'Total slides: {len(prs.slides)}') for i, slide in enumerate(prs.slides, 1): shapes_text = [] for shape in slide.shapes: if shape.has_text_frame: t = shape.text_frame.text.strip() if t: shapes_text.append(t[:60]) print(f'Slide {i:2d}: {\" | \".join(shapes_text[:2])}') "
Combined Fever Therapeutics
Presentation · PPTX
| # | Slide |
|---|---|
| 1 | Title slide |
| 2 | Section divider - FEVER THERA |
| 3-11 | Aconite, Bryonia, Eupatorium, Ferrum Phos, Chamomilla, Gelsemium, Belladonna, Baptisia, Nux Vomica |
| 12 | Section divider - FEVER THERAPEUTICS |
| 13-18 | Phosphorus, Sulphur, China, Pyrogenium, Arnica, Rhus Tox |