| #!/usr/bin/perl | |
| $n = 0; | |
| $v = 0; | |
| if($ARGV[0] eq "-v") { | |
| $v = 1; | |
| shift @ARGV; | |
| } | |
| if($ARGV[0] eq "-n") { | |
| $n = $ARGV[1]; | |
| shift @ARGV; | |
| shift @ARGV; | |
| } | |
| $n = int(($n+49)/50)*50 - 1; | |
| $file = $ARGV[0]; | |
| @lines = <>; | |
| $linenum = 0; | |
| foreach (@lines) { | |
| $linenum++; | |
| chomp; | |
| s/\s+$//; | |
| if(length() >= 75){ | |
| print STDERR "$file:$linenum: line too long\n"; | |
| } | |
| } | |
| @outlines = (); | |
| $nextout = 0; | |
| for($i=0; $i<@lines; ){ | |
| # Skip leading blank lines. | |
| $i++ while $i<@lines && $lines[$i] =~ /^$/; | |
| last if $i>=@lines; | |
| # If the rest of the file fits, use the whole thing. | |
| if(@lines <= $i+50 && !grep { /PAGEBREAK/ } @lines){ | |
| $breakbefore = @lines; | |
| }else{ | |
| # Find a good next page break; | |
| # Hope for end of function. | |
| # but settle for a blank line (but not first blank line | |
| # in function, which comes after variable declarations). | |
| $breakbefore = $i; | |
| $lastblank = $i; | |
| $sawbrace = 0; | |
| $breaksize = 15; # 15 lines to get to function | |
| for($j=$i; $j<$i+50 && $j < @lines; $j++){ | |
| if($lines[$j] =~ /PAGEBREAK!/){ | |
| $lines[$j] = ""; | |
| $breakbefore = $j; | |
| $breaksize = 100; | |
| last; | |
| } | |
| if($lines[$j] =~ /PAGEBREAK:\s*([0-9]+)/){ | |
| $breaksize = $1; | |
| $breakbefore = $j; | |
| $lines[$j] = ""; | |
| } | |
| if($lines[$j] =~ /^};?$/){ | |
| $breakbefore = $j+1; | |
| $breaksize = 15; | |
| } | |
| if($lines[$j] =~ /^{$/){ | |
| $sawbrace = 1; | |
| } | |
| if($lines[$j] =~ /^$/){ | |
| if($sawbrace){ | |
| $sawbrace = 0; | |
| }else{ | |
| $lastblank = $j; | |
| } | |
| } | |
| } | |
| if($j<@lines && $lines[$j] =~ /^$/){ | |
| $lastblank = $j; | |
| } | |
| # If we are not putting enough on a page, try a blank line. | |
| if($breakbefore - $i < 50 - $breaksize && $lastblank > $breakbefore && $lastblank >= $i+50 - 5){ | |
| if($v){ | |
| print STDERR "breakbefore $breakbefore i $i breaksize $breaksize\n"; | |
| } | |
| $breakbefore = $lastblank; | |
| $breaksize = 5; # only 5 lines to get to blank line | |
| } | |
| # If we are not putting enough on a page, force a full page. | |
| if($breakbefore - $i < 50 - $breaksize && $breakbefore != @lines){ | |
| $breakbefore = $i + 50; | |
| $breakbefore = @lines if @lines < $breakbefore; | |
| } | |
| if($breakbefore < $i+2){ | |
| $breakbefore = $i+2; | |
| } | |
| } | |
| # Emit the page. | |
| $i50 = $i + 50; | |
| for(; $i<$breakbefore; $i++){ | |
| printf "%04d %s\n", ++$n, $lines[$i]; | |
| } | |
| # Finish page | |
| for($j=$i; $j<$i50; $j++){ | |
| printf "%04d \n", ++$n; | |
| } | |
| } | |
Xet Storage Details
- Size:
- 2.32 kB
- Xet hash:
- 0a5f318ed7ec33c3e0055a9922c6a71ec04d0cb1ed1e0b02c75e072c8688d018
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.