my eye
*Gene Sharp, The Methods of Nonviolent Action, Boston 1973*

$ method_types = {
$   "Nonviolent Protest and Persuasion": {
$     "Formal Statements": (
$       "Public speeches",
$       "Letters of opposition or support",
$       "Declarations by organizations and institutions",
$       "Signed public declarations",
$       "Declarations of indictment and intention",
$       "Group or mass petitions"
$     ),
$     "Communications With a Wider Audience": (
$       "Slogans, caricatures, and symbols",
$       "Banners, posters, and displayed communications",
$       "Leaflets, pamphlets, and books",
$       "Newspapers and journals",
$       "Records, radio, and television",
$       "Skywriting and earthwriting"
$     ),
$     "Group Representations": (
$       "Deputations",
$       "Mock awards",
$       "Group lobbying",
$       "Picketing",
$       "Mock elections"
$     ),
$     "Symbolic Public Acts": (
$       "Displays of flags and symbolic colours",
$       "Wearing of symbols",
$       "Prayer and worship",
$       "Delivering symbolic objects",
$       "Protest disrobings",
$       "Destruction of own property",
$       "Symbolic lights",
$       "Displays of portraits",
$       "Paint as protest",
$       "New signs and names",
$       "Symbolic sounds",
$       "Symbolic reclamations",
$       "Rude gestures"
$     ),
$     "Pressures on Individuals": (
$       '"Haunting" officials',
$       "Taunting officials",
$       "Fraternization",
$       "Vigils"
$     ),
$     "Drama and Music": (
$       "Humourous skits and pranks",
$       "Performances of plays and music",
$       "Singing"
$     ),
$     "Processions": (
$       "Marches",
$       "Parades",
$       "Religious processions",
$       "Pilgrimages",
$       "Motorcades"
$     ),
$     "Honouring the Dead": (
$       "Political mourning",
$       "Mock funerals",
$       "Demonstrative funerals",
$       "Homage at burial places"
$     ),
$     "Public Assemblies": (
$       "Assemblies of protest or support",
$       "Protest meetings",
$       "Camouflaged meetings of protest",
$       "Teach-ins"
$     ),
$     "Withdrawal and Renunciation": (
$       "Walk-outs",
$       "Silence",
$       "Renouncing honours",
$       "Turning one's back"
$     )
$   },
$   "Social Noncooperation": {
$     "Ostracism of Persons": (
$       "Social boycott",
$       "Selective social boycott",
$       "Lysistratic nonaction",
$       "Excommunication",
$       "Interdict"
$     ),
$     "Noncooperation with Social Events, Customs and Institutions": (
$       "Suspension of social and sports activities",
$       "Boycott of social affairs",
$       "Student strike",
$       "Social disobedience",
$       "Withdrawal from social institutions"
$     ),
$     "Withdrawal from the Social System": (
$       "Stay-at-home",
$       "Total personal noncooperation",
$       '"Flight" of workers',
$       "Sanctuary",
$       "Collective disappearance",
$       "Protest emigration (hijrat)"
$     )
$   },
$   "Economic Noncooperation: Economic Boycotts": {
$     "Action by Consumers": (
$       "Consumers' boycott",
$       "Nonconsumption of boycotted goods",
$       "Policy of austerity",
$       "Rent withholding",
$       "Refusal to rent",
$       "National consumers' boycott",
$       "International consumers' boycott",
$     ),
$     "Action by Workers and Producers": (
$       "Workers' boycott",
$       "Producers' boycott"
$     ),
$     "Action by Middlemen": (
$       "Suppliers' and handlers' boycott",
$     ),
$     "Action by Owners and Management": (
$       "Traders' boycott",
$       "Refusal to let or sell property",
$       "Lockout",
$       "Refusal of industrial assistance",
$       '''Merchants' "general strike"'''
$     ),
$     "Action by Holders of Financial Resources": (
$       "Withdrawal of bank deposits",
$       "Refusal to pay fees, dues, and assessments",
$       "Refusal to pay debts or interest",
$       "Severance of funds and credit",
$       "Revenue refusal",
$       "Refusal of a government's money"
$     ),
$     "Action by Governments": (
$       "Domestic embargo",
$       "Blacklisting of traders",
$       "International sellers' embargo",
$       "International buyers' embargo",
$       "International trade embargo"
$     )
$   },
$   "Economic Noncooperation: The Strike": {
$     "Symbolic Strikes": (
$       "Protest strike",
$       "Quickie walkout (lightning strike)"
$     ),
$     "Agricultural Strikes": (
$       "Peasant strike",
$       "Farm workers' strike"
$     ),
$     "Strikes by Special Groups": (
$       "Refusal of impressed labour",
$       "Prisoners' strike",
$       "Craft strike",
$       "Professional strike"
$     ),
$     "Ordinary Industrial Strikes": (
$       "Establishment strike",
$       "Industry strike",
$       "Sympathy strike"
$     ),
$     "Restricted Strikes": (
$       "Detailed strike",
$       "Bumper strike",
$       "Slowdown strike",
$       "Working-to-rule strike",
$       'Reporting "sick" (sick-in)',
$       "Strike by resignation",
$       "Limited strike",
$       "Selective strike"
$     ),
$     "Multi-Industry Strikes": (
$       "Generalised strike",
$       "General strike"
$     ),
$     "Combination of Strikes and Economic Closures": (
$       "Hartal",
$       "Economic shutdown"
$     )
$   },
$   "Political Noncooperation": {
$     "Rejection of Authority": (
$       "Withholding or withdrawal of allegiance",
$       "Refusal of public support",
$       "Literature and speeches advocating resistance"
$     ),
$     "Citizens' Noncooperation with Government": (
$       "Boycott of legislative bodies",
$       "Boycott of elections",
$       "Boycott of government employment and positions",
$       "Boycott of government departments, agencies, and other bodies",
$       "Withdrawal from governmental educational institutions",
$       "Boycott of government-supported institutions",
$       "Refusal of assistance to enforcement agents",
$       "Removal of own signs and placemarks",
$       "Refusal to accept appointed officials",
$       "Refusal to dissolve existing institutions"
$     ),
$     "Citizens' Alternatives to Obedience": (
$       "Reluctant and slow compliance",
$       "Nonobedience in absence of direct supervision",
$       "Popular nonobedience",
$       "Disguised disobedience",
$       "Refusal of an assemblage or meeting to disperse",
$       "Sitdown",
$       "Noncooperation with conscription and deportation",
$       "Hiding, escape, and false identities",
$       'Civil disobedience of "illegitimate" laws'
$     ),
$     "Action by Government Personnel": (
$       "Selective refusal of assistance by government aides",
$       "Blocking of lines of command and information",
$       "Stalling and obstruction",
$       "General administrative noncooperation",
$       "Judicial noncooperation",
$       "Deliberate inefficiency and selective noncooperation by enforcement agents",
$       "Mutiny"
$     ),
$     "Domestic Governmental Action": (
$       "Quasi-legal evasions and delays",
$       "Noncooperation by constituent governmental units"
$     ),
$     "International Governmental Action": (
$       "Changes in diplomatic and other representation",
$       "Delay and cancellation of diplomatic events",
$       "Withholding of diplomatic recognition",
$       "Severance of diplomatic relations",
$       "Withdrawal from international organisations",
$       "Refusal of membership in international bodies",
$       "Expulsion from international organisations"
$     )
$   },
$   "Nonviolent Intervention": {
$     "Psychological Intervention": (
$       "Self-exposure to the elements",
$       ("The fast", (
$         "Fast of moral pressure",
$         "Hunger strike",
$         "Satyagrahic fast"
$       )),
$       "Reverse trial",
$       "Nonviolent harassment"
$     ),
$     "Physical Intervention": (
$       "Sit-in",
$       "Stand-in",
$       "Ride-in",
$       "Wade-in",
$       "Mill-in",
$       "Pray-in",
$       "Nonviolent raids",
$       "Nonviolent air raids",
$       "Nonviolent invasion",
$       "Nonviolent interjection",
$       "Nonviolent obstruction",
$       "Nonviolent occupation"
$     ),
$     "Social Intervention": (
$       "Establishing new social patterns",
$       "Overloading of facilities",
$       "Stall-in",
$       "Speak-in",
$       "Guerrilla theatre",
$       "Alternative social institutions",
$       "Alternative communication system"
$     ),
$     "Economic Intervention": (
$       "Reverse strike",
$       "Stay-in strike",
$       "Nonviolent land seizure",
$       "Defiance of blockades",
$       "Politically motivated counterfeiting",
$       "Preclusive purchasing",
$       "Seizure of assets",
$       "Dumping",
$       "Selective patronage",
$       "Alternative markets",
$       "Alternative transportation systems",
$       "Alternative economic institutions"
$     ),
$     "Political Intervention": (
$       "Overloading of administrative systems",
$       "Disclosing identities of secret agents",
$       "Seeking imprisonment",
$       'Civil disobedience of "neutral" laws',
$       "Work-on without collaboration",
$       "Dual sovereignty and parallel government"
$     )
$   }
$ }

