/[pub]/suikawiki/script/lib/SuikaWiki/Name/Space.pm
Suika

Contents of /suikawiki/script/lib/SuikaWiki/Name/Space.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (show annotations) (download)
Thu Apr 1 04:44:32 2004 UTC (21 years, 3 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +2 -2 lines
FILE REMOVED
No longer used

1 # -*- perl -*-
2
3 =head1 NAME
4
5 SuikaWiki::Name::Space --- SuikaWiki: Namespace support for WikiName
6
7 =cut
8
9 package SuikaWiki::Name::Space;
10 use strict;
11 our $VERSION = do{my @r=(q$Revision: 1.2 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r};
12
13 =head1 MEMBERS
14
15 =over 4
16
17 =item $SuikaWiki::Name::Space::Delimiter (default '//')
18
19 Namespace delimiter
20
21 =item $SuikaWiki::Name::Space::Self (default '.')
22
23 "Self" indicator used with relative path
24
25 =item $SuikaWiki::Name::Space::Parent (default '..')
26
27 "Parent" indicator used with relative path
28
29 =cut
30
31 our $Delimiter = '//';
32 our $Self = '.';
33 our $Parent = '..';
34
35 =item $normalized_name = SuikaWiki::Name::Space::normalize_name ($normalize_name, %option)
36
37 Normalizes WikiName
38
39 Options:
40
41 =over 4
42
43 =item -might_be_ns_path => 1/0 (default 0)
44
45 If C<1>, WikiName ends with delimiter is considered as a path, not a name.
46 Unless this option is turned on, trailing delimiter(s) is ignored.
47
48 =back
49
50 =cut
51
52 sub normalize_name ($%) {
53 my ($name, %option) = @_;
54 $name = join $Delimiter, grep {$_} split /\Q$Delimiter\E/, $name;
55 if ($option{-might_be_ns_path}) {
56 my $n = $_[0];
57 $n =~ s/.*?\Q$Delimiter\E//g;
58 $name .= $Delimiter if $n eq '';
59 }
60 $name;
61 }
62
63 =item 0/1 = SuikaWiki::Name::Space::validate_name ($normalized_name, %option)
64
65 Validate WikiName and returns 1 if valid and 0 if invalid
66
67 =cut
68
69 sub validate_name ($%) {
70 my ($name, %option) = @_;
71 for (split /\Q$Delimiter\E/, $name) {
72 return 0 if !$_ || $_ eq $Self || $_ eq $Parent;
73 }
74 1;
75 }
76
77 =item $resolved_name = SuikaWiki::Name::Space::resolve_relative_name ($normalized_base_name => $normalized_name, %option)
78
79 Resolves relative WikiName
80
81 =cut
82
83 sub resolve_relative_name ($$%) {
84 my @base = split m#\Q$Delimiter\E#, $_[0];
85 my @name = split m#\Q$Delimiter\E#, $_[1];
86 if ($name[0] eq $Self || $name[0] eq $Parent) {
87 my $n = $_[0];
88 $n =~ s/.*?\Q$Delimiter\E//g;
89 push @base, '' if $n eq '';
90 }
91 if ($name[0] eq $Self) { ## .//Foo//Bar
92 @name = (@base, @name[1..$#name]);
93 } elsif ($name[0] eq $Parent) { ## ..//Foo//Bar
94 $#base--; @name = (@base, @name[1..$#name]);
95 }
96 join $Delimiter, @name;
97 }
98
99 =item $short_name = SuikaWiki::Name::Space::get_short_name ($normalized_long_name, %option)
100
101 Returns "short" WikiName (ie. WikiName except its namespace)
102
103 =cut
104
105 sub get_short_name ($%) {
106 my ($long_name) = @_;
107 $long_name =~ s/.*?\Q$Delimiter\E//g;
108 $long_name;
109 }
110
111 sub get_short_name_or_last_ns_name ($%) {
112 my ($long_name) = @_;
113 $long_name =~ s/.*?\Q$Delimiter\E//g;
114 unless ($long_name) {
115 $long_name = shift;
116 $long_name =~ s/(.*?\Q$Delimiter\E)//g;
117 $long_name = $1;
118 }
119 $long_name;
120 }
121
122 =item $path = SuikaWiki::Name::Space::get_path_name ($normalized_long_name, %option)
123
124 Returns "path" of WikiName (ie. WikiName except its short name)
125
126 =cut
127
128 sub get_path_name ($%) {
129 my $long_name = shift;
130 my $path = '';
131 while ($long_name =~ s/(.*?\Q$Delimiter\E)//) {
132 $path .= $1;
133 }
134 $path;
135 }
136
137 =item @parts = SuikaWiki::Name::Soace::split_name ($wiki_name)
138
139 Splits WikiName and returns its as an array
140
141 =cut
142
143 sub split_name ($) {
144 split m#\Q$Delimiter\E#, $_[0];
145 }
146
147 =item $wiki_name = SuikaWiki::Name::Soace::join_names ([@parts])
148
149 Joins WikiName parts
150
151 =cut
152
153 sub join_names (\@) {
154 join $Delimiter, @{$_[0]};
155 }
156
157 =back
158
159 =head1 SEE ALSO
160
161 suikawiki.pl, suikawiki-config.ph, <IW:SuikaWiki:SuikaWiki>
162
163 =head1 LICENSE
164
165 Copyright 2003 Wakaba <w@suika.fam.cx>
166
167 This program is free software; you can redistribute it and/or
168 modify it under the same terms as Perl itself.
169
170 =cut
171
172 1; # $Date: 2003/04/03 01:08:17 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24