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
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
LyX chapter lister
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password