xtd 0.2.0
uri.h
Go to the documentation of this file.
1 #pragma once
5 #include "iequatable.h"
6 #include "uri_components.h"
7 #include "uri_format.h"
8 #include "uri_host_name_type.h"
9 #include "uri_kind.h"
10 #include "uri_partial.h"
11 #include "ustring.h"
12 
14 namespace xtd {
103  class core_export_ uri : public xtd::iequatable<uri>, public xtd::object {
104  public:
106 
120  inline static const xtd::ustring scheme_delimiter = "://";
121 
130  inline static const xtd::ustring uri_scheme_file = "file";
131 
140  inline static const xtd::ustring uri_scheme_ftp = "ftp";
141 
150  inline static const xtd::ustring uri_scheme_gopher = "gopher";
151 
165  inline static const xtd::ustring uri_scheme_http = "http";
166 
175  inline static const xtd::ustring uri_scheme_https = "https";
176 
185  inline static const xtd::ustring uri_scheme_mailto = "mailto";
186 
188  inline static const xtd::ustring uri_scheme_net_pipe = "net.pipe";
189 
191  inline static const xtd::ustring uri_scheme_net_tcp = "net.tcp";
192 
201  inline static const xtd::ustring uri_scheme_news = "news";
202 
211  inline static const xtd::ustring uri_scheme_nntp = "nntp";
213 
215 
218  uri() = default;
219 
221  uri(const xtd::uri& uri) = default;
222  uri& operator =(const uri&) = default;
224 
236  explicit uri(const xtd::ustring& uri_string);
237 
244 
261  uri(const uri& base_uri, const xtd::ustring& relative_uri);
262 
289  uri(const uri& base_uri, const uri& relative_uri);
291 
293 
308  xtd::ustring absolute_path() const;
309 
322 
335  xtd::ustring authority() const;
336 
356  xtd::ustring dns_safe_host() const;
357 
363  xtd::ustring fragment() const;
364 
369  xtd::ustring host() const;
370 
374  xtd::uri_host_name_type host_name_type() const;
375 
382  xtd::ustring idn_host() const;
383 
387  bool is_absolute_uri() const;
388 
392  bool is_default_port() const;
393 
398  bool is_file() const;
399 
404  bool is_loopback() const;
405 
410  bool is_unc() const;
411 
420  xtd::ustring local_path() const;
421 
430  const xtd::ustring& original_string() const;
431 
439 
444  int32 port() const;
445 
452  xtd::ustring query() const;
453 
474  xtd::ustring scheme() const;
475 
494  std::vector<xtd::ustring> segments() const;
495 
500  xtd::ustring user_info() const;
502 
504 
511  static bool check_scheme_name(const xtd::ustring& scheme);
512 
522  static xtd::ustring escape_data_string(const xtd::ustring& value);
523 
534  static xtd::ustring escape_uri_string(const xtd::ustring& value);
535 
541  static int32 from_hex(char digit);
542 
552  xtd::ustring get_components(xtd::uri_components components, xtd::uri_format format) const;
553 
574  xtd::ustring get_left_part(xtd::uri_partial part) const;
575 
580  static xtd::ustring hex_escape(char character);
581 
587  static char hex_unescape(const xtd::ustring& pattern, size_t& index);
588 
608  bool is_base_of(const xtd::uri& uri) const;
609 
614  static bool is_hex_digit(char character);
615 
621  static bool is_hex_encoding(const xtd::ustring& pattern, size_t index);
622 
638  bool is_well_formed_original_string();
639 
655  static bool is_well_formed_uri_string(const xtd::ustring& uri_string, xtd::uri_kind uri_kind);
656 
663  static xtd::ustring unescape_data_string(const xtd::ustring& value);
664 
665  bool equals(const xtd::uri& uri) const noexcept override;
666 
670  xtd::ustring to_string() const noexcept override;
672 
673  private:
674  static ustring format_componant(const ustring& str, uri_format format);
675  static ustring format_host_componant(const ustring& str, uri_format format);
676  static bool need_to_escape_data_char(char character);
677  static bool need_to_escape_uri_char(char character);
678  void set_fragment(xtd::ustring& escapeUri);
679  void set_host(xtd::ustring& escapeUri);
680  void set_path(xtd::ustring& escapeUri);
681  void set_port(xtd::ustring& escapeUri);
682  void set_query(xtd::ustring& escapeUri);
683  void set_scheme(xtd::ustring& escapeUri);
684  void set_uri(const xtd::ustring& uri, xtd::uri_kind kind);
685  void set_user_info(xtd::ustring& escapeUri);
686 
687  xtd::ustring original_uri_;
688  xtd::ustring scheme_;
689  xtd::ustring scheme_delimiter_;
690  xtd::ustring user_info_;
691  xtd::ustring host_;
692  xtd::ustring port_;
693  xtd::ustring path_;
694  xtd::ustring query_;
695  xtd::ustring fragment_;
696  xtd::uri_kind kind_ = xtd::uri_kind::absolute;
697  };
698 }
The xtd::uri::host data.
The xtd::uri::local_path and xtd::uri::query data. Also see xtd::uri::path_and_query.
Contains xtd::uri_host_name_type enum.
Contains xtd::iequatable interface.
uri_format
Controls how URI information is escaped.
Definition: uri_format.h:17
uri_host_name_type
Defines host name types for the xtd::uri::check_host_name method.
Definition: uri_host_name_type.h:15
Contains xtd::uri_partial enum.
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
Contains xtd::uri_components enum.
Represents text as a sequence of UTF-8 code units.
Definition: ustring.h:46
uri_components
This enumeration has a Flags attribute that allows a bitwise combination of its member values...
Definition: uri_components.h:15
std::string to_string(const date_time &value, const std::string &fmt, const std::locale &loc)
Convert a specified value into a string with specified format and locale.
Definition: date_time.h:1063
segments
Specifies how a control anchors to the edges of its container.
Definition: segments.h:21
Contains xtd::uri_format enum.
The xtd::uri::query data.
uri_kind
Defines the kinds of Uris for the xtd::uri::is_well_formed_uri_string and several xtd::uri methods...
Definition: uri_kind.h:19
The xtd::uri::scheme data.
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition: iequatable.h:18
uri_partial
Defines the parts of a URI for the xtd::uri::get_left_part method.
Definition: uri_partial.h:15
Contains xtd::ustring class.
The scheme and authority segments of the URI.
The xtd::uri::user_info data.
The xtd::uri::port data.
Provides an object representation of a uniform resource identifier (URI) and easy access to the parts...
Definition: uri.h:103
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:32
int_least32_t int32
Represents a 32-bit signed integer.
Definition: types.h:129
The xtd::uri is an absolute xtd::uri.
The xtd::uri::scheme, xtd::uri::user_info, xtd::uri::host, port, xtd::uri::local_path, xtd::uri::query, and xtd::uri::fragment data.
The xtd::uri::fragment data.
Contains xtd::uri_kind enum.