//
//  Bunsho.m
//  traceWrite
//
//  Created by 今井 彰彦 on 2011/12/17.
//  Copyright (c) 2011 AIG-Soft. All rights reserved.
//

#import "Bunsho.h"
#import "FileControl2.h"
#import "FontSelect.h"
#import "libs.h"

@implementation Bunsho

/* ファイルフォーマット
	文書名(日)			_bunName
	文書名(英)		
	添付ファイル名(日)		_attachName
	添付ファイル名(英)	
	縦書きかどうか			_ftategaki	v1.0は縦書きのみ
	縦文字数				_maxKetas
	標準フォントiOS5〜		_font5		V2.0
	標準フォントiOS4		_font4		V2.0	未使用
	テキスト				_text		テキストの解釈はYoko2Yokoが行う
		全角スペース		スペーサー
		半角スペース		削除される
		/				強制改行
		\t,\x0d,\x0a(\n)は削除される
*/

//-----------------------------------------

// 文書ファイルフルパス名リストを得る
// これを使って実ファイルを読み込むが、選択上表示するのはこれではない
// 本当はファイル名だけいいのだが、それだけ抽出する処理が面倒なのでこのまま
// ローカルに作成されるので必要ならcopy/retainすること
+(NSArray *)bunList
{
	printSelf();
	NSArray *fileListInternal=[[NSBundle mainBundle]pathsForResourcesOfType:EXT_BUNSHO inDirectory:DIR_SYSTEM]; // 本体内部はこれ
	NSArray *fileListExternal=files(DIR_DOCUMENTS,EXT_BUNSHO); // iTunes経由
	//
	NSMutableArray *fileList=[NSMutableArray arrayWithArray:fileListInternal]; // +なので開放は不要
	[fileList addObjectsFromArray:fileListExternal];
	NSArray *list=[NSArray arrayWithArray:fileList]; // ローカル化
	nslog(@"fileList=%@",list);
	//
	return (list);
}

// ファイル名をパス名に変換する
+(NSString *)bunFullPath:(NSString *)_fname
{
	printSelfs(@"%@",_fname);
	NSArray *pathAllList=[self bunList];
	NSEnumerator *emu=[pathAllList objectEnumerator];
	NSString *path;
	while (path=[emu nextObject]) {
	//	nslog(@"path=%@/last=%@/_fname=%@",path,[path lastPathComponent],_fname);
		if ([[path lastPathComponent]isEqualToString:_fname]) {
			return (path);
		}
	}
	// 万が一見つからなかった時
	nslog(@"見つからない");
	return nil;
}

