Explain pterygium in details for long answer questions

| Part | Description |
|---|---|
| Cap (apex) | Avascular halo-like zone at the advancing edge; contains Fuchs islets |
| Head | Vascularized, elevated portion on the cornea at the limbus |
| Body | Fleshy, triangular, vascularized portion on the bulbar conjunctiva |

| Feature | Pterygium | Pseudopterygium |
|---|---|---|
| Origin | Primary degenerative condition | Caused by an acute episode (chemical burn, corneal ulcer, trauma, cicatrizing conjunctivitis) |
| Location | Always at horizontal meridian (3 or 9 o'clock) | Can be at any position |
| Corneal attachment | Along its entire length | Only at apex (head) |
| Probe test | Probe cannot be passed under lesion at limbus | Probe can be passed under the lesion at the limbus (free from limbal attachment) |
| History | No inciting event | History of causative episode |
| Condition | Distinguishing Features |
|---|---|
| Pinguecula | Yellow-white conjunctival deposit adjacent to limbus; does NOT encroach onto the cornea |
| Pseudopterygium | Follows acute injury; probe test positive; can be at any meridian |
| Conjunctival Intraepithelial Neoplasia (CIN) | Jelly-like, velvety, leukoplakic; not necessarily wing-shaped; not always at 3/9 o'clock; biopsy distinguishes |
| Limbal dermoid | Congenital, rounded white lesion, usually inferotemporal |
| Squamous cell carcinoma | Irregular, vascularized, often gelatinous; more common in elderly; biopsy required |
| Peripheral hypertrophic subepithelial corneal degeneration | Bilateral; mainly in Caucasian women; elevated subepithelial opacities |
| Episcleritis/Scleritis | Diffuse or sectoral inflammation without corneal tissue growth |

| Complication | Notes |
|---|---|
| Visual axis obscuration | Advanced/large pterygia |
| Corneal astigmatism | Irregular, typically with-the-rule |
| Corneal scarring | After deep invasion |
| Restricted ocular motility | Subconjunctival fibrosis in extensive/recurrent disease |
| Recurrence post-surgery | Especially after bare sclera technique |
| Corneoscleral thinning/necrosis | Complication of MMC |
| Malignant transformation | Rare; OSSN/SCC may be found on histopathology |
| Feature | Details |
|---|---|
| Definition | Triangular fibrovascular ingrowth of conjunctiva over the limbus onto the cornea |
| Site | 3 o'clock or 9 o'clock; usually nasal |
| Cause | Chronic UV-B exposure; elastotic degeneration |
| Histology | Elastotic degeneration of vascularized subepithelial stroma |
| Parts | Cap (apex), Head, Body |
| Special signs | Stocker line (iron line), Fuchs islets, dellen |
| Symptoms | Irritation, redness, decreased vision, astigmatism |
| Key DDx | Pseudopterygium, pinguecula, OSSN/CIN, limbal dermoid |
| Treatment | UV protection, lubricants, steroids; Surgery (conjunctival autograft preferred) |
| Adjuvant | Mitomycin C, beta-irradiation to reduce recurrence |
| Recurrence | ~80% bare sclera; ~5-15% with autograft |
Create a quick reference PDF summary of pterygium diagnosis and management
ls /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && ls /tmp/workspace/
mkdir -p /tmp/workspace/pterygium-pdf && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm, mm from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate from reportlab.lib.colors import HexColor # ── Colour palette ────────────────────────────────────────────────────────── TEAL = HexColor("#0D6E85") TEAL_LIGHT = HexColor("#E8F4F7") ORANGE = HexColor("#E8762B") ORANGE_LT = HexColor("#FEF3EB") GREEN = HexColor("#2E7D32") GREEN_LT = HexColor("#E8F5E9") RED = HexColor("#C62828") RED_LT = HexColor("#FFEBEE") GREY_DARK = HexColor("#263238") GREY_MID = HexColor("#546E7A") GREY_LT = HexColor("#ECEFF1") WHITE = colors.white # ── Document setup ─────────────────────────────────────────────────────────── out = "/tmp/workspace/pterygium-pdf/Pterygium_Quick_Reference.pdf" doc = SimpleDocTemplate(out, pagesize=A4, topMargin=2*cm, bottomMargin=1.8*cm, leftMargin=1.6*cm, rightMargin=1.6*cm) W = A4[0] - 3.2*cm # usable width # ── Styles ─────────────────────────────────────────────────────────────────── styles = getSampleStyleSheet() def S(name, **kw): return ParagraphStyle(name, **kw) title_s = S("title_s", fontName="Helvetica-Bold", fontSize=20, textColor=WHITE, leading=24, alignment=TA_CENTER) sub_s = S("sub_s", fontName="Helvetica", fontSize=9, textColor=WHITE, leading=12, alignment=TA_CENTER) sec_s = S("sec_s", fontName="Helvetica-Bold", fontSize=10.5, textColor=WHITE, leading=14, spaceBefore=0, spaceAfter=0) body_s = S("body_s", fontName="Helvetica", fontSize=8.5, textColor=GREY_DARK, leading=12, spaceBefore=1, spaceAfter=1) bold_s = S("bold_s", fontName="Helvetica-Bold", fontSize=8.5, textColor=GREY_DARK, leading=12) small_s = S("small_s", fontName="Helvetica", fontSize=7.5, textColor=GREY_MID, leading=11) bullet_s = S("bullet_s", fontName="Helvetica", fontSize=8.5, textColor=GREY_DARK, leading=12, leftIndent=10, bulletIndent=0) red_s = S("red_s", fontName="Helvetica-Bold", fontSize=8.5, textColor=RED) green_s = S("green_s", fontName="Helvetica-Bold", fontSize=8.5, textColor=GREEN) orange_s = S("orange_s", fontName="Helvetica-Bold", fontSize=8.5, textColor=ORANGE) tip_s = S("tip_s", fontName="Helvetica-Oblique", fontSize=8, textColor=HexColor("#4A148C"), leading=11, leftIndent=6) foot_s = S("foot_s", fontName="Helvetica", fontSize=7, textColor=GREY_MID, leading=10, alignment=TA_CENTER) # ── Helper: section header ─────────────────────────────────────────────────── def sec_header(text, bg=TEAL, width=W): tbl = Table([[Paragraph(text, sec_s)]], colWidths=[width]) tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 7), ("RIGHTPADDING", (0,0), (-1,-1), 7), ("ROUNDEDCORNERS", [3, 3, 3, 3]), ])) return tbl def spacer(h=4): return Spacer(1, h) def bullet(text, style=bullet_s): return Paragraph(f"• {text}", style) def hr(c=TEAL_LIGHT): return HRFlowable(width="100%", thickness=1, color=c, spaceAfter=3, spaceBefore=3) # ── Title banner ───────────────────────────────────────────────────────────── title_tbl = Table([ [Paragraph("PTERYGIUM", title_s)], [Paragraph("Quick Reference: Diagnosis & Management", sub_s)], ], colWidths=[W]) title_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), TEAL), ("TOPPADDING", (0,0), (-1,-1), 12), ("BOTTOMPADDING", (0,0), (-1,-1), 10), ("LEFTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS",[4,4,4,4]), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 1 — DEFINITION & PATHOLOGY (2-col) # ══════════════════════════════════════════════════════════════════════════════ def_rows = [ [Paragraph("<b>Definition</b>", bold_s), Paragraph("Triangular fibrovascular sub-epithelial ingrowth of degenerative bulbar conjunctival tissue advancing over the limbus onto the cornea, dissecting into the Bowman layer plane.", body_s)], [Paragraph("<b>Location</b>", bold_s), Paragraph("3-o'clock or 9-o'clock (interpalpebral fissure); usually <b>nasal > temporal</b>; can be bilateral.", body_s)], [Paragraph("<b>Aetiology</b>", bold_s), Paragraph("Chronic <b>UV-B radiation</b> exposure → elastotic degeneration of subepithelial stroma → limbal stem cell dysfunction → conjunctival invasion. Also: dryness, dust, wind, genetic predisposition.", body_s)], [Paragraph("<b>Histology</b>", bold_s), Paragraph("Elastotic degeneration of vascularised subepithelial collagen; fibroblast proliferation; inflammatory infiltrate; overlying epithelial hyperplasia. p53 mutations noted.", body_s)], ] def_tbl = Table(def_rows, colWidths=[2.6*cm, W-2.6*cm]) def_tbl.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 3), ("RIGHTPADDING", (0,0), (-1,-1), 3), ("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, GREY_LT]), ("LINEBELOW", (0,0), (-1,-1), 0.3, GREY_LT), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 2 — ANATOMY OF PTERYGIUM # ══════════════════════════════════════════════════════════════════════════════ anatomy_data = [ [Paragraph("<b>Part</b>", bold_s), Paragraph("<b>Description</b>", bold_s)], [Paragraph("Cap (apex)", body_s), Paragraph("Avascular halo at the advancing edge; contains <b>Fuchs islets</b> (whitish clusters of pterygial epithelial cells)", body_s)], [Paragraph("Head", body_s), Paragraph("Vascularised, elevated zone on the cornea at the limbus; <b>Stocker line</b> (iron deposition) lies anterior to it — suggests slow growth", body_s)], [Paragraph("Body", body_s), Paragraph("Fleshy, triangular, vascularised portion on the bulbar conjunctiva", body_s)], ] anat_tbl = Table(anatomy_data, colWidths=[2.8*cm, W-2.8*cm]) anat_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), TEAL_LIGHT), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, TEAL_LIGHT]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, TEAL_LIGHT), ("BOX", (0,0), (-1,-1), 0.5, TEAL), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 3 — CLINICAL FEATURES (2-column layout: symptoms | signs) # ══════════════════════════════════════════════════════════════════════════════ half = (W - 0.4*cm) / 2 sym_inner = [ [Paragraph("SYMPTOMS", S("sh", fontName="Helvetica-Bold", fontSize=9, textColor=ORANGE, leading=12))] ] syms = [ "Asymptomatic (small lesions)", "Irritation & grittiness (dellen effect)", "Foreign body sensation", "Redness / pterygitis (acute flare)", "Blurred vision — visual axis obscuration", "Corneal astigmatism (with-the-rule)", "Contact lens intolerance", "Cosmetic concern", ] sym_tbl = Table( [[Paragraph("SYMPTOMS", S("sh2", fontName="Helvetica-Bold", fontSize=9, textColor=ORANGE))]] + [[bullet(s)] for s in syms], colWidths=[half] ) sym_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (0,0), ORANGE_LT), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 6), ("BOX", (0,0), (-1,-1), 0.5, ORANGE), ("LINEBELOW", (0,0), (0,0), 1, ORANGE), ])) signs = [ "Wing-shaped fibrovascular fold", "Always at 3 or 9 o'clock position", "Stocker iron line anterior to head", "Fuchs islets at the cap", "Della (localised corneal drying/thinning)", "No corneal thinning beneath lesion", "Restricted ocular motility (severe/recurrent)", ] sign_tbl = Table( [[Paragraph("SIGNS", S("sh3", fontName="Helvetica-Bold", fontSize=9, textColor=TEAL))]] + [[bullet(s)] for s in signs], colWidths=[half] ) sign_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (0,0), TEAL_LIGHT), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 6), ("BOX", (0,0), (-1,-1), 0.5, TEAL), ("LINEBELOW", (0,0), (0,0), 1, TEAL), ])) sym_sign_combined = Table([[sym_tbl, sign_tbl]], colWidths=[half, half], hAlign="LEFT", spaceBefore=0) sym_sign_combined.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING",(0,0), (-1,-1), 0), ("INNERGRID", (0,0), (-1,-1), 0, WHITE), ("COLPADDING", (0,0), (0,-1), 0, 4), ])) # Spacer column trick symsign_outer = Table([[sym_tbl, Spacer(0.4*cm, 1), sign_tbl]], colWidths=[half, 0.4*cm, half]) symsign_outer.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING",(0,0), (-1,-1), 0), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 4 — PTERYGIUM vs PSEUDOPTERYGIUM # ══════════════════════════════════════════════════════════════════════════════ psp_data = [ [Paragraph("<b>Feature</b>", bold_s), Paragraph("<b>True Pterygium</b>", bold_s), Paragraph("<b>Pseudopterygium</b>", bold_s)], [Paragraph("Origin", body_s), Paragraph("Degenerative/UV", body_s), Paragraph("Post-injury (chemical burn, ulcer, trauma, cicatrising conjunctivitis)", body_s)], [Paragraph("Location", body_s), Paragraph("Always horizontal (3 or 9 o'clock)", body_s), Paragraph("Any meridian", body_s)], [Paragraph("Corneal attachment", body_s), Paragraph("Along entire undersurface", body_s), Paragraph("Only at apex (head)", body_s)], [Paragraph("Probe test", body_s), Paragraph("Probe CANNOT pass under limbal area", body_s), Paragraph("Probe CAN pass under lesion at limbus", body_s)], [Paragraph("History", body_s), Paragraph("No inciting event", body_s), Paragraph("Prior acute episode", body_s)], ] cw3 = [2.2*cm, (W-2.2*cm)/2, (W-2.2*cm)/2] psp_tbl = Table(psp_data, colWidths=cw3) psp_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREY_DARK), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_LT]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, GREY_LT), ("BOX", (0,0), (-1,-1), 0.5, GREY_DARK), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 5 — DIFFERENTIAL DIAGNOSIS # ══════════════════════════════════════════════════════════════════════════════ ddx_data = [ [Paragraph("<b>Condition</b>", bold_s), Paragraph("<b>Key Distinguishing Feature</b>", bold_s)], [Paragraph("Pinguecula", body_s), Paragraph("Yellow-white conjunctival deposit ADJACENT to limbus; does NOT extend onto cornea", body_s)], [Paragraph("CIN / OSSN", red_s), Paragraph("Jelly-like / velvety / leukoplakic; not wing-shaped; not always at 3/9 o'clock — <b>BIOPSY required</b>", body_s)], [Paragraph("Pseudopterygium", body_s), Paragraph("History of acute injury; probe passes under at limbus; any meridian", body_s)], [Paragraph("Squamous Cell Ca.", red_s), Paragraph("Irregular, gelatinous, vascularised; elderly Caucasians; biopsy required", body_s)], [Paragraph("Limbal dermoid", body_s), Paragraph("Congenital; rounded white lesion; usually inferotemporal", body_s)], [Paragraph("Episcleritis", body_s), Paragraph("Diffuse or sectoral scleral redness; no corneal tissue ingrowth", body_s)], ] ddx_tbl = Table(ddx_data, colWidths=[3.5*cm, W-3.5*cm]) ddx_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), RED), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, RED_LT]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, RED_LT), ("BOX", (0,0), (-1,-1), 0.5, RED), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 6 — GRADING # ══════════════════════════════════════════════════════════════════════════════ grade_data = [ [Paragraph("<b>Grade</b>", bold_s), Paragraph("<b>Appearance</b>", bold_s), Paragraph("<b>Episcleral Vessels</b>", bold_s)], [Paragraph("1 — Atrophic", body_s), Paragraph("Thin, translucent", body_s), Paragraph("Clearly visible through it", body_s)], [Paragraph("2 — Intermediate", body_s), Paragraph("Partially opaque", body_s), Paragraph("Partially obscured", body_s)], [Paragraph("3 — Fleshy/Active", body_s), Paragraph("Thick, opaque, raised", body_s), Paragraph("Completely obscured", body_s)], ] cw_g = [3*cm, (W-3*cm)/2, (W-3*cm)/2] grade_tbl = Table(grade_data, colWidths=cw_g) grade_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREY_MID), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [GREEN_LT, HexColor("#FFF9C4"), RED_LT]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("BOX", (0,0), (-1,-1), 0.5, GREY_MID), ("LINEBELOW", (0,0), (-1,-1), 0.3, GREY_LT), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 7 — INVESTIGATIONS # ══════════════════════════════════════════════════════════════════════════════ inv_list = [ ("<b>Slit-lamp examination</b>", "Confirms diagnosis; assesses size, vascularity, corneal involvement, Stocker line, dellen"), ("<b>Keratometry / Corneal topography</b>", "Quantifies induced corneal astigmatism"), ("<b>Refraction / Visual acuity</b>", "Baseline and serial monitoring"), ("<b>Excision biopsy (histopathology)</b>", "Recommended for ALL excised specimens — rule out OSSN / SCC / melanoma precursors"), ] inv_data = [[Paragraph(a, bold_s), Paragraph(b, body_s)] for a, b in inv_list] inv_tbl = Table(inv_data, colWidths=[4.5*cm, W-4.5*cm]) inv_tbl.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("ROWBACKGROUNDS",(0,0), (-1,-1), [TEAL_LIGHT, WHITE]), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, TEAL_LIGHT), ("BOX", (0,0), (-1,-1), 0.5, TEAL), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 8 — MANAGEMENT # ══════════════════════════════════════════════════════════════════════════════ # Medical med_data = [ [Paragraph("UV protection", bold_s), Paragraph("UV-blocking sunglasses / goggles — MOST IMPORTANT preventive measure", body_s)], [Paragraph("Lubrication", bold_s), Paragraph("Preservative-free artificial tears 4-8×/day", body_s)], [Paragraph("Mild inflammation", bold_s), Paragraph("Artificial tears QID", body_s)], [Paragraph("Mod–severe inflammation", bold_s), Paragraph("Topical steroid (fluorometholone 0.1% or loteprednol 0.2–0.5% QID) OR NSAID (ketorolac 0.4% QID) OR antihistamine/mast-cell stabiliser (olopatadine, ketotifen)", body_s)], [Paragraph("Dellen", bold_s), Paragraph("Artificial tear ointment every 2 hours", body_s)], ] med_tbl = Table(med_data, colWidths=[3.8*cm, W-3.8*cm]) med_tbl.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("ROWBACKGROUNDS",(0,0), (-1,-1), [WHITE, GREEN_LT]), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, GREEN_LT), ("BOX", (0,0), (-1,-1), 0.5, GREEN), ])) # Surgical indications ind_list = [ "Threatening visual axis", "Significant induced astigmatism", "Excessive irritation unresponsive to medical therapy", "Contact lens interference", "Cosmetic concern", "Pre-cataract or pre-refractive surgery", ] ind_tbl = Table([[bullet(i)] for i in ind_list], colWidths=[W]) ind_tbl.setStyle(TableStyle([ ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 5), ("BACKGROUND", (0,0), (-1,-1), ORANGE_LT), ("BOX", (0,0), (-1,-1), 0.5, ORANGE), ])) # Surgical techniques & recurrence surg_data = [ [Paragraph("<b>Technique</b>", bold_s), Paragraph("<b>Procedure</b>", bold_s), Paragraph("<b>Recurrence</b>", bold_s)], [Paragraph("Bare sclera excision", body_s), Paragraph("Pterygium excised, sclera left bare", body_s), Paragraph("~80% — NOT recommended alone", red_s)], [Paragraph("Conjunctival autograft ✓", green_s), Paragraph("Pterygium excised + superior/upper-temporal conjunctival patch grafted with 10-0 nylon or fibrin glue (TISSEEL)", body_s), Paragraph("~5–15% — PREFERRED", green_s)], [Paragraph("Amniotic membrane graft", body_s), Paragraph("Alternative when conjunctiva insufficient (bilateral disease, prior surgery)", body_s), Paragraph("Similar to autograft", body_s)], [Paragraph("Peripheral lamellar keratoplasty", body_s), Paragraph("For deep lesions with stromal scarring", body_s), Paragraph("N/A", body_s)], ] cw_s = [3.5*cm, W-3.5*cm-2.5*cm, 2.5*cm] surg_tbl = Table(surg_data, colWidths=cw_s) surg_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), GREY_DARK), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, GREY_LT]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, GREY_LT), ("BOX", (0,0), (-1,-1), 0.5, GREY_DARK), ])) # Adjuvants adj_data = [ [Paragraph("<b>Agent</b>", bold_s), Paragraph("<b>Mechanism</b>", bold_s), Paragraph("<b>Notes</b>", bold_s)], [Paragraph("Mitomycin C (MMC)", body_s), Paragraph("Alkylating agent; inhibits fibroblast proliferation & neovascularisation", body_s), Paragraph("Intraoperative application; mainly for recurrent pterygia; risk: corneoscleral thinning/necrosis", body_s)], [Paragraph("Beta-irradiation (Sr-90)", body_s), Paragraph("Inhibits fibroblast proliferation", body_s), Paragraph("Postoperative application; alternative to MMC", body_s)], ] adj_tbl = Table(adj_data, colWidths=[3*cm, (W-3*cm)/2, (W-3*cm)/2]) adj_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), HexColor("#4A148C")), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, HexColor("#F3E5F5")]), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("RIGHTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, HexColor("#F3E5F5")), ("BOX", (0,0), (-1,-1), 0.5, HexColor("#4A148C")), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 9 — KEY CLINICAL PEARLS # ══════════════════════════════════════════════════════════════════════════════ pearls = [ "Stocker line (iron line) anterior to pterygium head = SLOW growth; its absence = active/fast growth", "Probe test distinguishes true pterygium (probe CANNOT pass) from pseudopterygium (probe CAN pass) at the limbus", "Bare sclera excision alone has ~80% recurrence — always combine with conjunctival autograft ± MMC", "Atypical / aggressive / recurrent pterygium → excision biopsy mandatory to exclude OSSN/SCC", "MMC reserved for recurrent cases — increased risk of corneoscleral necrosis", "Advise UV-protective sunglasses to ALL patients — primary prevention and post-surgery recurrence reduction", "Pre-cataract/refractive surgery: remove pterygium first to allow accurate biometry and stable refraction", ] pearl_rows = [[bullet(p, tip_s)] for p in pearls] pearl_tbl = Table(pearl_rows, colWidths=[W]) pearl_tbl.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), HexColor("#F3E5F5")), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("LEFTPADDING", (0,0), (-1,-1), 8), ("BOX", (0,0), (-1,-1), 0.8, HexColor("#4A148C")), ("LINEBELOW", (0,0), (-1,-1), 0.3, HexColor("#E1BEE7")), ])) # ══════════════════════════════════════════════════════════════════════════════ # SECTION 10 — FOLLOW-UP # ══════════════════════════════════════════════════════════════════════════════ fu_data = [ [Paragraph("Asymptomatic / stable", bold_s), Paragraph("Review every 1–2 years", body_s)], [Paragraph("Active / growing", bold_s), Paragraph("Measure and photograph every 3–12 months; monitor approach to visual axis", body_s)], [Paragraph("Topical steroid use", bold_s), Paragraph("Check IOP after a few weeks; taper and stop once inflammation settles", body_s)], [Paragraph("Post-surgery", bold_s), Paragraph("Reinforce UV protection; watch for recurrence (most within 6 months)", body_s)], ] fu_tbl = Table(fu_data, colWidths=[3.8*cm, W-3.8*cm]) fu_tbl.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("ROWBACKGROUNDS",(0,0), (-1,-1), [TEAL_LIGHT, WHITE]), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 5), ("LINEBELOW", (0,0), (-1,-1), 0.3, TEAL_LIGHT), ("BOX", (0,0), (-1,-1), 0.5, TEAL), ])) # ══════════════════════════════════════════════════════════════════════════════ # BUILD STORY # ══════════════════════════════════════════════════════════════════════════════ story = [ title_tbl, spacer(8), sec_header("📌 DEFINITION, AETIOLOGY & PATHOLOGY", TEAL), spacer(3), def_tbl, spacer(8), sec_header("🔬 ANATOMY OF PTERYGIUM — THREE PARTS", ORANGE), spacer(3), anat_tbl, spacer(8), sec_header("🩺 CLINICAL FEATURES", GREEN), spacer(3), symsign_outer, spacer(8), sec_header("⚖️ TRUE PTERYGIUM vs PSEUDOPTERYGIUM", GREY_DARK), spacer(3), psp_tbl, spacer(8), sec_header("🔍 DIFFERENTIAL DIAGNOSIS", RED), spacer(3), ddx_tbl, spacer(8), sec_header("📊 GRADING (CLINICAL)", GREY_MID), spacer(3), grade_tbl, spacer(8), sec_header("🧪 INVESTIGATIONS", TEAL), spacer(3), inv_tbl, spacer(8), sec_header("💊 MANAGEMENT — MEDICAL", GREEN), spacer(3), med_tbl, spacer(8), sec_header("🔪 MANAGEMENT — SURGICAL INDICATIONS", ORANGE), spacer(3), ind_tbl, spacer(8), sec_header("🔪 SURGICAL TECHNIQUES & RECURRENCE RATES", GREY_DARK), spacer(3), surg_tbl, spacer(8), sec_header("⚗️ ADJUVANT ANTI-PROLIFERATIVE AGENTS", HexColor("#4A148C")), spacer(3), adj_tbl, spacer(8), sec_header("💡 KEY CLINICAL PEARLS", HexColor("#4A148C")), spacer(3), pearl_tbl, spacer(8), sec_header("📅 FOLLOW-UP", TEAL), spacer(3), fu_tbl, spacer(10), Paragraph("Sources: Kanski's Clinical Ophthalmology 10th ed. | Wills Eye Manual 8th ed. | Rosen's Emergency Medicine | Robbins & Cotran Pathologic Basis of Disease", foot_s), ] doc.build(story) print("PDF created:", out) EOF
Pterygium Quick Reference
PDF Document · PDF
| Section | Content |
|---|---|
| Definition, Aetiology & Pathology | UV-B, elastotic degeneration, p53 mutations, histology |
| Anatomy | Cap/Head/Body, Stocker line, Fuchs islets |
| Clinical Features | Symptoms vs Signs side-by-side |
| True vs Pseudopterygium | Probe test, location, attachment, history |
| Differential Diagnosis | Pinguecula, CIN/OSSN, SCC, limbal dermoid |
| Grading | Grades 1-3 (atrophic → fleshy) |
| Investigations | Slit-lamp, topography, biopsy |
| Medical Management | UV protection, lubricants, steroids, NSAIDs |
| Surgical Management | Indications, techniques, recurrence rates, adjuvants (MMC, beta-irradiation) |
| Clinical Pearls & Follow-up | Stocker line significance, probe test, MMC caution |