Describe pranasta shalya and nirharana upayafrom the above to be written in a university exam of 5 mark essay question
| No. | Method | Description |
|---|---|---|
| 1 | Svabhava (Natural) | Expelled through natural urges - sneezing, coughing, urine, flatus |
| 2 | Pacana (Suppuration) | Medicines applied to induce suppuration; shalya comes out with pus |
| 3 | Bhedana (Incision) | Abscess incised if it does not burst spontaneously |
| 4 | Darana (Lepa application) | Paste of darana group medicines applied to split skin and allow shalya to fall off |
| 5 | Pidana (Pressure/squeezing) | By hand or by pidana group medicines |
| 6 | Pramarjana (Wiping) | Very small particles wiped out with hair or cloth |
| 7 | Nirdhmapana (Blowing) | Medicated powder blown to induce sneezing and expel nasal foreign body |
| 8 | Vamana (Emesis) | Stomach content/foreign body expelled by induced vomiting |
| 9 | Virecana (Purgation) | For rectal foreign body with adhimana and udavarta |
| 10 | Praksalana (Washing) | Small shalyas in wounds washed out by decoction of sodhana medicines |
| 11 | Pratimarsa (Rubbing) | Shalya loosened and evacuated by finger rubbing |
| 12 | Pravahana (Straining) | Forceful straining to expel flatus, urine, feces or fetus |
| 13 | Acusana (Sucking) | Sucking by mouth or shringa (horn) to remove gas, fluids, vitiated milk |
| 14 | Ayaskanta (Magnet) | Iron foreign bodies removed with a magnet |
| 15 | Harsa (Joy/happiness) | For mental shalya (grief/soka located in heart), removed by creating happiness |
Exam tip: This answer covers definition, types, diagnosis, all 15 removal methods, extraction directions, and complications - ideal for a structured 5-mark response. You may shorten the table to 6-8 key methods if word limit is strict.
Create a PDF study guide with all 15 nirharana methods for revision
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace not found"
~/pranasta_shalya_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
OUTPUT = "/home/daytona/workspace/Pranasta_Shalya_Study_Guide.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm
)
# --- Color Palette ---
SAFFRON = colors.HexColor("#D4520A")
DEEP_TEAL = colors.HexColor("#0D5C63")
GOLD = colors.HexColor("#C9A227")
CREAM = colors.HexColor("#FFF8EE")
LIGHT_TEAL= colors.HexColor("#E0F4F5")
DARK_GRAY = colors.HexColor("#2C2C2C")
MID_GRAY = colors.HexColor("#555555")
PALE_SAFFRON = colors.HexColor("#FDEBD0")
styles = getSampleStyleSheet()
# --- Custom Styles ---
title_style = ParagraphStyle(
"MainTitle",
parent=styles["Normal"],
fontSize=22,
textColor=colors.white,
fontName="Helvetica-Bold",
alignment=TA_CENTER,
spaceAfter=4,
leading=28,
)
subtitle_style = ParagraphStyle(
"SubTitle",
parent=styles["Normal"],
fontSize=13,
textColor=GOLD,
fontName="Helvetica-BoldOblique",
alignment=TA_CENTER,
spaceAfter=2,
leading=18,
)
chapter_style = ParagraphStyle(
"ChapterHead",
parent=styles["Normal"],
fontSize=14,
textColor=colors.white,
fontName="Helvetica-Bold",
alignment=TA_CENTER,
spaceAfter=2,
leading=20,
)
section_style = ParagraphStyle(
"SectionHead",
parent=styles["Normal"],
fontSize=12,
textColor=DEEP_TEAL,
fontName="Helvetica-Bold",
spaceBefore=10,
spaceAfter=4,
leading=16,
)
body_style = ParagraphStyle(
"Body",
parent=styles["Normal"],
fontSize=10,
textColor=DARK_GRAY,
fontName="Helvetica",
spaceAfter=4,
leading=15,
alignment=TA_JUSTIFY,
)
bullet_style = ParagraphStyle(
"Bullet",
parent=styles["Normal"],
fontSize=9.5,
textColor=MID_GRAY,
fontName="Helvetica",
leftIndent=14,
spaceAfter=2,
leading=14,
bulletIndent=4,
)
small_bold = ParagraphStyle(
"SmallBold",
parent=styles["Normal"],
fontSize=9,
textColor=DARK_GRAY,
fontName="Helvetica-Bold",
spaceAfter=2,
leading=13,
)
shloka_style = ParagraphStyle(
"Shloka",
parent=styles["Normal"],
fontSize=9,
textColor=DEEP_TEAL,
fontName="Helvetica-Oblique",
alignment=TA_CENTER,
spaceBefore=2,
spaceAfter=4,
leading=13,
)
footer_style = ParagraphStyle(
"Footer",
parent=styles["Normal"],
fontSize=8,
textColor=colors.HexColor("#888888"),
fontName="Helvetica",
alignment=TA_CENTER,
)
# =================== CONTENT ===================
story = []
# ---- COVER BAND ----
cover_data = [[
Paragraph("PRANASTA SHALYA", title_style),
Paragraph("Retained Foreign Body", subtitle_style),
Paragraph("Nirharana Upaya - 15 Methods of Removal", subtitle_style),
Paragraph("Shalya Vijnana | University Revision Guide", ParagraphStyle(
"CoverSub2", parent=styles["Normal"],
fontSize=10, textColor=colors.HexColor("#FFDD99"),
fontName="Helvetica", alignment=TA_CENTER, leading=14
)),
]]
cover_table = Table(cover_data, colWidths=[17*cm])
cover_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_TEAL),
("TOPPADDING", (0,0), (-1,-1), 20),
("BOTTOMPADDING", (0,0), (-1,-1), 20),
("LEFTPADDING", (0,0), (-1,-1), 16),
("RIGHTPADDING", (0,0), (-1,-1), 16),
("ROUNDEDCORNERS", (0,0), (-1,-1), [8,8,8,8]),
]))
story.append(cover_table)
story.append(Spacer(1, 0.4*cm))
# ---- DEFINITION BLOCK ----
def_data = [[
Paragraph("Definition of Shalya", section_style),
Paragraph(
"The word <i>shalya</i> is derived from verbal roots <b>'shal'</b> and <b>'shval'</b> meaning moving fast. "
"Any object that quickly inserts into the body and causes <b>himsa</b> (tissue damage) or pain is <b>shalya</b>. "
"When such a shalya remains retained inside the body, it is termed <b>Pranasta Shalya</b>.",
body_style
),
Paragraph(
"\"Shalyan shaltyashu gachhati vegenaantah shariramanuprashititi shalyan\" (Dalhana Su.Su. 26/3)",
shloka_style
),
]]
def_table = Table(def_data, colWidths=[17*cm])
def_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), CREAM),
("BOX", (0,0), (-1,-1), 1.2, GOLD),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
("RIGHTPADDING", (0,0), (-1,-1), 12),
]))
story.append(def_table)
story.append(Spacer(1, 0.3*cm))
# ---- TYPES OF SHALYA ----
story.append(Paragraph("Types of Shalya", section_style))
types_data = [
[Paragraph("<b>1. Sharirika (Endogenous)</b>", small_bold),
Paragraph("Arising from deformed <i>dosha, dhatu</i> and <i>mala</i>. Examples: teeth, hair, nails, pus, urine, ear wax.", bullet_style)],
[Paragraph("<b>2. Agantuja (Exogenous)</b>", small_bold),
Paragraph("Made of external materials: wood, stones, metals, straws, arrows, etc. that forcefully enter the tissues.", bullet_style)],
]
types_table = Table(types_data, colWidths=[4.5*cm, 12.5*cm])
types_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), LIGHT_TEAL),
("BACKGROUND", (1,0), (1,-1), colors.white),
("BOX", (0,0), (-1,-1), 0.8, DEEP_TEAL),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(types_table)
story.append(Spacer(1, 0.3*cm))
# ---- DIAGNOSIS BLOCK ----
story.append(Paragraph("Diagnosis of Pranasta Shalya", section_style))
diag_rows = [
["Method", "Description"],
["1. History", "Weapon/object type, site of pricking pain, numbness, heaviness, tenderness. Symptoms during coughing, sneezing, belching, urination, defecation indicate FB at that site."],
["2. Physical / Local Examination", "Presence of inflammation, induration and tenderness at a site indicates retained shalya."],
["3. Specific Methods\n(Site-based)", "Skin: Apply ghrita or sandal paste - melts/dries where shalya is.\nMamsa: Oleation + fomentation - inflammation reveals location.\nSira/Dhamani/Snayu: Chariot ride on uneven road.\nBone/Joints: Oleation, fomentation, bandaging, firm pressure (pidana)."],
]
diag_table = Table(diag_rows, colWidths=[4.8*cm, 12.2*cm])
diag_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), SAFFRON),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 10),
("BACKGROUND", (0,1), (0,-1), PALE_SAFFRON),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,1), (-1,-1), 9),
("BOX", (0,0), (-1,-1), 1, SAFFRON),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#DDDDDD")),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(diag_table)
story.append(Spacer(1, 0.4*cm))
# ---- 15 NIRHARANA UPAYA - MAIN TABLE ----
banner_data = [[Paragraph("15 Nirharana Upaya (Methods of Removal of Shalya)", chapter_style)]]
banner_table = Table(banner_data, colWidths=[17*cm])
banner_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), SAFFRON),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 12),
]))
story.append(banner_table)
story.append(Spacer(1, 0.2*cm))
# Reference shloka
story.append(Paragraph(
"Acarya Sushruta described these 15 methods for removal of Anavabaddha (non-embedded/loose) shalya. (Su.Su. 27/4)",
ParagraphStyle("Ref", parent=styles["Normal"], fontSize=9, textColor=MID_GRAY,
fontName="Helvetica-Oblique", alignment=TA_CENTER, spaceAfter=8)
))
methods = [
# No, Sanskrit Name, Meaning, Description, Key Example/Indication
("1", "Svabhava", "Natural Phenomenon",
"Small shalya in external channels expelled through natural urges.",
"Tear, sneezing, coughing, urine, feces, flatus"),
("2", "Pacana", "Suppuration",
"Medicines applied to induce suppuration. As putrefaction occurs, the shalya comes out with the flow of pus and blood or by its own gravity.",
"FB in muscle with no visible suppuration"),
("3", "Bhedana", "Incision",
"In spite of suppuration, if the abscess does not burst spontaneously, it should be incised.",
"Persistent non-rupturing abscess"),
("4", "Darana", "Application of Lepa",
"Paste of darana group medicines applied. After splitting the skin, the shalya falls off. Used when patient is unfit for surgery.",
"Patient unfit for surgical removal"),
("5", "Pidana", "Pressure / Squeezing",
"(A) By hand: Shalya squeezed out through torn skin.\n(B) By medicines: Paste of pidana group medicines applied to expel devitalized tissue/FB.",
"Superficial FB; devitalized tissue as FB"),
("6", "Pramarjana", "Wiping Off",
"Very small foreign bodies, e.g., dust particles, straws, etc., wiped out from the wound with the help of hair or cloth.",
"Dust, fine particles in wound"),
("7", "Nirdhmapana", "Blowing",
"Medicated powder (e.g., kalphala) is blown into the nasal cavity, inducing sneezing, which results in expulsion of FB.",
"Small FB in nasal cavity (wheat grain, maize, gram)"),
("8", "Vamana", "Emesis / Vomiting",
"Denatured food particles or FB in the stomach expelled by induced vomiting. Fingers inserted into throat to induce emesis.",
"FB / denatured food in stomach; stomach wash in poisoning"),
("9", "Virecana", "Purgation",
"For retained feces in rectum as shalya with features of adhimana (abdominal fullness) and udavarta, purgation is given to expel via rectal route. CONTRAINDICATED in intestinal obstruction.",
"Retained feces/flatus in rectum; NOT in intestinal obstruction"),
("10", "Praksalana", "Washing",
"Small shalyas situated in the wound are washed out by decoction of sodhana (purifying) group of medicines.",
"Tiny FB inside wounds"),
("11", "Pratimarsa", "Rubbing",
"Shalya is evacuated after making it loose from its place by rubbing with the fingers.",
"Dry fecal matter in rectum; stuck nasal scum; baby during delivery"),
("12", "Pravahana", "Straining",
"Means straining or forcefully expelling the shalya out. Straining is advised in case of obstructed flatus, urine, feces and fetus.",
"Obstructed flatus, urine, feces, or fetus"),
("13", "Acusana", "Sucking",
"Sucking through the mouth or shringa (horn) is known as acusana. Gas, fluids, poisonous blood and vitiated breast milk are sucked out.",
"Gas, toxic fluids, vitiated breast milk"),
("14", "Ayaskanta", "Magnet",
"Small and visible shalyas made of iron should be expelled out with the help of a magnet.",
"Iron foreign bodies - visible and accessible"),
("15", "Harsa", "Joy / Happiness",
"Used for removal of mental shalya. Mental grief (shoka) caused by various factors, located in the heart as shalya, should be removed by creating joy or happiness.",
"Mental/psychic shalya - grief, sorrow, sadness"),
]
header_row = [
Paragraph("<b>No.</b>", ParagraphStyle("TH", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph("<b>Sanskrit Name</b>", ParagraphStyle("TH", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph("<b>Meaning</b>", ParagraphStyle("TH", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph("<b>Description</b>", ParagraphStyle("TH", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph("<b>Key Indication / Example</b>", ParagraphStyle("TH", parent=styles["Normal"], fontSize=9,
textColor=colors.white, fontName="Helvetica-Bold", alignment=TA_CENTER)),
]
table_rows = [header_row]
alt = False
for m in methods:
bg = colors.HexColor("#F0FBF7") if not alt else colors.white
alt = not alt
row = [
Paragraph(f"<b>{m[0]}</b>", ParagraphStyle("Num", parent=styles["Normal"], fontSize=11,
textColor=SAFFRON, fontName="Helvetica-Bold", alignment=TA_CENTER)),
Paragraph(f"<b>{m[1]}</b>", ParagraphStyle("SN", parent=styles["Normal"], fontSize=9.5,
textColor=DEEP_TEAL, fontName="Helvetica-Bold")),
Paragraph(m[2], ParagraphStyle("Mn", parent=styles["Normal"], fontSize=9,
textColor=MID_GRAY, fontName="Helvetica-Oblique")),
Paragraph(m[3], ParagraphStyle("Desc", parent=styles["Normal"], fontSize=9,
textColor=DARK_GRAY, fontName="Helvetica", leading=13)),
Paragraph(m[4], ParagraphStyle("Ind", parent=styles["Normal"], fontSize=8.5,
textColor=colors.HexColor("#4A4A4A"), fontName="Helvetica", leading=12)),
]
table_rows.append(row)
main_table = Table(table_rows, colWidths=[1.1*cm, 2.8*cm, 2.8*cm, 6.5*cm, 3.8*cm])
main_table.setStyle(TableStyle([
# Header
("BACKGROUND", (0,0), (-1,0), DEEP_TEAL),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 9),
("ALIGN", (0,0), (-1,0), "CENTER"),
("VALIGN", (0,0), (-1,0), "MIDDLE"),
("TOPPADDING", (0,0), (-1,0), 8),
("BOTTOMPADDING", (0,0), (-1,0), 8),
# Alternating rows
("BACKGROUND", (0,1), (-1,1), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,2), (-1,2), colors.white),
("BACKGROUND", (0,3), (-1,3), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,4), (-1,4), colors.white),
("BACKGROUND", (0,5), (-1,5), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,6), (-1,6), colors.white),
("BACKGROUND", (0,7), (-1,7), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,8), (-1,8), colors.white),
("BACKGROUND", (0,9), (-1,9), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,10), (-1,10), colors.white),
("BACKGROUND", (0,11), (-1,11), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,12), (-1,12), colors.white),
("BACKGROUND", (0,13), (-1,13), colors.HexColor("#E8F6F3")),
("BACKGROUND", (0,14), (-1,14), colors.white),
("BACKGROUND", (0,15), (-1,15), colors.HexColor("#E8F6F3")),
# Grid
("BOX", (0,0), (-1,-1), 1.2, DEEP_TEAL),
("INNERGRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CCCCCC")),
# Padding
("TOPPADDING", (0,1), (-1,-1), 5),
("BOTTOMPADDING", (0,1), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,1), (0,-1), "CENTER"),
("VALIGN", (0,1), (0,-1), "MIDDLE"),
]))
story.append(main_table)
story.append(Spacer(1, 0.5*cm))
# ---- EXTRACTION METHODS BLOCK ----
ext_banner = [[Paragraph("Methods of Extraction Based on Direction", chapter_style)]]
ext_banner_t = Table(ext_banner, colWidths=[17*cm])
ext_banner_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DEEP_TEAL),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
]))
story.append(ext_banner_t)
story.append(Spacer(1, 0.2*cm))
ext_rows = [
[Paragraph("<b>Method</b>", small_bold), Paragraph("<b>Description</b>", small_bold), Paragraph("<b>Indication</b>", small_bold)],
[Paragraph("<b>Pratiloma</b>\n(Extraction in opposite direction)", ParagraphStyle("PN", parent=styles["Normal"], fontSize=9.5, textColor=SAFFRON, fontName="Helvetica-Bold", leading=13)),
Paragraph("Shalya extracted through the wound entrance - the same way it entered.", body_style),
Paragraph("Shalyas NOT deeply embedded. Also used for shalya in kukshi (abdomen), vaksa (thorax), kaksa (axilla), vankshana (groin) and intercostal spaces.", bullet_style)],
[Paragraph("<b>Anuloma</b>\n(Extraction in same direction of entry)", ParagraphStyle("AN", parent=styles["Normal"], fontSize=9.5, textColor=SAFFRON, fontName="Helvetica-Bold", leading=13)),
Paragraph("Shalya extracted from the opposite side to its entrance, in the direction of its entry.", body_style),
Paragraph("Shalyas deeply embedded in tissues.", bullet_style)],
]
ext_table = Table(ext_rows, colWidths=[3.8*cm, 7*cm, 6.2*cm])
ext_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), SAFFRON),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("BOX", (0,0), (-1,-1), 1, SAFFRON),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#DDDDDD")),
("BACKGROUND", (0,1), (-1,1), PALE_SAFFRON),
("BACKGROUND", (0,2), (-1,2), colors.white),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(ext_table)
story.append(Spacer(1, 0.4*cm))
# ---- INSTRUMENTS ----
story.append(Paragraph("Instruments for Extraction", section_style))
instr_data = [
[Paragraph("<b>Simhamukha Yantra</b>", small_bold),
Paragraph("Used for visible shalya (foreign bodies) in superficial structures.", bullet_style)],
[Paragraph("<b>Kankamukha Yantra</b>", small_bold),
Paragraph("Used for shalya located in deeper structures.", bullet_style)],
[Paragraph("<b>Shalaka (rod)</b>", small_bold),
Paragraph("Used to free shalya entrapped by vessels (sira) and ligaments (snayu).", bullet_style)],
]
instr_table = Table(instr_data, colWidths=[5*cm, 12*cm])
instr_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), LIGHT_TEAL),
("BACKGROUND", (1,0), (1,-1), colors.white),
("BOX", (0,0), (-1,-1), 0.8, DEEP_TEAL),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(instr_table)
story.append(Spacer(1, 0.4*cm))
# ---- COMPLICATIONS ----
story.append(Paragraph("Complications if Shalya is Not Removed", section_style))
story.append(Paragraph(
"\"Shotha-paka-rujashchograah kuryaacchhalyamnaahritam | Vaikalam maranam chaapi "
"tasmaadyatlaadinirharet\" (Su.Su. 27/26)",
shloka_style
))
comp_data = [
["Sotha", "Inflammation"],
["Paka", "Suppuration"],
["Vaikalya", "Deformity"],
["Severe Pain", "Intense, unrelenting pain at site"],
["Marana", "Death (in severe cases)"],
]
comp_table = Table(comp_data, colWidths=[4*cm, 13*cm])
comp_table.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,-1), PALE_SAFFRON),
("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 9),
("BOX", (0,0), (-1,-1), 1, SAFFRON),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#DDDDDD")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(comp_table)
story.append(Spacer(1, 0.4*cm))
# ---- NISHALYA FEATURES ----
story.append(Paragraph("Features of Nishalya (Successful Removal - Free from FB)", section_style))
nishalya = [
"Very mild pain",
"Absence of inflammation",
"No painful movements of the affected part",
"No further complications",
"Patient looks happy",
"Wound margins are neither hard nor elevated",
"Examination with a probe cannot detect any part of shalya",
"Unrestricted extension and flexion of the neighbouring joints",
]
for item in nishalya:
story.append(Paragraph(f"• {item}", bullet_style))
story.append(Spacer(1, 0.4*cm))
# ---- QUICK RECALL BOX ----
recall_banner = [[Paragraph("Quick Recall: The 15 Methods at a Glance", chapter_style)]]
recall_banner_t = Table(recall_banner, colWidths=[17*cm])
recall_banner_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), GOLD),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 12),
]))
story.append(recall_banner_t)
story.append(Spacer(1, 0.2*cm))
# Mnemonic-style 3-column layout
recall_items = [
("1", "Svabhava", "Natural expulsion"),
("2", "Pacana", "Suppuration"),
("3", "Bhedana", "Incision"),
("4", "Darana", "Lepa/Paste"),
("5", "Pidana", "Squeezing"),
("6", "Pramarjana", "Wiping"),
("7", "Nirdhmapana", "Blowing"),
("8", "Vamana", "Emesis"),
("9", "Virecana", "Purgation"),
("10", "Praksalana", "Washing"),
("11", "Pratimarsa", "Rubbing"),
("12", "Pravahana", "Straining"),
("13", "Acusana", "Sucking"),
("14", "Ayaskanta", "Magnet"),
("15", "Harsa", "Joy/Happiness"),
]
recall_rows = []
# 5 rows x 3 columns (each column has No + Name + Meaning)
for i in range(0, 15, 3):
row = []
for j in range(3):
if i + j < 15:
it = recall_items[i+j]
row.append(Paragraph(
f"<b>{it[0]}. {it[1]}</b><br/><font size='8' color='#555555'>{it[2]}</font>",
ParagraphStyle("RC", parent=styles["Normal"], fontSize=9.5, fontName="Helvetica-Bold",
textColor=DEEP_TEAL, leading=14, alignment=TA_CENTER)
))
else:
row.append(Paragraph("", body_style))
recall_rows.append(row)
recall_table = Table(recall_rows, colWidths=[5.67*cm, 5.67*cm, 5.67*cm])
recall_table.setStyle(TableStyle([
("BOX", (0,0), (-1,-1), 1, GOLD),
("INNERGRID", (0,0), (-1,-1), 0.5, colors.HexColor("#E0D0A0")),
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FFFBEE")),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("ALIGN", (0,0), (-1,-1), "CENTER"),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(recall_table)
story.append(Spacer(1, 0.5*cm))
# ---- FOOTER ----
story.append(HRFlowable(width="100%", thickness=1, color=DEEP_TEAL))
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
"Pranasta Shalya Study Guide | Based on Shalya Vijnana (Illustrated) | Reference: Su.Su. 26-27 | For University Revision",
footer_style
))
# ---- BUILD ----
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace && python pranasta_shalya_pdf.py
ls -lh /home/daytona/workspace/Pranasta_Shalya_Study_Guide.pdf
Pranasta Shalya Study Guide
PDF Document · PDF