[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

LyX chapter lister

Steve Litt

12/9/2005 10:48:00 PM

Hi all,

The script under my sig is a filter that takes a LyX file from stdin and spits
out the chapters. Right now it doesn't do parts, but it probably will later
on. Perhaps some day it will handle the whole hierchy of
Part/chapter/section/subsection/subsubsection/paragraph/subparagraph.
Consider this version public domain with no warranty.

Steve Litt
http://www.troublesh...
slitt@troubleshooters.com

#!/usr/bin/ruby

### SLURP STDIN
lines = []
while line = gets
lines.push(line.chomp)
end

#### FIND CHAPTER NAMES
temp_lineno = -9999
chapno = 0
chapname = ""
in_chapter = false
lines.each do |line|
if line =~ /^\s*\\layout Chapter/
in_chapter = true
chapname = ""
chapno += 1
# puts "dia startchapter " + line + in_chapter.to_s
elsif in_chapter and line =~ /^\s*\\layout/
printf("%2d: %s\n", chapno, chapname) if chapno > 0
#puts "dia endchapter " + line
in_chapter = false
elsif in_chapter
chapname += (" " + line) unless line =~ /^\s*\\/ or line =~ /^\s*$/
end
end
printf("%2d: %s\n", chapno, chapname) if chapname and chapname != ""




2 Answers

Christian Neukirchen

12/10/2005 7:01:00 PM

0

Steve Litt <slitt@earthlink.net> writes:

> Hi all,
>
> The script under my sig is a filter that takes a LyX file from stdin and spits
> out the chapters. Right now it doesn't do parts, but it probably will later
> on. Perhaps some day it will handle the whole hierchy of
> Part/chapter/section/subsection/subsubsection/paragraph/subparagraph.
> Consider this version public domain with no warranty.
>
> Steve Litt
> http://www.troublesh...
> slitt@troubleshooters.com
>
> #!/usr/bin/ruby
>
> ### SLURP STDIN
> lines = []
> while line = gets
> lines.push(line.chomp)
> end

lines = STDIN.readlines

> #### FIND CHAPTER NAMES
> temp_lineno = -9999
> chapno = 0
> chapname = ""
> in_chapter = false
> lines.each do |line|

# Alternatively, use ARGF.each { |line|

> if line =~ /^\s*\\layout Chapter/
> in_chapter = true
> chapname = ""
> chapno += 1
> # puts "dia startchapter " + line + in_chapter.to_s
> elsif in_chapter and line =~ /^\s*\\layout/
> printf("%2d: %s\n", chapno, chapname) if chapno > 0
> #puts "dia endchapter " + line
> in_chapter = false
> elsif in_chapter
> chapname += (" " + line) unless line =~ /^\s*\\/ or line =~ /^\s*$/

elsif in_chapter && line =~ /^\s*(\\|$)/
chapname << " " << line
end

> end
> end
> printf("%2d: %s\n", chapno, chapname) if chapname and chapname != ""

Also, I'd use puts and #{} instead of printf, but tastes vary. Your
code would be a good example for the flip-flop operator (no religious
wars, please):

if (line =~ /^\s*\\layout Chapter/)..(line =~ /^\s*\\layout/)
if line =~ /^\s*(\\|$)/
chapname << " " << line
end
end

Happy hacking,
--
Christian Neukirchen <chneukirchen@gmail.com> http://chneuk...


Steve Litt

12/10/2005 9:07:00 PM

0

On Saturday 10 December 2005 02:01 pm, Christian Neukirchen wrote:
> Steve Litt <slitt@earthlink.net> writes:

> >
> > #!/usr/bin/ruby
> >
> > ### SLURP STDIN
> > lines = []
> > while line = gets
> > lines.push(line.chomp)
> > end
>
> lines = STDIN.readlines

Thanks, I was looking for something like that.

Steve Litt
http://www.troublesh...
slitt@troubleshooters.com