ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
formatter.c
Go to the documentation of this file.
1
11#include <ascii-chat/common.h>
13#include <stdio.h>
14#include <string.h>
15#include <time.h>
16
17// ============================================================================
18// Escape and Basic Formatting
19// ============================================================================
20
21const char *manpage_fmt_escape_groff(const char *str) {
22 // For simplicity, we'll just return the string as-is
23 // In a more robust implementation, we'd escape special characters
24 // But for man page content, most strings don't have problematic characters
25 return str ? str : "";
26}
27
28void manpage_fmt_write_section(FILE *f, const char *section_name) {
29 if (!f || !section_name) {
30 return;
31 }
32 fprintf(f, ".SH %s\n", section_name);
33}
34
36 if (!f) {
37 return;
38 }
39 fprintf(f, "\n");
40}
41
42void manpage_fmt_write_bold(FILE *f, const char *text) {
43 if (!f || !text) {
44 return;
45 }
46 fprintf(f, ".B %s\n", text);
47}
48
49void manpage_fmt_write_italic(FILE *f, const char *text) {
50 if (!f || !text) {
51 return;
52 }
53 fprintf(f, ".I %s\n", text);
54}
55
57 if (!f) {
58 return;
59 }
60 fprintf(f, ".TP\n");
61}
62
63void manpage_fmt_write_text(FILE *f, const char *text) {
64 if (!f) {
65 return;
66 }
67
68 if (text) {
69 fprintf(f, "%s\n", text);
70 } else {
71 fprintf(f, "\n");
72 }
73}
74
75void manpage_fmt_write_title(FILE *f, const char *program_name, const char *mode_name, const char *brief_description) {
76 if (!f || !program_name || !brief_description) {
77 return;
78 }
79
80 time_t now = time(NULL);
81 struct tm tm_buf;
82 platform_localtime(&now, &tm_buf);
83 char date_str[32];
84 strftime(date_str, sizeof(date_str), "%B %Y", &tm_buf);
85
86 // Build full program name (e.g., "ascii-chat-server" or just "ascii-chat")
87 char full_name[256];
88 if (mode_name) {
89 safe_snprintf(full_name, sizeof(full_name), "%s-%s", program_name, mode_name);
90 } else {
91 safe_snprintf(full_name, sizeof(full_name), "%s", program_name);
92 }
93
94 // .TH NAME SECTION DATE SOURCE MANUAL
95 // Section 1 = user commands, 5 = file formats
96 fprintf(f, ".TH %s 1 \"%s\" \"%s\" \"User Commands\"\n", full_name, date_str, program_name);
97 fprintf(f, ".SH NAME\n");
98 fprintf(f, ".B %s\n", full_name);
99 fprintf(f, "\\- %s\n", manpage_fmt_escape_groff(brief_description));
100 fprintf(f, "\n");
101}
⚙️ Common definitions, error codes, macros, and types shared throughout the application
void manpage_fmt_write_title(FILE *f, const char *program_name, const char *mode_name, const char *brief_description)
Write groff title/header (.TH directive)
Definition formatter.c:75
void manpage_fmt_write_section(FILE *f, const char *section_name)
Write a section header directive.
Definition formatter.c:28
const char * manpage_fmt_escape_groff(const char *str)
Escape special characters for groff output.
Definition formatter.c:21
void manpage_fmt_write_bold(FILE *f, const char *text)
Write text in bold format.
Definition formatter.c:42
void manpage_fmt_write_tagged_paragraph(FILE *f)
Write a tagged paragraph header.
Definition formatter.c:56
void manpage_fmt_write_italic(FILE *f, const char *text)
Write text in italic format.
Definition formatter.c:49
void manpage_fmt_write_blank_line(FILE *f)
Write a blank line (for spacing between sections)
Definition formatter.c:35
void manpage_fmt_write_text(FILE *f, const char *text)
Write plain text line (without directive)
Definition formatter.c:63
Groff/troff formatting utilities for man page generation.
int safe_snprintf(char *buffer, size_t buffer_size, const char *format,...)
Safe formatted string printing to buffer.
Definition system.c:148
asciichat_error_t platform_localtime(const time_t *timer, struct tm *result)
Platform-safe localtime wrapper.
Definition util.c:50
Cross-platform system functions interface for ascii-chat.
⏱️ High-precision timing utilities using sokol_time.h and uthash