Blame tools/create-reference.rb

Packit Service 2781ba
#!/usr/bin/env ruby
Packit Service 2781ba
Packit Service 2781ba
# GEGL API creator Øyvind Kolås 2007,
Packit Service 2781ba
#
Packit Service 2781ba
# Use under a public domain license.
Packit Service 2781ba
#
Packit Service 2781ba
Packit Service 2781ba
class Argument
Packit Service 2781ba
    attr_accessor :name, :data_type, :doc
Packit Service 2781ba
    def initialize
Packit Service 2781ba
        @data_type=""
Packit Service 2781ba
        @name=""
Packit Service 2781ba
    end
Packit Service 2781ba
    def data_type
Packit Service 2781ba
        type = @data_type.gsub("const", "").gsub(/\**/,"").gsub(/\s*/, "")
Packit Service 2781ba
        ret = @data_type.sub(/\s+/, " ")
Packit Service 2781ba
        url = ""
Packit Service 2781ba
        
Packit Service 2781ba
        case type
Packit Service 2781ba
        when "void"
Packit Service 2781ba
        when "gint"
Packit Service 2781ba
        when "guint"
Packit Service 2781ba
        when "gchar"
Packit Service 2781ba
        when "gdouble"
Packit Service 2781ba
        when "gfloat"
Packit Service 2781ba
        when "gboolean"
Packit Service 2781ba
        when "gpointer"
Packit Service 2781ba
        when "GList"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Doubly-Linked-Lists.html#GList"
Packit Service 2781ba
        when "GSList"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Singly-Linked-Lists.html#GSList"
Packit Service 2781ba
        when "GParamSpec"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-GParamSpec.html#GParamSpec"
Packit Service 2781ba
        when "GOptionGroup"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.2/glib/glib-Commandline-option-parser.html#GOptionGroup"
Packit Service 2781ba
        when "GValue"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-Generic-values.html#GValue"
Packit Service 2781ba
        else
Packit Service 2781ba
          url="##{type}"
Packit Service 2781ba
        end
Packit Service 2781ba
        if url!=""
Packit Service 2781ba
          ret.sub(type, "#{type}")
Packit Service 2781ba
        else
Packit Service 2781ba
          ret
Packit Service 2781ba
        end
Packit Service 2781ba
    end
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
class String
Packit Service 2781ba
    def htmlify