// 文書名リストを得る
+(NSArray *)bunNames
{
	printSelf();
	NSArray *fileList=[self bunList];
	//
	BOOL fjanapnese=[NSLocalStr(@"LOCAL") isEqualToString:LOCAL_JAPAN]; // ローカライズのためのフラグ
	NSMutableArray *mnames=[[NSMutableArray alloc]init];
	NSEnumerator *emu=[fileList objectEnumerator];
	NSString *path;
	while (path=[emu nextObject]) {
		// ファイル全体を読み込む
	//	nslog(@"path=%@",path);
		NSString *_bunName=@""; // Analyzeの警告回避用
		NSString *tateyoko=@"";
#if 1
		NSDictionary *data=[NSDictionary dictionaryWithContentsOfFile:path];
		// 文書名
		if (fjanapnese) {
			_bunName   =[data objectForKey:KeyBunNameJ];	// 文書名
		} else {
			_bunName   =[data objectForKey:KeyBunNameE];	// 文書名
		}
		if ([[data objectForKey:KeyFtategaki]boolValue]) {
			tateyoko=NSLocalStr(@"TATE");
		} else {
			tateyoko=NSLocalStr(@"YOKO");
		}
#else
		NSString *data=[[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
		// 改行で行分割する : 改行文字は入る
		NSArray *lines=[NSArray arrayWithArray:[data componentsSeparatedByString:@"\n"]];
		[data release];
		// 行の認識
		NSString *str=@""; // Analyzeの警告回避用
		NSUInteger i=0; // 実効行数
		for (NSInteger j=0;j<[lines count]-1;j++) { // 最終行であるBOMだけの行をアクセスするとなぜか落ちるので省く
			str=lines[j];
			if ([[str substringToIndex:1]isEqualToString:@";"]) {
				//	nslog(@"コメント行:%@",str);
				continue;
			}
			// 有効行
			switch (i++) {
				case BUNSHO_INFO_JNAME: // 文書名(日)
					if (fjanapnese) _bunName=str;
					break;
				case BUNSHO_INFO_ENAME: // 文書名(英)
					if (!fjanapnese) _bunName=str;
					break;
				case BUNSHO_INFO_FTATEGAKI: // 縦書き
					if ([str hasPrefix:@"YES"]) { // 先頭からの比較
						tateyoko=NSLocalStr(@"TATE");
					} else {
						tateyoko=NSLocalStr(@"YOKO");
					}
					break;
			}
		}
#endif
		[mnames addObject:[NSString stringWithFormat:@"%@ : %@",tateyoko,_bunName]];
		//[mnames addObject:_bunName];
	}
	//
	NSArray *names=[NSArray arrayWithArray:mnames]; // ローカルにコピー
	nslog(@"文書名群=%@",names);
	return names;
}

// 1ファイルを読み込み情報を設定する
// path=フルパス名
-(void)load:(NSString *)path
{
	// ファイル読み込み
	nslog(@"load:%@",path);

	// ファイル名＋拡張子のみ記録する;copy属性を活かすにはプロパティ式で記述する必要がある
	self.fname=[path lastPathComponent];

	BOOL fjanapnese=[NSLocalStr(@"LOCAL") isEqualToString:LOCAL_JAPAN]; // ローカライズのためのフラグ
#if 1
	// ファイル全体を読み込む
	NSDictionary *data=[NSDictionary dictionaryWithContentsOfFile:path];
	nslog(@"data=%@",data);

	// 文書名
	if (fjanapnese) {
		self.bunName   =[data objectForKey:KeyBunNameJ];	// 文書名
		self.attachName=[data objectForKey:KeyAttachFileJ];	// 添付ファイル名
	} else {
		self.bunName   =[data objectForKey:KeyBunNameE];	// 文書名
		self.attachName=[data objectForKey:KeyAttachFileE];	// 添付ファイル名
	}
	_ftategaki =[[data objectForKey:KeyFtategaki]boolValue];
	_maxKetas  =[[data objectForKey:KeyKetas]integerValue];
	self.font5=[ data objectForKey:KeyFontNameiOS5]; // 標準フォント(iOS5/6)
	self.font4=[ data objectForKey:KeyFontNameiOS4]; // 標準フォント(iOS4)
	self.text  =[data objectForKey:KeyText];		 // テキスト
#else
	// ファイル全体を読み込む
	NSString *data=[[NSString alloc]initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//	nslog(@"data=%@",data);
	// 改行で行分割する : 改行文字は入る
	NSArray *lines=[NSArray arrayWithArray:[data componentsSeparatedByString:@"\n"]];
	[data release];
//	nslog(@"lines(%d)=%@",[lines count],lines);
	// BOMだけの行は""になって返ってくる。
	
	// 行の認識
	NSMutableString *allText=[[NSMutableString alloc]init];
	NSUInteger i=0; // 実効行数
	for (NSInteger j=0;j<[lines count]-1;j++) { // 最終行であるBOMだけの行をアクセスするとなぜか落ちるので省く
		NSString *str=lines[j];
		if ([[str substringToIndex:1]isEqualToString:@";"]) {
		//	nslog(@"コメント行:%@",str);
			continue;
		}
		//nslog(@"str=%@<",str);

		// 有効行
		// クラスメンバに文書情報を格納する
		switch (i++) {
			case BUNSHO_INFO_JNAME: // 文書名(日)
				if (fjanapnese)  self.bunName=str;
				break;
			case BUNSHO_INFO_ENAME: // 文書名(英)
				if (!fjanapnese) self.bunName=str;
				break;
			case BUNSHO_INFO_JATTACH: // 添付ファイル名(日)
				if (fjanapnese)  self.attachName=str;
				break;
			case BUNSHO_INFO_EATTACH: // 添付ファイル名(英)
				if (!fjanapnese) self.attachName=str;
				break;
			case BUNSHO_INFO_FTATEGAKI: // 縦書きフラグ
				_ftategaki=[str hasPrefix:@"YES"]; // 先頭からの比較
				break;
			case BUNSHO_INFO_LINES: // 縦行数
				_maxKetas=[str integerValue];
				break;
			case BUNSHO_INFO_FONT5: // 標準フォント(iOS5);v2.0
				self.font5 = str;
				break;
			case BUNSHO_INFO_FONT4: // 標準フォント(iOS4);v2.0
				self.font4 = str;
				break;
			default: // テキスト
				[allText appendString:str];
				break;
		}
	}
	nslog(@"実効行数:%d",i);
	self.text=allText;
	[allText release];
#endif
	nslog(@"文書名:%@",_bunName);	// 選択時に表示するのはこれ
	nslog(@"添付ファイル名:%@",_attachName);
	nslog(@"縦書き:%d",_ftategaki);
	nslog(@"縦行数:%d",(int)_maxKetas);
	nslog(@"iOS5/6標準フォント:%@",_font5); // v2.0
	nslog(@"iOS4  標準フォント:%@",_font4); // v2.0
}


@end