---

-   [Nonviolent Protest and Persuasion](#the-methods-of-nonviolent-protest-and-persuasion)
-   Noncooperation

    -   [Social](#the-methods-of-social-noncooperation)
    -   Economic
    
        -   [Boycott](#the-methods-of-economic-noncooperation:-economic-boycotts)
        -   [Strike](#the-methods-of-economic-noncooperation:-the-strike)
    -   [Political](#the-methods-of-political-noncooperation)
-   [Nonviolent Intervention](#the-methods-of-nonviolent-intervention)

$# $def render_subtypes(method_subtypes):
$#     <ul style=font-size:.8em>
$#     $for method_subtype, methods in method_subtypes.items():
$#         <li>[$method_subtype](#$method_subtype.lower().replace(" ", "-"))</li>
$#     </ul>
$# <ul>
$# $for method_type, method_subtypes in method_types.items():
$#     <li>[$method_type](#the-methods-of-$method_type.lower().replace(" ", "-"))
$#     $# $:render_subtypes(method_subtypes)
$#    </li>
$# </ul>

---

$ n = 1
$for method_type, method_subtypes in method_types.items():
    $ id = f'the-methods-of-{method_type.lower().replace(" ", "-")}'
    <h2 id=$id>The Methods of $method_type [#](#$id)</h2>
    $for method_subtype, methods in method_subtypes.items():
        $ id = method_subtype.lower().replace(" ", "-")
        <h3 id=$id>$method_subtype [#](#$id)</h3>
        <ol start=$n>
        $for method in methods:
            <li>\
            $if isinstance(method, str):
                $method\
            $else:
                $method[0]
                <ol style=list-style-type:lower-alpha>
                $for method_subsubtype in method[1]:
                    <li>$method_subsubtype</li>
                </ol>
            </li>
            $ n = n + 1
        </ol>