Packit Service 2781ba
        self.gsub("\n\n","\n

").gsub("XXX","XXX").gsub("NULL","NULL").gsub(/#([a-zA-Z_]*)/, "\\1").gsub(/@([a-zA-Z_]*)/, "\\1").gsub("TRUE", "TRUE")

Packit Service 2781ba
    end
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
class Section
Packit Service 2781ba
    attr_accessor :name, :doc, :sample
Packit Service 2781ba
    def initialize
Packit Service 2781ba
        @doc=""
Packit Service 2781ba
        @sample=""
Packit Service 2781ba
        @name=""
Packit Service 2781ba
    end
Packit Service 2781ba
    def menu_entry
Packit Service 2781ba
        if @name == "GeglBuffer" or
Packit Service 2781ba
           @name == "GeglNode" or
Packit Service 2781ba
           @name == "GeglColor" or
Packit Service 2781ba
           @name == "GeglRectangle" or
Packit Service 2781ba
           @name == "GeglProcessor" or
Packit Service 2781ba
           @name == "XML" or
Packit Service 2781ba
           @name == "The GEGL API" then
Packit Service 2781ba
          return "
#{@name}
"
Packit Service 2781ba
        else
Packit Service 2781ba
          return "#{@name}"
Packit Service 2781ba
        end
Packit Service 2781ba
    end
Packit Service 2781ba
    def to_s
Packit Service 2781ba
        ret = "#{@name}\n"
Packit Service 2781ba
    end
Packit Service 2781ba
    def sample_html
Packit Service 2781ba
        @sample.gsub('&','&').gsub('<','<').gsub('>','>').gsub(/(.)(#.*)$/, "\\1\\2") 
Packit Service 2781ba
    end
Packit Service 2781ba
    def to_html
Packit Service 2781ba
        ret = "
Packit Service 2781ba
                 

#{@name}

"
Packit Service 2781ba
            ret += "
"
Packit Service 2781ba
            
Packit Service 2781ba
            ret += "

"

Packit Service 2781ba
            ret += @doc.htmlify
Packit Service 2781ba
            ret += "

"
Packit Service 2781ba
            ret += "
#{sample_html}
"
Packit Service 2781ba
            ret += ""
Packit Service 2781ba
        ret += ""
Packit Service 2781ba
    end
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
class Function
Packit Service 2781ba
    attr_accessor :name, :return_type, :return_doc, :doc, :arguments, :sample
Packit Service 2781ba
    def initialize
Packit Service 2781ba
        @arguments = Array.new
Packit Service 2781ba
        @doc=""
Packit Service 2781ba
        @return_type=""
Packit Service 2781ba
        @return_doc=""
Packit Service 2781ba
        @name=""
Packit Service 2781ba
        @sample=""
Packit Service 2781ba
    end
Packit Service 2781ba
    def menu_entry
Packit Service 2781ba
        "  #{@name}"
Packit Service 2781ba
    end
Packit Service 2781ba
    def sample_html
Packit Service 2781ba
        @sample.gsub('&','&').gsub('<','<').gsub('>','>').gsub(/(.)(#.*)$/, "\\1\\2") 
Packit Service 2781ba
    end
Packit Service 2781ba
    def add_arg arg
Packit Service 2781ba
        @arguments << arg
Packit Service 2781ba
    end
Packit Service 2781ba
    def to_s
Packit Service 2781ba
        ret = "#{@return_type} #{@name}\n"
Packit Service 2781ba
        @arguments.each {|arg|
Packit Service 2781ba
            ret += "\t#{arg.data_type} #{arg.name} : #{arg.doc}\n"
Packit Service 2781ba
        }
Packit Service 2781ba
        ret += " _#{@doc}\n"
Packit Service 2781ba
        ret += " _#{@return_doc}\n"
Packit Service 2781ba
        ret += "\n"
Packit Service 2781ba
    end
Packit Service 2781ba
Packit Service 2781ba
    def return_type
Packit Service 2781ba
        type = @return_type.gsub("const", "").gsub(/\**/,"").gsub(/\s*/, "")
Packit Service 2781ba
        ret = @return_type.sub(/\s+/, " ")
Packit Service 2781ba
        url = ""
Packit Service 2781ba
        
Packit Service 2781ba
        case type
Packit Service 2781ba
        when "void"
Packit Service 2781ba
        when "gint"
Packit Service 2781ba
        when "guint"
Packit Service 2781ba
        when "gchar"
Packit Service 2781ba
        when "gdouble"
Packit Service 2781ba
        when "gfloat"
Packit Service 2781ba
        when "gboolean"
Packit Service 2781ba
        when "gpointer"
Packit Service 2781ba
        when "GList"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Doubly-Linked-Lists.html#GList"
Packit Service 2781ba
        when "GSList"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/glib/glib-Singly-Linked-Lists.html#GSList"
Packit Service 2781ba
        when "GParamSpec"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-GParamSpec.html#GParamSpec"
Packit Service 2781ba
        when "GOptionGroup"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.2/glib/glib-Commandline-option-parser.html#GOptionGroup"
Packit Service 2781ba
        when "GValue"
Packit Service 2781ba
          url="http://developer.gnome.org/doc/API/2.0/gobject/gobject-Generic-values.html#GValue"
Packit Service 2781ba
        else
Packit Service 2781ba
          url="##{type}"
Packit Service 2781ba
        end
Packit Service 2781ba
        if url!=""
Packit Service 2781ba
          ret.sub(type, "#{type}")
Packit Service 2781ba
        else
Packit Service 2781ba
          ret
Packit Service 2781ba
        end
Packit Service 2781ba
    end
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
    def to_html
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
        ret = "
Packit Service 2781ba
                 
Packit Service 2781ba
                 
Packit Service 2781ba
                   
Packit Service 2781ba
                   
#{self.return_type.sub(/const/,"const").gsub("*","*")}
Packit Service 2781ba
                   
#{@name}
Packit Service 2781ba
                   "
Packit Service 2781ba
        ret += "
"
Packit Service 2781ba
Packit Service 2781ba
        first=true
Packit Service 2781ba
        i=0
Packit Service 2781ba
        if @arguments.length==0 and @return_type!=""
Packit Service 2781ba
            ret += "
(void)
\n"
Packit Service 2781ba
        end
Packit Service 2781ba
        @arguments.each {|arg|
Packit Service 2781ba
            i=i+1
Packit Service 2781ba
            if(first and i==@arguments.length)
Packit Service 2781ba
            ret += "
Packit Service 2781ba
                      
(#{arg.data_type.sub(/const/,"const").gsub("*","*")}
Packit Service 2781ba
                      
#{arg.name.sub("...","..., NULL")})
Packit Service 2781ba
                    \n"
Packit Service 2781ba
            elsif(first)
Packit Service 2781ba
                first=false
Packit Service 2781ba
            ret += "
Packit Service 2781ba
                      
(#{arg.data_type.sub(/const/,"const").gsub("*","*")}
Packit Service 2781ba
                      
#{arg.name.sub("...","..., NULL")},
Packit Service 2781ba
                    \n"
Packit Service 2781ba
            elsif(i==@arguments.length)
Packit Service 2781ba
            ret += "
Packit Service 2781ba
                      
#{arg.data_type.sub(/const/,"const").gsub("*","*")}
Packit Service 2781ba
                      
#{arg.name.sub("...","..., NULL")})
Packit Service 2781ba
                    \n"
Packit Service 2781ba
            else
Packit Service 2781ba
            ret += "
Packit Service 2781ba
                      
#{arg.data_type.sub(/const/,"const").gsub("*","*")}
Packit Service 2781ba
                      
#{arg.name.sub("...","..., NULL")},
Packit Service 2781ba
                    \n"
Packit Service 2781ba
            end
Packit Service 2781ba
        }
Packit Service 2781ba
Packit Service 2781ba
        ret += ""
Packit Service 2781ba
        ret += "
"
Packit Service 2781ba
        ret += ""
Packit Service 2781ba
        ret += "
"
Packit Service 2781ba
        
Packit Service 2781ba
        ret += "

"

Packit Service 2781ba
        ret += @doc.htmlify;
Packit Service 2781ba
        ret += "

"
Packit Service 2781ba
Packit Service 2781ba
        if @arguments.length > 0
Packit Service 2781ba
            ret += "

Arguments:

"
Packit Service 2781ba
            ret += "\n"
Packit Service 2781ba
            @arguments.each { |arg|
Packit Service 2781ba
                ret += "#{arg.name}"
Packit Service 2781ba
                ret += "#{arg.doc.htmlify}"
Packit Service 2781ba
            }
Packit Service 2781ba
            ret += "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
Packit Service 2781ba
        ret += ""
Packit Service 2781ba
        ret += "
#{@return_doc.htmlify.sub("Returns", "Returns")}
"
Packit Service 2781ba
        ret += "
#{sample_html}
"
Packit Service 2781ba
        ret += ""
Packit Service 2781ba
    end
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
CSS="div.function{
Packit Service 2781ba
    margin-top: 2em;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.function_signature{
Packit Service 2781ba
      background-color: #ddd;
Packit Service 2781ba
      padding: 0.5em;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.function_header{
Packit Service 2781ba
      position: relative;
Packit Service 2781ba
      top: 0;
Packit Service 2781ba
      left: 0;
Packit Service 2781ba
      display:block;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.return_type{
Packit Service 2781ba
        display: block;
Packit Service 2781ba
        font-style: italic;
Packit Service 2781ba
        color: #22F;
Packit Service 2781ba
        float:left;
Packit Service 2781ba
        padding-right: 1em;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.function_name{
Packit Service 2781ba
     display: block;
Packit Service 2781ba
     float: left;
Packit Service 2781ba
     font-weight: bold;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.function_args{
Packit Service 2781ba
        float: right;
Packit Service 2781ba
      display:block;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.argument{
Packit Service 2781ba
     display: block;
Packit Service 2781ba
     clear: left;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.arg_type{
Packit Service 2781ba
        display: block;
Packit Service 2781ba
        font-style: italic;
Packit Service 2781ba
        color: #22F;
Packit Service 2781ba
        width: 11em;
Packit Service 2781ba
        float: left;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.arg_name{
Packit Service 2781ba
        color: #050;
Packit Service 2781ba
        display: block;
Packit Service 2781ba
        float: left;
Packit Service 2781ba
  }
Packit Service 2781ba
  span.arg_name{
Packit Service 2781ba
        color: #050;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.arg_doc{
Packit Service 2781ba
        display: none;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.function_doc{
Packit Service 2781ba
        display: block;
Packit Service 2781ba
        margin-top: 2em;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.float_breaker{
Packit Service 2781ba
     clear: both;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.return_doc{
Packit Service 2781ba
        margin-top: 2em;
Packit Service 2781ba
  }
Packit Service 2781ba
  span.const{
Packit Service 2781ba
        color: grey;
Packit Service 2781ba
  }
Packit Service 2781ba
  span.pointer{
Packit Service 2781ba
        color: red;
Packit Service 2781ba
  }
Packit Service 2781ba
  span.varargs{
Packit Service 2781ba
        color: #F22;
Packit Service 2781ba
        font-style: italic;
Packit Service 2781ba
  }
Packit Service 2781ba
  span.keyword {
Packit Service 2781ba
        color: #22F;
Packit Service 2781ba
        font-family: mono;
Packit Service 2781ba
  }
Packit Service 2781ba
Packit Service 2781ba
  div.sect{
Packit Service 2781ba
    margin-top: 2em;
Packit Service 2781ba
  }
Packit Service 2781ba
  div.sect_doc{
Packit Service 2781ba
        display: block;
Packit Service 2781ba
        margin-top: 2em;
Packit Service 2781ba
  }
Packit Service 2781ba
"
Packit Service 2781ba
Packit Service 2781ba
elements = []
Packit Service 2781ba
function = nil
Packit Service 2781ba
state = :none
Packit Service 2781ba
arg_no=0
Packit Service 2781ba
Packit Service 2781ba
(ARGV.length-1).times {
Packit Service 2781ba
    |file_no|
Packit Service 2781ba
line_no=0
Packit Service 2781ba
Packit Service 2781ba
state=:none
Packit Service 2781ba
puts ARGV[file_no]
Packit Service 2781ba
Packit Service 2781ba
IO.foreach(ARGV[file_no]) {
Packit Service 2781ba
    |line|
Packit Service 2781ba
    line_no = line_no+1
Packit Service 2781ba
Packit Service 2781ba
    case state
Packit Service 2781ba
    when :none
Packit Service 2781ba
        state = :start if (line =~ /\/\*\*/)
Packit Service 2781ba
        state = :section if (line =~ /\/\*\*\*/)
Packit Service 2781ba
    when :section
Packit Service 2781ba
        line =~ / \* (.*):/
Packit Service 2781ba
        elements << function if (function!=nil)
Packit Service 2781ba
        function=Section.new
Packit Service 2781ba
        function.name=$1.to_s
Packit Service 2781ba
        state = :section_doc
Packit Service 2781ba
    when :start
Packit Service 2781ba
        line =~ / \* (.*):(.*)/
Packit Service 2781ba
        elements << function if (function!=nil)
Packit Service 2781ba
        function=Function.new
Packit Service 2781ba
        function.name=$1.to_s
Packit Service 2781ba
        # $2 is the introspection annotations
Packit Service 2781ba
        state = :args
Packit Service 2781ba
        arg_no=-1
Packit Service 2781ba
    when :args
Packit Service 2781ba
        if line =~ /.*@(.*):(.*):(.*)/
Packit Service 2781ba
            arg_no=arg_no+1
Packit Service 2781ba
            argument=Argument.new
Packit Service 2781ba
            argument.name=$1
Packit Service 2781ba
            # $2 is introspection annotations
Packit Service 2781ba
            argument.doc=""+$3.to_s
Packit Service 2781ba
            function.add_arg argument
Packit Service 2781ba
        elsif line =~ /.*@(.*):(.*)/
Packit Service 2781ba
            arg_no=arg_no+1
Packit Service 2781ba
            argument=Argument.new
Packit Service 2781ba
            argument.name=$1
Packit Service 2781ba
            argument.doc=""+$2.to_s
Packit Service 2781ba
            function.add_arg argument
Packit Service 2781ba
        elsif line =~ / \*(.*)/
Packit Service 2781ba
            if $1.chomp==''
Packit Service 2781ba
                state=:more
Packit Service 2781ba
            else
Packit Service 2781ba
              function.arguments[arg_no].doc = function.arguments[arg_no].doc + $1.to_s + "\n" if arg_no != -1
Packit Service 2781ba
            end
Packit Service 2781ba
        else
Packit Service 2781ba
            state=:more
Packit Service 2781ba
        end
Packit Service 2781ba
Packit Service 2781ba
    when :section_doc
Packit Service 2781ba
        if line =~ /^ \* ---/
Packit Service 2781ba
            state=:section_sample
Packit Service 2781ba
        elsif line =~ /\*\//
Packit Service 2781ba
            state=:none
Packit Service 2781ba
        else
Packit Service 2781ba
            line =~ /.*\*(.*)/
Packit Service 2781ba
            function.doc = function.doc + $1.to_s + "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
    when :section_sample
Packit Service 2781ba
        if line =~ /\*\//
Packit Service 2781ba
            state=:none
Packit Service 2781ba
        else
Packit Service 2781ba
            line =~ /.*\* (.*)/
Packit Service 2781ba
            function.sample = function.sample + $1.to_s + "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
    when :function_sample
Packit Service 2781ba
        if line =~ /\*\//
Packit Service 2781ba
            state=:fun
Packit Service 2781ba
            arg_no=0
Packit Service 2781ba
        else
Packit Service 2781ba
            line =~ /.*\* (.*)/
Packit Service 2781ba
            function.sample = function.sample + $1.to_s + "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
    when :more
Packit Service 2781ba
        if line =~ /^ \* ---/
Packit Service 2781ba
            state=:function_sample
Packit Service 2781ba
        elsif line =~ /.*(Returns.*)/
Packit Service 2781ba
            function.return_doc = $1 + "\n"
Packit Service 2781ba
            state=:more_return
Packit Service 2781ba
        elsif line =~ /\*\//
Packit Service 2781ba
            state=:fun
Packit Service 2781ba
            arg_no=0
Packit Service 2781ba
        else
Packit Service 2781ba
            line =~ /.*\*(.*)/
Packit Service 2781ba
            function.doc = function.doc + $1.to_s + "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
Packit Service 2781ba
    when :more_return
Packit Service 2781ba
        if line =~ /^ \* ---/
Packit Service 2781ba
            state=:function_sample
Packit Service 2781ba
        elsif line =~ /\*\//
Packit Service 2781ba
            state=:fun
Packit Service 2781ba
            arg_no=0
Packit Service 2781ba
        else
Packit Service 2781ba
            line =~ /.*\*(.*)/
Packit Service 2781ba
            function.return_doc = function.return_doc + $1.to_s + "\n"
Packit Service 2781ba
        end
Packit Service 2781ba
Packit Service 2781ba
    when :fun  # might be getting more data on current fun
Packit Service 2781ba
        if line=~ /^\s*((?:const)?\s*[a-zA-Z\d_]*\s*\**\s*)([a-z_\d]*)\s*\(\s*((?:const)?\s*[a-zA-Z\d_]*\s*\**)\s*([a-zA-Z\d_]*)(,?)/
Packit Service 2781ba
            #.*\(([a-zA-Z_\s\*])([a-zA-Z\d]*)/
Packit Service 2781ba
            function.return_type=$1
Packit Service 2781ba
            name=$2
Packit Service 2781ba
            argtype=$3
Packit Service 2781ba
            argname=$4
Packit Service 2781ba
            comma=$5
Packit Service 2781ba
            arg_no=0
Packit Service 2781ba
Packit Service 2781ba
            if name!=function.name and function.name!='GeglProcessor'
Packit Service 2781ba
                puts "#{line_no}:function name mismatch #{name}!=#{function.name}"
Packit Service 2781ba
            end
Packit Service 2781ba
            if argtype=='void'
Packit Service 2781ba
                state=:none
Packit Service 2781ba
            elsif argtype==''
Packit Service 2781ba
                puts "#{line_no}: empty argument list"
Packit Service 2781ba
                state=:none
Packit Service 2781ba
            else
Packit Service 2781ba
                if argname==''
Packit Service 2781ba
                   puts "#{line_no}: expected argument name"
Packit Service 2781ba
                   state=:none
Packit Service 2781ba
                end
Packit Service 2781ba
                if (function.arguments[arg_no].name!=argname)
Packit Service 2781ba
                   puts "#{line_no}: #{function.arguments[arg_no].name}!=#{argname}"
Packit Service 2781ba
                end
Packit Service 2781ba
                function.arguments[arg_no].data_type=argtype
Packit Service 2781ba
                arg_no = arg_no+1
Packit Service 2781ba
            end
Packit Service 2781ba
        elsif line=~ /^\s*((?:const)?\s*[a-zA-Z\d_]*\s*\**\s*)([a-z_\d]*)/
Packit Service 2781ba
            argtype=$1
Packit Service 2781ba
            argname=$2
Packit Service 2781ba
            if (argtype!='' and argname!='' and function.arguments.length>arg_no)
Packit Service 2781ba
                if (function.arguments[arg_no].name!=argname)
Packit Service 2781ba
                   puts "#{line_no}: #{function.arguments[arg_no].name}!=#{argname}"
Packit Service 2781ba
                end
Packit Service 2781ba
                function.arguments[arg_no].data_type=argtype
Packit Service 2781ba
                arg_no = arg_no+1
Packit Service 2781ba
            end
Packit Service 2781ba
        else
Packit Service 2781ba
            #puts "we're in fun and got: #{line}"
Packit Service 2781ba
        end
Packit Service 2781ba
        state = :start if (line =~ /\/\*\*/)
Packit Service 2781ba
        state = :section if (line =~ /\/\*\*\*/)
Packit Service 2781ba
    else
Packit Service 2781ba
        state=:none
Packit Service 2781ba
    end
Packit Service 2781ba
}
Packit Service 2781ba
}
Packit Service 2781ba
Packit Service 2781ba
if ARGV.length<2
Packit Service 2781ba
    puts "usage: #{$0} <header1 [header2 ..]> <output.html>"
Packit Service 2781ba
    exit
Packit Service 2781ba
end
Packit Service 2781ba
Packit Service 2781ba
=begin
Packit Service 2781ba
File.open(ARGV[1], "w") {|file|
Packit Service 2781ba
    file.puts "<html><body><head><style type='text/css'>#{CSS}</style></head>"
Packit Service 2781ba
    elements.each {|fun| file.puts fun.to_html
Packit Service 2781ba
    file.puts "</body></html>"
Packit Service 2781ba
    }
Packit Service 2781ba
}
Packit Service 2781ba
=end
Packit Service 2781ba
Packit Service 2781ba
Packit Service 2781ba
File.open(ARGV[ARGV.length-1], "w") {|file|
Packit Service 2781ba
Packit Service 2781ba
file.puts "
Packit Service 2781ba
<html>          
Packit Service 2781ba
  <head>
Packit Service 2781ba
    <title>GEGL API</title>
Packit Service 2781ba
    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />
Packit Service 2781ba
Packit Service 2781ba
    <style type='text/css'>
Packit Service 2781ba
       @import url(\"gegl.css\");
Packit Service 2781ba
       div#toc ul {
Packit Service 2781ba
          font-size: 70%;
Packit Service 2781ba
       }
Packit Service 2781ba
       h3 {
Packit Service 2781ba
         margin-top: 2em;
Packit Service 2781ba
         margin-bottom: 0;
Packit Service 2781ba
         padding-bottom: 0;
Packit Service 2781ba
         padding-top: 0.2em;
Packit Service 2781ba
         border-top: 1px solid grey;
Packit Service 2781ba
       }
Packit Service 2781ba
       h4 {
Packit Service 2781ba
         margin-top: 1.5em;
Packit Service 2781ba
         margin-bottom: 0;
Packit Service 2781ba
         padding-bottom: 0.5em;
Packit Service 2781ba
         padding-top: 0.2em;
Packit Service 2781ba
         border-top: 1px solid grey;
Packit Service 2781ba
       }
Packit Service 2781ba
       #{CSS}
Packit Service 2781ba
    </style>
Packit Service 2781ba
    </head>
Packit Service 2781ba
    <body>"
Packit Service 2781ba
Packit Service 2781ba
file.puts "
Packit Service 2781ba
      
Packit Service 2781ba
         

Contents

Packit Service 2781ba
      
Packit Service 2781ba
      
    Packit Service 2781ba
            
  • GEGL
  • Packit Service 2781ba
            
  • Documentation
  • Packit Service 2781ba
            
  •   Glossary
  • Packit Service 2781ba
            
  •   Operations
  • Packit Service 2781ba
    Packit Service 2781ba
    "
    Packit Service 2781ba
        elements.each { |element|
    Packit Service 2781ba
          file.puts "
  • #{element.menu_entry}
  • "
    Packit Service 2781ba
        }
    Packit Service 2781ba
        file.puts "\n"
    Packit Service 2781ba
       
    Packit Service 2781ba
        file.puts "
    "
    Packit Service 2781ba
        elements.each {|element| 
    Packit Service 2781ba
            if !element.name.empty?
    Packit Service 2781ba
            file.puts "
    #{element.to_html}
    "
    Packit Service 2781ba
            end
    Packit Service 2781ba
        }
    Packit Service 2781ba
        file.puts "
    Packit Service 2781ba
      </body>
    Packit Service 2781ba
    </html>"
    Packit Service 2781ba
    Packit Service 2781ba
    }
    Packit Service 2781ba
    Packit Service 2781ba
    File.open("gegl.devhelp", "w") {|file|
    Packit Service 2781ba
        file.puts "
    Packit Service 2781ba
    Packit Service 2781ba
    <book xmlns='http://www.devhelp.net/book' title='GEGL Reference Manual' link='api.html' author='' name='gegl'>"
    Packit Service 2781ba
        file.puts "<chapters>"
    Packit Service 2781ba
        elements.each { |element|
    Packit Service 2781ba
           if element.is_a? Section and !element.name.empty?
    Packit Service 2781ba
             file.puts "<sub name='#{element.name}' link='api.html\##{element.name.gsub(' ','_')}'/>"
    Packit Service 2781ba
           end
    Packit Service 2781ba
        }
    Packit Service 2781ba
        file.puts "<sub name='Operations' link='operations.html'/>"
    Packit Service 2781ba
        file.puts "</chapters>"
    Packit Service 2781ba
        file.puts "<functions>"
    Packit Service 2781ba
    Packit Service 2781ba
        elements.each { |element|
    Packit Service 2781ba
           if element.is_a? Function and !element.name.empty?
    Packit Service 2781ba
             file.puts "<function name='#{element.name}' link='api.html\##{element.name.gsub(' ','_')}'/>"
    Packit Service 2781ba
           end
    Packit Service 2781ba
           if element.is_a? Section and !element.name.empty? and element.name=~ /^Gegl/
    Packit Service 2781ba
             file.puts "<function name='#{element.name}' link='api.html\##{element.name.gsub(' ','_')}'/>"
    Packit Service 2781ba
           end
    Packit Service 2781ba
    Packit Service 2781ba
    Packit Service 2781ba
        }
    Packit Service 2781ba
    Packit Service 2781ba
        IO.foreach("operations.html"){ |line|
    Packit Service 2781ba
            if line =~ /^
  • .*<\/a><\/li>/
  • Packit Service 2781ba
                opname=line.gsub(/.*op_/,'').gsub(/'.*/,'').strip
    Packit Service 2781ba
                file.puts "<function name='#{opname}' link='operations.html#op_#{opname}'/>"
    Packit Service 2781ba
            end
    Packit Service 2781ba
        }
    Packit Service 2781ba
    Packit Service 2781ba
        file.puts "</functions>"
    Packit Service 2781ba
        file.puts "</book>"
    Packit Service 2781ba
    }