ascii-chat 0.8.38
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
formatter.c
Go to the documentation of this file.
1
10#include <ascii-chat/options/manpage/formatter.h>
11#include <ascii-chat/common.h>
12#include <ascii-chat/platform/system.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}
void manpage_fmt_write_title(FILE *f, const char *program_name, const char *mode_name, const char *brief_description)
Definition formatter.c:75
void manpage_fmt_write_section(FILE *f, const char *section_name)
Definition formatter.c:28
const char * manpage_fmt_escape_groff(const char *str)
Definition formatter.c:21
void manpage_fmt_write_bold(FILE *f, const char *text)
Definition formatter.c:42
void manpage_fmt_write_tagged_paragraph(FILE *f)
Definition formatter.c:56
void manpage_fmt_write_italic(FILE *f, const char *text)
Definition formatter.c:49
void manpage_fmt_write_blank_line(FILE *f)
Definition formatter.c:35
void manpage_fmt_write_text(FILE *f, const char *text)
Definition formatter.c:63
int safe_snprintf(char *buffer, size_t buffer_size, const char *format,...)
Safe formatted string printing to buffer.
Definition system.c:456
asciichat_error_t platform_localtime(const time_t *timer, struct tm *result)
Definition util.c:48