Changeset 647

Show
Ignore:
Timestamp:
01/21/08 17:57:41 (11 months ago)
Author:
singpoly..@gmail.com
Message:

Better header parsing for compiler

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/compiler/xpi-build/gm2xpi.rb

    r646 r647  
    33class GreasemonkeyScript 
    44 
    5         def name 
    6                 @name 
    7         end 
    8         def namespace 
    9                 @namespace 
    10         end 
    11         def description 
    12                 @description 
    13         end 
    14         def includes 
    15                 @includes 
    16         end 
    17         def excludes 
    18                 @excludes 
    19         end 
    20         def requires 
    21                 @requires 
    22         end 
     5        attr_reader :name, :namespace, :description, :includes, :excludes, :requires, :resources 
    236 
    247        def initialize(path) 
     
    3013                @excludes = [] 
    3114                @requires = [] 
     15                @resources = [] 
    3216 
    3317                File.open(path, "r") do |infile| 
    3418                    while (line = infile.gets) 
    35                                 @name = line.scan(/@name[\s]+(.*)$/)[0][0].chomp if line =~ /@name[\s]+.*$/ 
    36                                 @namespace = line.scan(/@namespace[\s]+(.*)$/)[0][0].chomp if line =~ /@namespace[\s]+.*$/ 
    37                                 @description = line.scan(/@description[\s]+(.*)$/)[0][0].chomp if line =~ /@description[\s]+.*$/ 
    38                                 @includes.push line.scan(/@include[\s]+(.*)$/)[0][0].chomp if line =~ /@include[\s]+.*$/ 
    39                                 @excludes.push line.scan(/@exclude[\s]+(.*)$/)[0][0].chomp if line =~ /@exclude[\s]+.*$/ 
    40                                 @requires.push line.scan(/@require[\s]+(.*)$/)[0][0].chomp if line =~ /@require[\s]+.*$/ 
    41                                 break if line =~ /\/\/ ==\/UserScript==/ 
     19                                @name = line.scan(/^\/\/ @name[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @name[\s]+.*$/ 
     20                                @namespace = line.scan(/^\/\/ @namespace[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @namespace[\s]+.*$/ 
     21                                @description = line.scan(/^\/\/ @description[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @description[\s]+.*$/ 
     22                                @includes.push line.scan(/^\/\/ @include[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @include[\s]+.*$/ 
     23                                @excludes.push line.scan(/^\/\/ @exclude[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @exclude[\s]+.*$/ 
     24                                @requires.push line.scan(/^\/\/ @require[\s]+(.*)$/)[0][0].chomp if line =~ /^\/\/ @require[\s]+.*$/ 
     25                                @resources.push({:name => line.scan(/^\/\/ @resource[\s]+(.*?)[\s]+.*$/)[0][0].chomp, :filename => line.scan(/^\/\/ @resource[\s]+.*?[\s]+(.*)$/)[0][0].chomp}) if line =~ /^\/\/ @resource[\s]+.*$/ 
     26                                break if line =~ /^\/\/ ==\/UserScript==/ 
    4227                    end 
    4328                end 
     
    9479scriptmeta << "var XPI_SCRIPTS = [\n" 
    9580 
    96 xpiname = ARGV[4].slice 0, ARGV[4] =~ /\./ 
     81xpiname = ARGV[4].split(/\//).reverse[0] 
     82xpiname = xpiname.slice 0, xpiname =~ /\./ 
    9783name = false 
    9884description = false 
     
    100861.upto ARGV.length - 4 do |i| 
    10187        gmscript = ARGV[i+3] 
     88        gmfilename = gmscript.split(/\//).reverse[0] 
    10289        `cp "#{gmscript}" ./build/content/` 
    10390        meta = GreasemonkeyScript.new(gmscript) 
     
    10996        scriptmeta << "\t\tincludes: #{meta.includes.to_json},\n" 
    11097        scriptmeta << "\t\texcludes: #{meta.excludes.to_json},\n" 
    111         scriptmeta << "\t\trequires: #{meta.requires.to_json},\n" 
    112         scriptmeta << "\t\turi: 'chrome://#{xpiname}/content/#{gmscript}'\n" 
     98 
     99        require_json = '[{\'filename\':\'' + meta.requires.join('\'},{\'filename\':\'') + '\'}]' 
     100        require_json = '[]' if meta.requires.length < 1 
     101        scriptmeta << "\t\trequires: " + require_json + ",\n" 
     102 
     103        scriptmeta << "\t\tresources: [" 
     104        meta.resources.each do |resource| 
     105                scriptmeta << '{' 
     106                scriptmeta << '\'name\': \'' + resource[:name] + '\',' 
     107                scriptmeta << '\'filename\': \'' + resource[:filename] + '\'' 
     108                scriptmeta << '},' 
     109        end 
     110        scriptmeta << "],\n" 
     111 
     112        scriptmeta << "\t\turi: 'chrome://#{xpiname}/content/#{gmfilename}'\n" 
    113113        scriptmeta << "\t},\n" 
    114114end