| xf.li | 6c8fc1e | 2023-08-12 00:11:09 -0700 | [diff] [blame] | 1 | #!/usr/bin/env perl | 
|  | 2 | #*************************************************************************** | 
|  | 3 | #                                  _   _ ____  _ | 
|  | 4 | #  Project                     ___| | | |  _ \| | | 
|  | 5 | #                             / __| | | | |_) | | | 
|  | 6 | #                            | (__| |_| |  _ <| |___ | 
|  | 7 | #                             \___|\___/|_| \_\_____| | 
|  | 8 | # | 
|  | 9 | # Copyright (C) 2016 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al. | 
|  | 10 | # | 
|  | 11 | # This software is licensed as described in the file COPYING, which | 
|  | 12 | # you should have received as part of this distribution. The terms | 
|  | 13 | # are also available at https://curl.se/docs/copyright.html. | 
|  | 14 | # | 
|  | 15 | # You may opt to use, copy, modify, merge, publish, distribute and/or sell | 
|  | 16 | # copies of the Software, and permit persons to whom the Software is | 
|  | 17 | # furnished to do so, under the terms of the COPYING file. | 
|  | 18 | # | 
|  | 19 | # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | 
|  | 20 | # KIND, either express or implied. | 
|  | 21 | # | 
|  | 22 | # SPDX-License-Identifier: curl | 
|  | 23 | # | 
|  | 24 | ########################################################################### | 
|  | 25 |  | 
|  | 26 | my $root=$ARGV[0] || ".."; | 
|  | 27 |  | 
|  | 28 | my @m = `git ls-files -- $root`; | 
|  | 29 |  | 
|  | 30 | my $errors; | 
|  | 31 |  | 
|  | 32 | my %accepted=('curl' => 1, | 
|  | 33 | 'libcurl' => 1); | 
|  | 34 |  | 
|  | 35 | sub checkfile { | 
|  | 36 | my ($f) = @_; | 
|  | 37 | chomp $f; | 
|  | 38 | if($f !~ /\.md\z/) { | 
|  | 39 | return; | 
|  | 40 | } | 
|  | 41 | open(F, "<$f"); | 
|  | 42 | my $l = 1; | 
|  | 43 | my $prevl; | 
|  | 44 | my $ignore = 0; | 
|  | 45 | while(<F>) { | 
|  | 46 | my $line = $_; | 
|  | 47 | chomp $line; | 
|  | 48 | if($line =~ /^(\`\`\`|\~\~\~)/) { | 
|  | 49 | # start or stop ignore-mode | 
|  | 50 | $ignore ^= 1; | 
|  | 51 | } | 
|  | 52 | if(!$ignore) { | 
|  | 53 | if(($prevl =~ /\.\z/) && ($line =~ /^( *)([a-z]+)/)) { | 
|  | 54 | my ($prefix, $word) = ($1, $2); | 
|  | 55 | if(!$accepted{$word}) { | 
|  | 56 | my $c = length($prefix); | 
|  | 57 | print STDERR | 
|  | 58 | "$f:$l:$c:error: lowercase $word after period\n"; | 
|  | 59 | print STDERR "$line\n"; | 
|  | 60 | print STDERR ' ' x $c; | 
|  | 61 | print STDERR "^\n"; | 
|  | 62 | $errors++; | 
|  | 63 | } | 
|  | 64 | } | 
|  | 65 | elsif($line =~ /^(.*)\. +([a-z]+)/) { | 
|  | 66 | my ($prefix, $word) = ($1, $2); | 
|  | 67 |  | 
|  | 68 | if(($prefix =~ /\.\.\z/) || | 
|  | 69 | ($prefix =~ /[0-9]\z/) || | 
|  | 70 | ($prefix =~ /e.g\z/) || | 
|  | 71 | ($prefix =~ /i.e\z/) || | 
|  | 72 | ($prefix =~ /etc\z/) || | 
|  | 73 | $accepted{$word}) { | 
|  | 74 | } | 
|  | 75 | else { | 
|  | 76 | my $c = length($prefix) + 2; | 
|  | 77 | print STDERR | 
|  | 78 | "$f:$l:$c:error: lowercase $word after period\n"; | 
|  | 79 | print STDERR "$line\n"; | 
|  | 80 | print STDERR ' ' x $c; | 
|  | 81 | print STDERR "^\n"; | 
|  | 82 | $errors++; | 
|  | 83 | } | 
|  | 84 | } | 
|  | 85 | } | 
|  | 86 | $prevl = $line; | 
|  | 87 | $l++; | 
|  | 88 | } | 
|  | 89 | close(F); | 
|  | 90 | } | 
|  | 91 |  | 
|  | 92 |  | 
|  | 93 | for my $f (@m) { | 
|  | 94 | checkfile($f); | 
|  | 95 | } | 
|  | 96 |  | 
|  | 97 | if($errors) { | 
|  | 98 | exit 1; | 
|  | 99 | } | 
|  | 100 | print "ok\n"; |