/[webpac]/trunk/parse_format.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/parse_format.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 78 - (hide annotations)
Sat Jul 5 23:39:04 2003 UTC (20 years, 8 months ago) by dpavlin
File size: 4736 byte(s)
fix character conversion

1 dpavlin 10 #-------------------------------------------------------------
2     #
3 dpavlin 54 # parse_format(...)
4 dpavlin 10 #
5    
6    
7     sub parse_format {
8 dpavlin 54 my $type = shift || die "parset_format must be called with type!";
9 dpavlin 43 my $format = shift || die "parse_format must be called with format!";
10     my $row = shift || die "parse_format must be called with row!";
11 dpavlin 23 my $i = shift || 0; # isis repeatable number
12 dpavlin 43 my $codepage = shift || die "parse_format must be called with codepage!";
13 dpavlin 54 if ($type eq "isis") {
14 dpavlin 62 return parse_iso_format($format,$row,$i,$codepage,'isis_sf');
15 dpavlin 54 } elsif ($type eq "excel") {
16     return parse_excel_format($format,$row,$i,$codepage);
17 dpavlin 62 } elsif ($type eq "marc") {
18     return parse_iso_format($format,$row,$i,$codepage,'marc_sf');
19 dpavlin 67 } elsif ($type eq "feed") {
20     return parse_feed_format($format,$row,$i,$codepage);
21 dpavlin 54 }
22     }
23 dpavlin 10
24 dpavlin 54 #-------------------------------------------------------------
25    
26 dpavlin 62 sub parse_iso_format {
27 dpavlin 54
28     my $format = shift;
29     my $row = shift;
30     my $i = shift;
31     my $codepage = shift;
32    
33 dpavlin 62 my $func = shift || die "need to know which sub-field function to use";
34    
35     require $func.".pm";
36    
37 dpavlin 10 my $out;
38     my $out_swish;
39    
40     my $prefix = "";
41     if ($format =~ s/^([^\d]+)//) {
42 dpavlin 23 $prefix = $1;
43 dpavlin 10 }
44    
45     my $display;
46     my $swish;
47    
48 dpavlin 62 sub cnv_cp {
49 dpavlin 78 my $codepage = shift;
50     my $tmp = shift || return;
51 dpavlin 62 if ($codepage) {
52 dpavlin 78 $tmp = $codepage->convert($tmp) || print STDERR "iso: '$tmp' can't convert\n";
53 dpavlin 62 }
54     return $tmp;
55     }
56    
57 dpavlin 10 while ($format) {
58 dpavlin 23 #print STDERR "\n#### $format";
59 dpavlin 62 # this is EBSCO special to support numeric subfield in
60     # form of 856#3
61     if ($format =~ s/^(\d\d\d)#*(\w?)//) {
62 dpavlin 78 my $tmp = cnv_cp($codepage,get_sf($row,$1,$2,$i));
63 dpavlin 57 if ($tmp) {
64 dpavlin 78 $display .= $prefix.$tmp;
65 dpavlin 57 $swish .= $tmp." ";
66     #print STDERR " == $tmp";
67 dpavlin 10 }
68     $prefix = "";
69 dpavlin 22 # this might be our local scpeciality -- fields 10 and 11
70     # (as opposed to 010 and 011) so they are strictly listed
71     # here
72     } elsif ($format =~ s/^(1[01])//) {
73 dpavlin 78 my $tmp = cnv_cp($codepage,get_sf($row,$1,undef,$i));
74 dpavlin 57 if ($tmp) {
75 dpavlin 78 $display .= $prefix.$tmp;
76 dpavlin 57 $swish .= $tmp." ";
77 dpavlin 22 }
78     $prefix = "";
79 dpavlin 23 } elsif ($format =~ s/^mfn//i) {
80     $display .= $prefix . $row->{mfn};
81     $prefix = "";
82 dpavlin 10 } elsif ($format =~ s/^([^\d]+)(\d{0,3})/$2/) {
83 dpavlin 23 $prefix .= $1 if ($display);
84 dpavlin 10 } elsif ($format =~ s/^([^\d]+\d{0,2})//) {
85 dpavlin 23 $prefix .= $1 if ($display);
86 dpavlin 10 } elsif ($format =~ s/^(\d{1,2})//) {
87 dpavlin 23 $prefix .= $1 if ($display);
88 dpavlin 10 } else {
89     print STDERR "unparsed format: $format\n";
90     $prefix .= $format;
91     $format = "";
92     }
93     }
94     # add suffix
95     $display .= $prefix if ($display);
96    
97     return ($swish,$display);
98     }
99    
100     #-------------------------------------------------------------
101 dpavlin 54
102     sub parse_excel_format {
103     my $format = shift;
104     my $row = shift;
105     my $i = shift;
106     my $codepage = shift;
107    
108     my $out;
109     my $out_swish;
110    
111     my $prefix = "";
112     if ($format =~ s/^([^A-Z\|]{1,3})//) {
113     $prefix = $1;
114     }
115    
116     my $display;
117     my $swish;
118    
119     while ($format && length($format) > 0) {
120     #print STDERR "\n#### $format #";
121     if ($format =~ s/^\|([A-Z]{1,2})\|//) {
122     #print STDERR "--$1-> $format -[",length($format),"] ";
123     if ($row->{$1}) {
124     my $tmp = $row->{$1};
125 dpavlin 57 if ($codepage) {
126     $tmp = $codepage->convert($tmp) || warn "excel: $1 '$tmp' can't convert";
127     }
128 dpavlin 54 $display .= $prefix . $tmp;
129     $swish .= $tmp." ";
130     #print STDERR " == $tmp";
131     }
132     $prefix = "";
133     } elsif ($format =~ s/^([^A-Z\|]+)(\|[A-Z]{1,2}\|)/$2/) {
134     $prefix .= $1 if ($display);
135     } else {
136     print STDERR "unparsed format: $format\n";
137     $prefix .= $format;
138     $format = "";
139     }
140     #print STDERR " display: $display swish: $swish [format: $format]";
141     }
142     # add suffix
143     $display .= $prefix if ($display);
144    
145     return ($swish,$display);
146     }
147    
148 dpavlin 67 #-------------------------------------------------------------
149    
150     sub parse_feed_format {
151     my $format = shift;
152     my $data = shift;
153     my $i = shift;
154     my $codepage = shift;
155    
156     my $out;
157     my $out_swish;
158    
159     my $prefix = "";
160     if ($format =~ s/^([^\d\|]{1,3})//) {
161     $prefix = $1;
162     }
163    
164     my $display;
165     my $swish;
166    
167     while ($format && length($format) > 0) {
168     #print STDERR "\n#### $format #";
169     if ($format =~ s/^\|(\d+)\|//) {
170     #print STDERR "--$1-> $format -[",length($format),"] ";
171     if ($data->{$1}) {
172     my $tmp = $data->{$1};
173     if ($codepage) {
174     $tmp = $codepage->convert($tmp) || warn "feed: $1 '$tmp' can't convert\n";
175     }
176     $display .= $prefix . $tmp;
177     $swish .= $tmp." ";
178     #print STDERR " == $tmp";
179     }
180     $prefix = "";
181     } elsif ($format =~ s/^([^\d\|]+)(\|\d+\|)/$2/) {
182     $prefix .= $1 if ($display);
183     } else {
184     print STDERR "unparsed format: $format\n";
185     $prefix .= $format;
186     $format = "";
187     }
188     #print STDERR " display: $display swish: $swish [format: $format]";
189     }
190     # add suffix
191     $display .= $prefix if ($display);
192    
193     return ($swish,$display);
194     }
195    
196     #-------------------------------------------------------------
197    
198 dpavlin 10 1;

Properties

Name Value
cvs2svn:cvs-rev 1.11

  ViewVC Help
Powered by ViewVC 1.1.26