File indexing completed on 2024-11-10 04:20:13
0001 #!/usr/bin/env ruby 0002 # 0003 # Script for generating a HTML page from Amarok's text ChangeLog 0004 # 0005 # (c) 2005-2006,2009 0006 # Mark Kretschmann <kretschmann@kde.org>, 0007 # Ian Monroe <ian@monroe.nu>, 0008 # Magnus Bergmark <magnus.bergmark@gmail.com> 0009 # License: GPL V2 0010 0011 require 'cgi' 0012 0013 $input = File.new( "ChangeLog", File::RDONLY ) 0014 $output = File.new( "ChangeLog.html", File::CREAT | File::RDWR | File::TRUNC ) 0015 0016 $changelog = CGI::escapeHTML($input.read) 0017 0018 # Remove the vim stuff 0019 $changelog.gsub!(/# vim:.*$/, '') 0020 0021 # Remove whitespace from lines with only whitespace 0022 $changelog.gsub!(/^\s+$/, '') 0023 0024 # Collapse multiple empty lines 0025 $changelog.gsub!(/\n{2,}/, "\n") 0026 0027 # Replace bug number with direct link to bugs.kde.org 0028 $changelog.gsub!(/BR (\d+)/, '<a href="https://bugs.kde.org/show_bug.cgi?id=\\1">\\0</a>') 0029 0030 # Make bullets 0031 bullet_item_regexp = 0032 / 0033 ^\s{3,4} # Start of line and three to four whitespace 0034 \*\s # The actual bullet 0035 ( 0036 [^\n]* # Match everything up to the first newline 0037 (\s{6}[^\n]+)* # Match every following line if its indented 0038 ) 0039 /xm; 0040 0041 $changelog.gsub!(bullet_item_regexp) do |match| 0042 # Remove all the indentation spaces, too 0043 "\t<li>#{$1.gsub(/\s{2,}/, ' ')}</li>" 0044 end 0045 0046 # Beautify heading 0047 $changelog.gsub!(/Amarok ChangeLog\n\=*\n/, "<h1>Amarok ChangeLog</h1>\n") 0048 0049 # Create headers 0050 %w{FEATURES CHANGES BUGFIXES}.each do |header| 0051 $changelog.gsub!("#{header}:\n", "<h3>#{header.capitalize}</h3>") 0052 end 0053 0054 # Format version headers 0055 $changelog.gsub!(/VERSION(.*$)/, '<h2>Version\\1</h2>'); 0056 0057 # Create <ul> and </ul> pairs around the headers 0058 # Lists start after a <h3></h3> and ends with the first other headline 0059 $changelog.gsub!(%r{(</h3>)(.*?)(<h\d>)}m, "\\1\n<ul>\n\\2\n</ul>\n\n\\3") 0060 0061 # Now, we must parse the old syntax. It'll begin with version 1.2.1 0062 old_syntax_marker = "<h2>Version 1.2.1:</h2>" 0063 $changelog.sub!(/(#{old_syntax_marker})(.*)/m) do |old_contents| 0064 # The syntax here is pretty similar to the old lists, but we don't have any nice 0065 # bullet points in the file already. We will instead look at indentation 0066 bullet_item_regexp = 0067 / 0068 ^\s{2} # Start of line and two whitespace 0069 ( 0070 [^\n]* # Match everything up to the first newline 0071 (\s{4}[^\n]+)* # Match every following line if its indented 0072 ) 0073 /xm; 0074 0075 old_contents.gsub!(bullet_item_regexp) do |match| 0076 # Remove all the indentation spaces, too 0077 "\t<li>#{$1.gsub(/\s{2,}/, ' ')}</li>" 0078 end 0079 0080 # We also need to place <ul> and </ul> pairs everywhere 0081 # Lists start after a <h3></h3> and ends with the first other headline or EOF 0082 old_contents.gsub!(%r{(</h2>)(.*?)(<h\d>|\Z)}m, "\\1\n<ul>\n\\2\n</ul>\n\n\\3") 0083 0084 old_contents 0085 end 0086 0087 # Write destination file 0088 $output.write( $changelog ) 0089