Compare commits

..

6 Commits

2 changed files with 38 additions and 22 deletions

View File

@@ -1,18 +1,38 @@
# Catechism CLI (ccc) # Catechism CLI (ccc)
A command-line tool for querying sections of the Catechism of the Catholic A command-line tool for querying sections of the Catechism of the Catholic
Church by section number. Church from the Vatican's website by section number.
## Usage ## Usage
Before using `ccc` you must first load a cache of where each section is located
on the web.
```bash ```bash
ccc <section_number|range> ccc --load-cache
# or
ccc -l
```
Once loaded you can query any particular section by simply using the section
number.
```console
$ ccc 241
241 For this reason the apostles confess Jesus to be the Word: "In the beginning was the Word, and the Word was with God, and the Word was God"; as "the image of the invisible God"; as the "radiance of the glory of God and the very stamp of his nature".65
```
Alternatively you can also specify a range of sections to query.
```console
$ ccc 232-233
232 Christians are baptized "in the name of the Father and of the Son and of the Holy Spirit"53 Before receiving the sacrament, they respond to a three-part question when asked to confess the Father, the Son and the Spirit: "I do." "The faith of all Christians rests on the Trinity."54
233 Christians are baptized in the name of the Father and of the Son and of the Holy Spirit: not in their names,55 for there is only one God, the almighty Father, his only Son and the Holy Spirit: the Most Holy Trinity.
``` ```
## Dependencies ## Dependencies
The script requires the following Perl modules (all included in standard Perl The script requires the following Perl modules:
distributions):
- `LWP::UserAgent` - For HTTP requests - `LWP::UserAgent` - For HTTP requests
- `JSON::PP` - For JSON parsing - `JSON::PP` - For JSON parsing
@@ -21,6 +41,9 @@ distributions):
- `File::Path` - For creating cache directory structures - `File::Path` - For creating cache directory structures
- `Math::Base36` - For calculating the name of the HTML files - `Math::Base36` - For calculating the name of the HTML files
The `Math::Base36` module is not a part of standard Perl distribuitions, but can
be installed with [cpan](https://www.cpan.org/modules/INSTALL.html).
## Licensing ## Licensing
This project is licensed under the terms & conditions of the Zlib license. See This project is licensed under the terms & conditions of the Zlib license. See

29
ccc
View File

@@ -192,19 +192,20 @@ sub extract_section_numbers {
my @sections; my @sections;
# Find section header numbers with Windows lines # Find section header numbers with Windows lines
while($html =~ /\r\n<[p|P] class=MsoNormal[^>]*>(<i[^>]*>)?(\d{1,4})/g) { while($html =~ /\r\n<[pP] class=MsoNormal[^>]*>(<i[^>]*>)?(\d{1,4})\s+/g) {
push @sections, $2; my $section_num = $2;
push @sections, $section_num;
} }
return @sections; return @sections;
} }
sub fetch_and_display_section { sub fetch_and_display_section {
my ($section_num, $section_info) = @_; my ($section_num, $section_page) = @_;
my $ua = LWP::UserAgent->new(timeout => 10); my $ua = LWP::UserAgent->new(timeout => 10);
my $base_url = 'https://www.vatican.va/archive/ENG0015'; my $base_url = 'https://www.vatican.va/archive/ENG0015';
my $url = "$base_url/$section_info"; my $url = "$base_url/$section_page";
my $response = $ua->get($url); my $response = $ua->get($url);
@@ -214,19 +215,10 @@ sub fetch_and_display_section {
} }
my $content = $response->content; my $content = $response->content;
print_section($content, $section_num);
# Extract the section content
my $section_content = extract_section_content($content, $section_num);
if($section_content) {
print $section_content;
} else {
print STDERR "Error: Could not parse section $section_num\n";
exit 1;
}
} }
sub extract_section_content { sub print_section {
my ($html, $section_num) = @_; my ($html, $section_num) = @_;
# Convert HTML entities # Convert HTML entities
@@ -255,10 +247,11 @@ sub extract_section_content {
# Add line breaks for readability # Add line breaks for readability
$content =~ s/([.!?])\s+(?=[A-Z])/\n\n/g; $content =~ s/([.!?])\s+(?=[A-Z])/\n\n/g;
return "\033[1m$section_num\033[0m $content\n"; print "\033[1m$section_num\033[0m $content\n";
} else {
print STDERR "Error: Could not parse section $section_num\n";
exit 1;
} }
return undef;
} }
sub get_xdg_cache_dir { sub get_xdg_cache_dir {