浏览代码

*** empty log message ***

Pascal Peridont 17 年之前
父节点
当前提交
6d09f2b58c
共有 2 个文件被更改,包括 19 次插入24 次删除
  1. 17 22
      std/mtwin/mail/Part.hx
  2. 2 2
      std/mtwin/mail/Tools.hx

+ 17 - 22
std/mtwin/mail/Part.hx

@@ -313,33 +313,26 @@ class MetaPart<T> {
 		if( id == null ) subPart = false;
 		this.id = id;
 
-		var arr = Tools.splitLines(str);
 		var head : List<String> = new List();
-
-		var inHead = true;
 		var buf = new StringBuf();
-		
-		for( ln in arr ){
-			if( !inHead ){
-				buf.add( Tools.removeCRLF(ln) );
-				buf.add("\r\n");
+
+		var arr = str.split("\n");
+		while( arr.length > 0 ){
+			var ln = arr.shift();
+			if( ln.length == 0 || ln == "\r" ){
+				head.add( buf.toString() );
+				break;
 			}else{
-				if( Tools.removeCRLF(ln).length == 0 ){
-					inHead = false;
+				if( ~/^\s/.match( ln )  ){
+					buf.add( Tools.removeCRLF(ln) );
+				}else{
 					head.add( buf.toString() );
 					buf = new StringBuf();
-				}else{
-					if( ~/^\s/.match( ln )  ){
-						buf.add( Tools.removeCRLF(ln) );
-					}else{
-						head.add( buf.toString() );
-						buf = new StringBuf();
-						buf.add( Tools.removeCRLF(ln) );
-					}
+					buf.add( Tools.removeCRLF(ln) );
 				}
 			}
 		}
-		content = buf.toString();
+		content = arr.join("\n");
 		
 		for( ln in head ){
 			if( REG_HEADER.match(ln) ){
@@ -426,9 +419,11 @@ class MetaPart<T> {
 			var i = 0;
 			for( str in tmp ){
 				i++;
-				if( REG_CRLF_END.match(str) ){
-					str = str.substr(0,-REG_CRLF_END.matched(1).length);
-				}
+				var t = str.substr(-2,2);
+				if( t == "\r\n" )
+					str = str.substr(0,-2);
+				else if( t.substr(1) == "\n" )
+					str = str.substr(0,-1);
 				
 				var p = cast newPart("text/plain");
 				p.parse( StringTools.trim(str), myId+i );

+ 2 - 2
std/mtwin/mail/Tools.hx

@@ -38,7 +38,7 @@ class Tools {
 	static var REG_HEADER_DECODE = ~/^(.*?)=\?([^\?]+)\?(Q|B)\?([^?]*)\?=\s*(.*?)$/i;
 	static var REG_QP_LB = ~/=\\r?\\n/;
 	static var REG_QP = ~/=([A-Fa-f0-9]{1,2})/;
-	static var REG_SPACES = ~/\s+/g;
+	static var REG_SPACES_EQUAL = ~/[\s=]+/g;
 	
 	public static function chunkSplit( str:String, length:Int, sep:String ){
 		var ret = "";
@@ -70,7 +70,7 @@ class Tools {
 	}
 
 	public static function decodeBase64( content : String ){
-		content = StringTools.replace(REG_SPACES.replace(content,""),"=","");
+		content = REG_SPACES_EQUAL.replace(content,"");
 		return try haxe.BaseCode.decode( content, BASE64 ) catch( e : Dynamic ) content;
 	}