/[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 - (hide 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 wakaba 1.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 wakaba 1.3 our $VERSION = do{my @r=(q$Revision: 1.2 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r};
12 wakaba 1.1
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 wakaba 1.2 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 wakaba 1.1 =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 wakaba 1.2 }
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 wakaba 1.1 }
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 wakaba 1.3 1; # $Date: 2003/04/03 01:08:17 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24