+++ /dev/null
-#!/usr/bin/perl -w
-#
-# Sort Correction HTML
-#
-# Sorts input correction HTML. Can also filter out corrections for undesired
-# books.
-#
-# Assumes that corrections appear one per line. Good practice would be to pipe
-# the output of corrtohtml.pl to this function:
-#
-# corrtohtml.pl corrections | sortcorrhtml.pl
-#
-################################################################################
-
-use strict;
-
-my $progName = "sortcorrhtml";
-my $usage = "$progName [options]\n" .
- "\t-b bookcode exclude corrections specified for other books\n" .
- "\t-s strip book tags\n" .
- "\t-v verbose reporting\n";
-
-my $optsProcessed = 0;
-my $bookCode = "";
-my $bookCodeReport = "";
-my $stripBookInfo = 0;
-my $includeUnspecifiedBook = 0;
-my $verbose = 0;
-
-while( $#ARGV > -1 && not $optsProcessed ) {
- my $commandLineItem = shift @ARGV;
- if( $commandLineItem eq "-b" ) {
- $bookCode = shift @ARGV or die $usage;
- }
- elsif( $commandLineItem eq "-s" ) {
- $stripBookInfo = 1;
- }
- elsif( $commandLineItem eq "-v" ) {
- $verbose = 1;
- }
- elsif( $commandLineItem eq "--help" ) {
- print $usage and exit;
- }
- else {
- unshift @ARGV, $commandLineItem;
- $optsProcessed = 1;
- }
-}
-
-if( $verbose ) {
- $bookCodeReport = " [$bookCode]";
-}
-
-my @bookSortOrder = &getBookSortOrder( );
-my @sectSortOrder = &getSectSortOrder( );
-
-my %buckets = ( );
-
-my $corrRegex = qr{^.+?(<!--[[:space:]]*([^-]+?)[[:space:]]*-->)?<a href="([^.]+)[^#]+#([[:digit:]]*)};
-
-my $bookRegex;
-if( $bookCode ne "" ) {
- $bookRegex = qr{^.+?(<!--[[:space:]]*($bookCode)[[:space:]]*-->)<a href="([^.]+).htm};
-}
-
-my $stripRegex;
-if( $bookCode ne "" ) {
- $stripRegex = qr{<!--[[:space:]]*$bookCode[[:space:]]*-->};
-}
-else {
- $stripRegex = qr{<!--[[:space:]]*[^-]+?[[:space:]]*-->};
-}
-
-my @lines = <>;
-my $maxIssue = 0;
-
-foreach my $line (@lines) {
- if( $bookCode ne "" ) {
- ($line =~ m{$bookRegex}) or next; # skip other books
- }
-
- ($line =~ m{$corrRegex}) or die( "Error ($progName)$bookCodeReport: unrecognized correction: $line\n" );
- my( $book, $sect, $issue ) = ($2, $3, $4);
- $book = "unknown" unless defined $book;
- $issue = "unassigned" unless defined $issue && $issue ne "";
- $buckets{$book} = { } unless exists $buckets{$book};
- $buckets{$book}->{$sect} = { } unless exists $buckets{$book}->{$sect};
- $buckets{$book}->{$sect}->{$issue} = [ ] unless exists $buckets{$book}->{$sect}->{$issue};
-
- if( $stripBookInfo ) {
- $line =~ s/$stripRegex//;
- }
-
- if( $issue ne "unassigned" && $issue > $maxIssue ) { $maxIssue = $issue; }
-
- push @{$buckets{$book}->{$sect}->{$issue}}, $line;
-}
-
-foreach my $bookKey (keys %buckets) {
- my $found = 0;
- foreach my $book (@bookSortOrder) {
- if( $bookKey eq $book ) { $found = 1; }
- }
- unless( $found ) { die( "Error ($progName)$bookCodeReport: unknown book code: $bookKey\n" ); }
-
- foreach my $sectKey (keys %{$buckets{$bookKey}}) {
- $found = 0;
- foreach my $sect (@sectSortOrder) {
- if( $sectKey eq $sect ) { $found = 1; }
- }
- unless( $found ) { die( "Error ($progName)$bookCodeReport: unknown section: $sectKey\n" ); }
- }
-}
-
-for( my $i = 0; $i <= $#bookSortOrder; ++$i ) {
- for( my $j = 0; $j <= $#sectSortOrder; ++$j ) {
- for( my $k = 0; $k <= $maxIssue; ++$k ) {
- print @{$buckets{$bookSortOrder[$i]}->{$sectSortOrder[$j]}->{$k}} if exists $buckets{$bookSortOrder[$i]} && exists $buckets{$bookSortOrder[$i]}->{$sectSortOrder[$j]} && exists $buckets{$bookSortOrder[$i]}->{$sectSortOrder[$j]}->{$k};
- }
- while( $#{$buckets{$bookSortOrder[$i]}->{$sectSortOrder[$j]}->{'unassigned'}} > -1 ) {
- print shift @{$buckets{$bookSortOrder[$i]}->{$sectSortOrder[$j]}->{'unassigned'}};
- }
- }
-}
-
-################################################################################
-
-sub getBookSortOrder {
- return qw{
- unknown
- 01fftd
- 02fotw
- 03tcok
- 04tcod
- 05sots
- 06tkot
- 07cd
- 08tjoh
- 09tcof
- 10tdot
- 11tpot
- 12tmod
- 13tplor
- 14tcok
- 15tdc
- 16tlov
- 17tdoi
- 18dotd
- 19wb
- 20tcon
- 21votm
- 22tbos
- 23mh
- 24rw
- 25totw
- 26tfobm
- 27v
- 28thos
- 01gstw
- 02tfc
- 03btng
- 04wotw
- 01hh
- 02smr
- 03toz
- 04cc
- tmc
- rh
- };
-}
-
-sub getSectSortOrder {
- return qw{
- _unknown
- toc
- title
- dedicate
- acknwldg
- coming
- tssf
- gamerulz
- discplnz
- powers
- equipmnt
- cmbtrulz
- lorecrcl
- levels
- imprvdsc
- kaiwisdm
- sage
- numbered
- part1
- sect1
- sect2
- sect3
- sect4
- sect5
- sect6
- sect7
- sect8
- sect9
- sect10
- sect11
- sect12
- sect13
- sect14
- sect15
- sect16
- sect17
- sect18
- sect19
- sect20
- sect21
- sect22
- sect23
- sect24
- sect25
- sect26
- sect27
- sect28
- sect29
- sect30
- sect31
- sect32
- sect33
- sect34
- sect35
- sect36
- sect37
- sect38
- sect39
- sect40
- sect41
- sect42
- sect43
- sect44
- sect45
- sect46
- sect47
- sect48
- sect49
- sect50
- sect51
- sect52
- sect53
- sect54
- sect55
- sect56
- sect57
- sect58
- sect59
- sect60
- sect61
- sect62
- sect63
- sect64
- sect65
- sect66
- sect67
- sect68
- sect69
- sect70
- sect71
- sect72
- sect73
- sect74
- sect75
- sect76
- sect77
- sect78
- sect79
- sect80
- sect81
- sect82
- sect83
- sect84
- sect85
- sect86
- sect87
- sect88
- sect89
- sect90
- sect91
- sect92
- sect93
- sect94
- sect95
- sect96
- sect97
- sect98
- sect99
- sect100
- sect101
- sect102
- sect103
- sect104
- sect105
- sect106
- sect107
- sect108
- sect109
- sect110
- sect111
- sect112
- sect113
- sect114
- sect115
- sect116
- sect117
- sect118
- sect119
- sect120
- sect121
- sect122
- sect123
- sect124
- sect125
- sect126
- sect127
- sect128
- sect129
- sect130
- sect131
- sect132
- sect133
- sect134
- sect135
- sect136
- sect137
- sect138
- sect139
- sect140
- sect141
- sect142
- sect143
- sect144
- sect145
- sect146
- sect147
- sect148
- sect149
- sect150
- sect151
- sect152
- sect153
- sect154
- sect155
- sect156
- sect157
- sect158
- sect159
- sect160
- sect161
- sect162
- sect163
- sect164
- sect165
- sect166
- sect167
- sect168
- sect169
- sect170
- sect171
- sect172
- sect173
- sect174
- sect175
- sect176
- sect177
- sect178
- sect179
- sect180
- sect181
- sect182
- sect183
- sect184
- sect185
- sect186
- sect187
- sect188
- sect189
- sect190
- sect191
- sect192
- sect193
- sect194
- sect195
- sect196
- sect197
- sect198
- sect199
- part2
- sect200
- sect201
- sect202
- sect203
- sect204
- sect205
- sect206
- sect207
- sect208
- sect209
- sect210
- sect211
- sect212
- sect213
- sect214
- sect215
- sect216
- sect217
- sect218
- sect219
- sect220
- sect221
- sect222
- sect223
- sect224
- sect225
- sect226
- sect227
- sect228
- sect229
- sect230
- sect231
- sect232
- sect233
- sect234
- sect235
- sect236
- sect237
- sect238
- sect239
- sect240
- sect241
- sect242
- sect243
- sect244
- sect245
- sect246
- sect247
- sect248
- sect249
- sect250
- sect251
- sect252
- sect253
- sect254
- sect255
- sect256
- sect257
- sect258
- sect259
- sect260
- sect261
- sect262
- sect263
- sect264
- sect265
- sect266
- sect267
- sect268
- sect269
- sect270
- sect271
- sect272
- sect273
- sect274
- sect275
- sect276
- sect277
- sect278
- sect279
- sect280
- sect281
- sect282
- sect283
- sect284
- sect285
- sect286
- sect287
- sect288
- sect289
- sect290
- sect291
- sect292
- sect293
- sect294
- sect295
- sect296
- sect297
- sect298
- sect299
- sect300
- sect301
- sect302
- sect303
- sect304
- sect305
- sect306
- sect307
- sect308
- sect309
- sect310
- sect311
- sect312
- sect313
- sect314
- sect315
- sect316
- sect317
- sect318
- sect319
- sect320
- sect321
- sect322
- sect323
- sect324
- sect325
- sect326
- sect327
- sect328
- sect329
- sect330
- sect331
- sect332
- sect333
- sect334
- sect335
- sect336
- sect337
- sect338
- sect339
- sect340
- sect341
- sect342
- sect343
- sect344
- sect345
- sect346
- sect347
- sect348
- sect349
- sect350
- sect351
- sect352
- sect353
- sect354
- sect355
- sect356
- sect357
- sect358
- sect359
- sect360
- sect361
- sect362
- sect363
- sect364
- sect365
- sect366
- sect367
- sect368
- sect369
- sect370
- sect371
- sect372
- sect373
- sect374
- sect375
- sect376
- sect377
- sect378
- sect379
- sect380
- sect381
- sect382
- sect383
- sect384
- sect385
- sect386
- sect387
- sect388
- sect389
- sect390
- sect391
- sect392
- sect393
- sect394
- sect395
- sect396
- sect397
- sect398
- sect399
- sect400
- ill1
- ill2
- ill3
- ill4
- ill5
- ill6
- ill7
- ill8
- ill9
- ill10
- ill11
- ill12
- ill13
- ill14
- ill15
- ill16
- ill17
- ill18
- ill19
- ill20
- passing
- map
- action
- crsumary
- crtable
- random
- errata
- footnotz
- illstrat
- license
- };
-}