diff --git a/ascii_bicorder.py b/ascii_bicorder.py index 60e3dec..a3c71d9 100644 --- a/ascii_bicorder.py +++ b/ascii_bicorder.py @@ -56,8 +56,10 @@ def generate_bicorder_text(json_data): lines = [] # First pass: calculate maximum widths for left and right terms + # Also collect all terms for the glossary max_left_width = 0 max_right_width = 0 + glossary_terms = {} # Dictionary to store term: description mappings # Check diagnostic gradients for diagnostic_set in json_data.get("diagnostic", []): @@ -67,6 +69,12 @@ def generate_bicorder_text(json_data): max_left_width = max(max_left_width, len(term_left)) max_right_width = max(max_right_width, len(term_right)) + # Collect terms for glossary + if term_left: + glossary_terms[term_left] = gradient.get("term_left_description", "") + if term_right: + glossary_terms[term_right] = gradient.get("term_right_description", "") + # Check analysis items for analysis_item in json_data.get("analysis", []): term_left = analysis_item.get("term_left", "") @@ -74,6 +82,12 @@ def generate_bicorder_text(json_data): max_left_width = max(max_left_width, len(term_left)) max_right_width = max(max_right_width, len(term_right)) + # Collect terms for glossary + if term_left: + glossary_terms[term_left] = analysis_item.get("term_left_description", "") + if term_right: + glossary_terms[term_right] = analysis_item.get("term_right_description", "") + # Calculate the width needed for centering # Gradient line format: "{left_term} < [|||||||||] > {right_term}" # That's: max_left_width + 3 + 11 + 3 + max_right_width @@ -136,6 +150,31 @@ def generate_bicorder_text(json_data): lines.append("") + # Glossary section + lines.append(center_text("GLOSSARY", center_width)) + lines.append("") + + # Generate pandoc-compatible table + # Sort terms alphabetically (case-insensitive) for consistent output + sorted_terms = sorted(glossary_terms.items(), key=lambda x: x[0].lower()) + + if sorted_terms: + # Calculate column widths for the table + max_term_width = max(len(term) for term, _ in sorted_terms) + max_term_width = max(max_term_width, len("Term")) # At least as wide as header + + # Build the table + # Header row + lines.append(f"| {'Term'.ljust(max_term_width)} | Description |") + # Separator row + lines.append(f"| {'-' * max_term_width} | {'-' * 11} |") + + # Data rows + for term, description in sorted_terms: + lines.append(f"| {term.ljust(max_term_width)} | {description} |") + + lines.append("") + return "\n".join(lines) diff --git a/bicorder.txt b/bicorder.txt index 4acc3f6..b42b104 100644 --- a/bicorder.txt +++ b/bicorder.txt @@ -39,3 +39,60 @@ self-enforcing < [|||||||||] > enforced hardness < [|||||||||] > softness polarized < [|||||||||] > centrist not useful < [|||||||||] > very useful + + GLOSSARY + +| Term | Description | +| -------------- | ----------- | +| abstract | Participants learn the protocol by studying it intellectually | +| alive | Actively utilized by relevant participants | +| centrist | The analyst tended toward readings at the middle of the gradients | +| contested | Content and meaning are disputed or under debate | +| crystallized | Content and meaning are settled and widely agreed upon | +| dead | Not actively utilized by relevant participants | +| defensible | Strong boundaries and protections against external influence | +| documenting | The primary purpose is to document or validate activity that is occurring | +| durable | Designed to be persistently available | +| embodied | Participants learn the protocol by physically practicing it | +| emergent | Produces unexpected or novel outcomes | +| enabling | The primary purpose is to enable activity that might not happen otherwise | +| enforced | Rules require external enforcement by authorities or institutions | +| ephemeral | Designed to vanish when no longer needed | +| exclusion | The protocol creates barriers or excludes certain participants | +| explicit | The design is stated explicitly somewhere that is accessible to participants | +| exposed | Weak boundaries and vulnerable to external influence | +| flocking | Coordination occurs through centralized direction or direct mimicry | +| hardness | The protocol tends toward properties characterized by hardness | +| implicit | The design is not stated explicitly but is learned by participants in another way | +| inclusion | The protocol reduces barriers and includes diverse participants | +| institutional | Design occurs through processes that involve powerful institutions and widespread recognition as normative | +| insufficient | Does not, on its own, adequately meet the needs and goals of participants | +| interpretive | The design is ambiguous, allowing participants a wide range of interpretation | +| Kafka | Fosters experiences of absurd complexity, alienation, and powerlessness | +| macro | Operates at large scales involving many participants or broad scope | +| malleable | Designed to be changed by participants according to evolving needs | +| micro | Operates at small scales with few participants or narrow scope | +| monopolistic | Excludes the use of other protocols that might be available to adopt | +| not useful | The bicorder was not useful or relevant for analyzing this protocol | +| obligatory | Participation is compulsory for a certain class of agents | +| particular | Addressed to a specific community | +| pluralistic | Interoperates with other protocols and does not exclude their use | +| polarized | The analyst tended toward more extreme high or low readings | +| precise | The design is specified with a high level of precision that eliminates ambiguity in implementation | +| predictable | Produces expected and consistent outcomes | +| self-enforcing | Rules are automatically enforced through its own mechanisms | +| social | Primarily concerned with interactions among people or groups | +| softness | The protocol tends toward properties characterized by softness | +| sovereign | A distinctive operating logic, not subject to any other entity | +| static | Designed to be as fixed and unchanging as possible | +| subsidiary | An operating logic under the control of a particular entity | +| sufficient | Adequately meets the needs and goals of participants | +| swarming | Coordination occurs through distributed interactions without central direction | +| technical | Primarily concerned with interactions among technologies | +| trust-evading | Minimizes the need for trust among participants | +| trust-inducing | Relies on or cultivates trust among participants | +| universal | Addressed to a global audience | +| vernacular | Design occurs through evolving, peer-to-peer community interactions in order to suit participant-defined goals | +| very useful | The bicorder was very useful and relevant for analyzing this protocol | +| voluntary | Participation in the protocol is optional and not coerced | +| Whitehead | Enables participants to carry out desired activities with less work or thought |