テキストのグループを後にくるようにした。
さらに図形のstyleにfill-opacity=0.5を追加した。

変更前
screenshot1

変更後
screenshot1

draw2svg_rexml_test.rb
*****
require "rexml/document"
image_width = 0
image_height = 0
y_jiku = [1,10]

File::open(ARGV[0]) {|f|
  while line = f.gets and image_width == 0
        l = line.chop.split(/\s/,2)
        case l[0]
        when "new"
            l0 = l[1].split(/,/)
            image_width = l0[0].to_f
            image_height = l0[1].to_f
        end
    end
}

doc = REXML::Document.new()
doc << REXML::XMLDecl.new('1.0', 'UTF-8')
doc << REXML::DocType.new("svg", "PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'")

svg = doc.add_element("svg",{"version" => "1.1","width" => image_width,"height" => image_height,"xmlns" => "http://www.w3.org/2000/svg"})

g_shapes = svg.add_element("g",{"id" => "g_shapes","style" => "fill-opacity: 0.5"})
g_text = svg.add_element("g",{"id" => "g_text"})

File::open(ARGV[0]) {|f|
  while line = f.gets
        l = line.chop.split(/\s/,2)
        case l[0]
        when "new"
        when "xrange"
        when "output"
        when "yrange"
            l0 = l[1].split(/,/)
            y_jiku[0] = l0[0].to_i - l0[1].to_i
            if y_jiku[0] < 0
                svg.add_attribute("viewBox","0," + (image_height * (-1)).to_s + "," + image_width.to_s + "," + image_height.to_s)
                g_text.add_attribute("transform","matrix(1,0,0,1,0," + y_jiku[1].to_s + ")")
                g_shapes.add_attribute("transform","matrix(1,0,0,-1,0,0)")
            end
        when "line"
            l0 = l[1].split(/,/)
            x1 = l0[0].to_f
            x2 = l0[2].to_f
            y1 = l0[1].to_f
            y2 = l0[3].to_f
            s_color = l0[4]
            g_shapes.add_element("line",{"x1" => x1,"y1" => y1,"x2" => x2,"y2" => y2,"stroke" => s_color})
        when "text"
            l0 = l[1].split(/,/)
            f_color = l0[0]
            x = l0[1].to_f
            if y_jiku[0] < 0
                y = l0[2].to_f * (-1)
            else
                y = l0[2].to_f
            end
#            size = l0[3]
            text = l0[4]
            g_text.add_element("text",{"x" => x,"y" => y,"fill" => f_color}).add_text text
        when "rectangle"
            l0 = l[1].split(/,/)
            x = l0[0].to_f
            y = l0[1].to_f
            width = (l0[2].to_f - l0[0].to_f).abs
            height = (l0[3].to_f - l0[1].to_f).abs
            s_color = l0[4]
            g_shapes.add_element("rect",{"x" => x,"y" => y,"width" => width,"height" => height,"fill" => "none","stroke" => s_color})
        when "circle"
            l0 = l[1].split(/,/)
            cx = l0[0].to_f
            cy = l0[1].to_f
            r = l0[2].to_f / 2
            s_color = l0[3]
            g_shapes.add_element("circle",{"cx" => cx,"cy" => cy,"r" => r,"fill" => "none","stroke" => s_color})
        when "fpoly"
            f_color = l[1].scan(/[a-z]+/)
            points = l[1].sub(/[a-z]+,/,"")
            g_shapes.add_element("polygon",{"points" => points,"fill" => f_color,"stroke" => "none"})
        when "arc"
            l0 = l[1].split(/\s*,\s*/)
            cx = l0[0].to_f
            cy = l0[1].to_f
            rx = 50 * l0[2].to_f / 2
            ry = 50 * l0[3].to_f / 2
            a1 = l0[4].to_f
            a2 = l0[5].to_f
            s_color = l0[6]
            ra1 = (Math::PI*2) * a1 / 360
            ra2 = (Math::PI*2) * a2 / 360
            sx = cx + rx * Math.cos(ra1)
            sy = cy + ry * Math.sin(ra1)
            ex = cx + rx * Math.cos(ra2)
            ey = cy + ry * Math.sin(ra2)
            x_axis_rotation = 0
            if (a2 - a1).abs <= 180
          large_flag = "0"
            else
          large_flag = "1"
            end
            if y_jiku[0] < 0
                sweep_flag = "1"
            else
                sweep_flag = "0"
            end
            d = "M " + sx.to_s + "," + sy.to_s
            d << " A " + rx.to_s + "," + ry.to_s
            d << " " + x_axis_rotation.to_s
            d << " " + large_flag + "," + sweep_flag
            d << " " + ex.to_s + "," + ey.to_s
            g_shapes.add_element("path",{"d" => d,"fill" => "none","stroke" => s_color})

        else
            puts "<!-- command=" + l[0] + ":未定義 -->"
        end
  end
}
#ファイルへ出力
#doc.write(STDOUT)で標準出力
#doc.write(File.new("test1.svg", "w"),0)
doc.write(STDOUT,0)

*****