aboutsummaryrefslogblamecommitdiffstats
path: root/osurl
blob: b9df66601fd63102bda49226976c91b741e08735 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

              
                           


                                                            

                                                                                       

                                                                 

                  
                                                                   
                                                     




                                                                      

                                                                
                                                      

                                                              
                                                                   




                                                                           





                                                                             
                                
                                                        
   
 

                             
                                           
   

                                 
                                            
#!/usr/bin/lua

local lpeg = require 'lpeg'
local P,C,Cs,Cf,R = lpeg.P, lpeg.C, lpeg.Cs, lpeg.Cf, lpeg.R

local tokens = {
    NONHASH    = C((1 - P("#"))^1),             -- any nonempty string not containing #
    NUM        = C(R("09")^1),                  -- nonempty digit string
    WORD       = C(R("AZ","az","09","__")^1),   -- nonempty word
    JIRID      = C(R("AZ","az","09","--")^1)     -- nonempty word
}
local patterns = {
    ["bgo#%NUM"] = "https://bugzilla.gnome.org/show_bug.cgi?id=%1",
    ["bpo#%NUM"] = "https://bugs.python.org/issue%1",
    ["bko#%NUM"] = "https://bugzilla.kernel.org/show_bug.cgi?id=%1",
    ["bmo#%NUM"] = "https://bugzilla.mozilla.org/show_bug.cgi?id=%1",
    ["boo#%NUM"] = "https://bugzilla.opensuse.org/show_bug.cgi?id=%1",
    ["bnc#%NUM"] = "https://bugzilla.novell.com/show_bug.cgi?id=%1",
    ["bsc#%NUM"] = "https://bugzilla.suse.com/show_bug.cgi?id=%1",
    ["bds#%NUM"] = "https://build.suse.de/request/show/%1",
    ["bdo#%NUM"] = "https://build.opensuse.org/request/show/%1",
    ["jsc#%JIRID"] = "https://jira.suse.de/browse/%1",
    ["gh#%NONHASH#%WORD"] = "https://github.com/%1/issues/%2",
    ["lp#%NUM"] = "https://launchpad.net/bugs/%1",
    ["rh#%NUM"] = "https://bugzilla.redhat.com/show_bug.cgi?id=%1",
}

-- turn "foo#%BLAH" into a pattern that matches everything literally except
-- %BLAH
local makepat = Cf(
    (
        ((P("%") * C(R("AZ")^1)) / tokens)        -- %BLAH is from tokens
        + (P"%%" / function() return P"%" end)    -- %% treat as literal %
        + (C(P(1)) / P)                           -- anything else is literal
    )^0,
    function(a,b) return a * b end)
local function make_pattern(str)
    return assert(makepat:match(str), "invalid pattern")
end

local bugpat = P(false)
for k,v in pairs(patterns) do
    bugpat = bugpat + (make_pattern(k) / v)
end
local pat = Cs((bugpat + P(1))^0)

os.execute("xdg-open " .. pat:match(arg[1]))