Task: URL parser





Java: import java.net.URI;
import java.net.URISyntaxException;
public class WebAddressParser{
    public static void main(String[] args){
        parseAddress("foo:
        parseAddress("urn:example:animal:ferret:nose");
    }

    static void parseAddress(String a){
        System.out.println("Parsing " + a);
        try{

            
            URI u = new URI(a);

            System.out.println("\tscheme = " + u.getScheme());
            System.out.println("\tdomain = " + u.getHost());
            System.out.println("\tport = " + (-1==u.getPort()?"default":u.getPort()));
            System.out.println("\tpath = " + (null==u.getPath()?u.getSchemeSpecificPart():u.getPath()));
            System.out.println("\tquery = " + u.getQuery());
            System.out.println("\tfragment = " + u.getFragment());
        }
        catch (URISyntaxException x){
            System.err.println("Oops: " + x);
        }
    }
}







Ada: with Ada.Text_IO;

with AWS.URL;
with AWS.Parameters;
with AWS.Containers.Tables;

procedure URL_Parser is

   procedure Parse (URL : in String) is

      use AWS.URL, Ada.Text_IO;
      use AWS.Containers.Tables;

      procedure Put_Cond (Item     : in String;
                          Value    : in String;
                          When_Not : in String := "") is
      begin
         if Value /= When_Not then
            Put ("  ");  Put (Item);  Put_Line (Value);
         end if;
      end Put_Cond;

      Obj  : Object;
      List : Table_Type;
   begin
      Put_Line ("Parsing " & URL);

      Obj  := Parse (URL);
      List := Table_Type (AWS.Parameters.List'(AWS.URL.Parameters (Obj)));

      Put_Cond ("Scheme:    ", Protocol_Name (Obj));
      Put_Cond ("Domain:    ", Host     (Obj));
      Put_Cond ("Port:      ", Port     (Obj), When_Not => "0");
      Put_Cond ("Path:      ", Path     (Obj));
      Put_Cond ("File:      ", File     (Obj));
      Put_Cond ("Query:     ", Query    (Obj));
      Put_Cond ("Fragment:  ", Fragment (Obj));
      Put_Cond ("User:      ", User     (Obj));
      Put_Cond ("Password:  ", Password (Obj));

      if List.Count /= 0 then
         Put_Line ("  Parameters:");
      end if;
      for Index in 1 .. List.Count loop
         Put ("    "); Put (Get_Name  (List, N => Index));
         Put ("    "); Put ("'" & Get_Value (List, N => Index) & "'");
         New_Line;
      end loop;
      New_Line;
   end Parse;

begin
   Parse ("foo://example.com:8042/over/there?name=ferret#nose");
   Parse ("urn:example:animal:ferret:nose");
   Parse ("jdbc:mysql://test_user:ouupppssss@localhost:3306/sakila?profileSQL=true");
   Parse ("ftp://ftp.is.co.za/rfc/rfc1808.txt");
   Parse ("http://www.ietf.org/rfc/rfc2396.txt#header1");
   Parse ("ldap://[2001:db8::7]/c=GB?objectClass=one&objectClass=two");
   Parse ("mailto:John.Doe@example.com");
   Parse ("news:comp.infosystems.www.servers.unix");
   Parse ("tel:+1-816-555-1212");
   Parse ("telnet://192.0.2.16:80/");
   Parse ("urn:oasis:names:specification:docbook:dtd:xml:4.1.2");
   Parse ("ssh://alice@example.com");
   Parse ("https://bob:pass@example.com/place");
   Parse ("http://example.com/?a=1&b=2+2&c=3&c=4&d=%65%6e%63%6F%64%65%64");
end URL_Parser;