Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
n/a
0 / 0
n/a
0 / 0
CRAP
n/a
0 / 0
1<?php
2declare( strict_types = 1 );
3
4/**
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @file
21 * @author Addshore
22 */
23namespace Wikimedia\Parsoid\Core;
24
25use Stringable;
26
27/**
28 * Represents the target of a wiki link.
29 *
30 * @see https://www.mediawiki.org/wiki/Manual:Modeling_pages
31 */
32interface LinkTarget extends Stringable {
33
34    /**
35     * Get the namespace index.
36     *
37     * @return int Namespace index
38     */
39    public function getNamespace(): int;
40
41    /**
42     * Convenience function to check if the target is in a given namespace.
43     *
44     * @param int $ns
45     * @return bool
46     */
47    public function inNamespace( int $ns ): bool;
48
49    /**
50     * Get the link fragment in text form (i.e. the bit after the hash `#`).
51     *
52     * @return string link fragment
53     */
54    public function getFragment(): string;
55
56    /**
57     * Whether the link target has a fragment.
58     *
59     * @return bool
60     */
61    public function hasFragment(): bool;
62
63    /**
64     * Get the main part of the link target, in canonical database form.
65     *
66     * The main part is the link target without namespace prefix or hash fragment.
67     * The database form means that spaces become underscores, this is also
68     * used for URLs.
69     *
70     * @return string
71     */
72    public function getDBkey(): string;
73
74    /**
75     * Get the main part of the link target, in text form.
76     *
77     * The main part is the link target without namespace prefix or hash fragment.
78     * The text form is used for display purposes.
79     *
80     * This is computed from the DB key by replacing any underscores with spaces.
81     *
82     * @note To get a title string that includes the namespace and/or fragment,
83     *       use a TitleFormatter.
84     *
85     * @return string
86     */
87    public function getText(): string;
88
89    /**
90     * Create a new LinkTarget with a different fragment on the same page.
91     *
92     * It is expected that the same type of object will be returned, but the
93     * only requirement is that it is a LinkTarget.
94     *
95     * @param string $fragment The fragment override, or "" to remove it.
96     * @return LinkTarget
97     */
98    public function createFragmentTarget( string $fragment );
99
100    /**
101     * Whether this LinkTarget has an interwiki component.
102     *
103     * @return bool
104     */
105    public function isExternal(): bool;
106
107    /**
108     * The interwiki component of this LinkTarget.
109     *
110     * @return string
111     */
112    public function getInterwiki(): string;
113
114    /**
115     * Check whether the given LinkTarget refers to the same target as this LinkTarget.
116     *
117     * Two link targets are considered the same if they have the same interwiki prefix,
118     * are in the same namespace, have the same main part, and the same fragment.
119     *
120     * @param LinkTarget $other
121     * @return bool
122     */
123    public function isSameLinkAs( LinkTarget $other ): bool;
124
125    /**
126     * Return an informative human-readable representation of the link target,
127     * for use in logging and debugging.
128     *
129     * @return string
130     */
131    public function __toString(): string;
132
133}