rott/kf_sources/Engine/Classes/M3UParser.uc
2026-07-14 20:27:09 +07:00

86 lines
1.9 KiB
Ucode

//==============================================================================
// Created on: 10/27/2003
// Specialized parser for WinAmp PLS playlists
//
// Written by Ron Prestenback
// © 2003, Epic Games, Inc. All Rights Reserved
//==============================================================================
class M3UParser extends PlaylistParserBase;
var FilePath ParsedPath;
function bool Import( int PlaylistIndex, int InsertPosition, string Path )
{
if ( FileManager.LoadPlaylist(Path, Lines) && ParsePath(Path, ParsedPath) )
{
ImportedPlaylist( PlaylistIndex, InsertPosition );
return true;
}
return false;
}
function ParseLines()
{
local int i;
local string Str;
Super.ParseLines();
if ( Lines.Length == 0 )
return;
for ( i = 0; i < Lines.Length; i++ )
{
if ( Left(Lines[i],1) == "#" || Lines[i] == "" )
continue;
Str = Lines[i];
if ( Left(Str,1) == GetPathSeparator() )
Str = Mid(Str,1);
Paths[Paths.Length] = MatchPath(Str);
}
}
function string MatchPath( string Str )
{
local int i;
local array<string> Parts;
local string Result;
// log(Name@"MatchPath matching '"$ParsedPath.Directory$"' against '"$Str$"'");
Split(Str, GetPathSeparator(), Parts);
for ( i = 0; i < ParsedPath.DirectoryParts.Length; i++ )
{
// log(Name@"MatchPath ParsedPath.Directories["$i$"] '"$ParsedPath.DirectoryParts[i]$"' Parts[0] '"$Parts[0]$"'");
if ( CompareNames(ParsedPath.DirectoryParts[i],Parts[0]) )
break;
if ( Result != "" )
Result $= GetPathSeparator();
Result $= ParsedPath.DirectoryParts[i];
}
// however, if no matches were found, then clear the string
if ( i == ParsedPath.DirectoryParts.Length )
Result = "";
for ( i = 0; i < Parts.Length; i++ )
{
if ( Result != "" )
Result $= GetPathSeparator();
Result $= Parts[i];
}
// log("MatchPath - Result:"$Result);
return Result;
}
DefaultProperties
{
}