From: dbs <dbs@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Date: Mon, 11 Jan 2010 19:17:05 +0000 (+0000)
Subject: Get consistent about "title : subtitle" in mods_slim
X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=5d3d4347c649d3ec7935cfbfb363409809b447b9;p=evergreen%2Fmasslnc.git

Get consistent about "title : subtitle" in mods_slim

By teaching get_field_value() to prepend " : " to our incoming value
if the element name is "subTitle", we can ensure that records with a
title / subtitle structure have a consistent structure. Academics love
subtitles, so this was pretty glaring at Conifer.

This has a bonus effect of not appending colons after leading articles
(nonSort elements), which was annoying for "Der schutz" and the like.
Academics have a number of non-English / non-French / non-Spanish titles;
the MODS transform honours the non-filing indicator so this is a more
consistent method of generating the appropriate result.


git-svn-id: svn://svn.open-ils.org/ILS/trunk@15299 dcc99617-32d9-48b4-a31d-7c20da2025e4
---

diff --git a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm
index 731b84d221..5c37ce2d0b 100644
--- a/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm
+++ b/Open-ILS/src/perlmods/OpenILS/Utils/ModsParser.pm
@@ -110,7 +110,7 @@ sub new { return bless( {}, shift() ); }
 
 sub get_field_value {
 
-	my( $self, $mods, $xpath ) = @_;
+	my( $self, $mods, $xpath, $type) = @_;
 
 	my @string;
 
@@ -126,6 +126,12 @@ sub get_field_value {
 			my @children = $value->childNodes();
 			my @child_text;
 			for my $child (@children) {
+				# MODS strips the punctuation from 245abc, which often
+				# results in "title subtitle" rather than "title : subtitle";
+				# this hack gets it back for us
+				if ($type eq 'title' && $child->nodeName =~ m/subTitle/) {
+					push(@child_text, " : "); 
+				}
 				next unless( $child->nodeType != 3 );
 
 				if($child->childNodes) {
@@ -194,7 +200,7 @@ sub modsdoc_to_values {
 		my $class = "title";
 		$data->{$class} = {};
 		for my $type(keys %{$xpathset->{$class}}) {
-			my @value = $self->get_field_value( $mods, $xpathset->{$class}->{$type} );
+			my @value = $self->get_field_value( $mods, $xpathset->{$class}->{$type}, "title" );
 			for my $arr (@value) {
 				if( ref($arr) ) {
 					$data->{$class}->{$type} = shift @$arr;
@@ -207,7 +213,6 @@ sub modsdoc_to_values {
 					}
 
 					for my $t (@$arr) {
-						$data->{$class}->{$type} .= ' : ' if ($data->{$class}->{$type} =~ /\w\s*$/o);
 						$data->{$class}->{$type} .= " $t";
 					}
 				} else {