Index: sakura_core/CDlgFuncList.cpp
===================================================================
--- sakura_core/CDlgFuncList.cpp	(revision 1064)
+++ sakura_core/CDlgFuncList.cpp	(working copy)
@@ -237,6 +237,14 @@
 		SetTreeJava( m_hWnd, TRUE );
 		::SetWindowText( m_hWnd, "Java ƒ�ƒ\ƒbƒhƒcƒŠ�[" );
 	}else
+	//	2007.02.08 genta Python’Ç‰Á
+	if( OUTLINE_PYTHON == m_nListType ){ /* Python ƒ�ƒ\ƒbƒhƒcƒŠ�[ */
+		m_nViewType = 1;
+		//	@Todo Œµ–§‚É‚Í‚±‚ê‚¾‚ÆCOPYƒf�[ƒ^‚ªTag jump‚É‚È‚ç‚È‚¢‚Ì‚Å
+		//	‚æ‚ë‚µ‚­‚È‚¢�DSetTreeJava‚ð‰ü‘¢‚·‚é‚©�ê—p‚Ì‚à‚Ì‚ð�ì‚é‚×‚«
+		SetTree();
+		::SetWindowText( m_hWnd, "Python ƒ�ƒ\ƒbƒhƒcƒŠ�[" );
+	}else
 	if( OUTLINE_COBOL == m_nListType ){ /* COBOL ƒAƒEƒgƒ‰ƒCƒ“ */
 		//	May 18, 2001 genta
 		//	Window‚ª‚¢‚È‚­‚È‚é‚ÆŒã‚Å“s�‡‚ªˆ«‚¢‚Ì‚Å�A•\Ž¦‚µ‚È‚¢‚¾‚¯‚É‚µ‚Ä‚¨‚­
Index: sakura_core/CEditDoc.h
===================================================================
--- sakura_core/CEditDoc.h	(revision 1064)
+++ sakura_core/CEditDoc.h	(working copy)
@@ -263,6 +263,7 @@
 	void			MakeTopicList_asm( CFuncInfoArr* );		/* ƒAƒZƒ“ƒuƒ‰ ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í */
 	void			MakeFuncList_Perl( CFuncInfoArr* );		/* PerlŠÖ�”ƒŠƒXƒg�ì�¬ */	//	Sep. 8, 2000 genta
 	void			MakeFuncList_VisualBasic( CFuncInfoArr* );/* Visual BasicŠÖ�”ƒŠƒXƒg�ì�¬ */ //June 23, 2001 N.Nakatani
+	void			MakeFuncList_python( CFuncInfoArr* pcFuncInfoArr ); /* Python ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í*/ // 2007.02.08 genta
 	void			MakeTopicList_wztxt(CFuncInfoArr*);		/* ŠK‘w•t‚«ƒeƒLƒXƒg ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í */ // 2003.05.20 zenryaku
 	void			MakeTopicList_html(CFuncInfoArr*);		/* HTML ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í */ // 2003.05.20 zenryaku
 	void			MakeTopicList_tex(CFuncInfoArr*);		/* TeX ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í */ // 2003.07.20 naoh
Index: sakura_core/CEditDoc_FuncList1.cpp
===================================================================
--- sakura_core/CEditDoc_FuncList1.cpp	(revision 1064)
+++ sakura_core/CEditDoc_FuncList1.cpp	(working copy)
@@ -1040,3 +1040,159 @@
 	}
 	return;
 }
+
+/*!
+	ŠÖ�”‚É—p‚¢‚é‚±‚Æ‚ª‚Å‚«‚é•¶Žš‚©‚Ç‚¤‚©‚Ì”»’è
+	
+	@date 2007.02.08 genta
+
+	@note Œµ–§‚É‚Í1•¶Žš–Ú‚É�”Žš‚ðŽg‚¤‚±‚Æ‚Í�o—ˆ‚È‚¢‚ª�C
+		‚»‚ê‚ÍŽÀ�s‚µ‚Ä‚Ý‚ê‚Î–¾‚ç‚©‚É‚í‚©‚é‚±‚Æ‚È‚Ì‚Å
+		‚»‚±‚Ü‚ÅŒµ–§‚Éƒ`ƒFƒbƒN‚µ‚È‚¢
+*/
+inline bool Python_IsWordChar( char c ){
+	return ( '_' == c ||
+			('a' <= c && c <= 'z' )||
+			('A' <= c && c <= 'Z' )||
+			('0' <= c && c <= '9' )
+		);
+}
+
+/*!	@brief pythonŠÖ�”ƒŠƒXƒg�ì�¬
+
+	class, def ‚ÅŽn‚Ü‚é�s‚©‚ç–¼‘O‚ð”²‚«�o‚·�D
+	
+	class CLASS_NAME( superclass ):
+	def FUNCTION_NAME( parameters ):
+
+	@date 2007.02.08 genta �V‹K�ì�¬
+
+	@note ‚±‚±‚Ízlib/libpng ƒ‰ƒCƒZƒ“ƒX‚ÅOK
+*/
+void CEditDoc::MakeFuncList_python( CFuncInfoArr* pcFuncInfoArr )
+{
+	int			nLineLen;
+	int			nLineCount;
+
+	const int MAX_DEPTH = 10;
+
+	int indent_level[ MAX_DEPTH ];
+	indent_level[0] = 0;	// do as python does.
+
+	int depth_index = 0;
+
+	for( nLineCount = 0; nLineCount <  m_cDocLineMgr.GetLineCount(); ++nLineCount ){
+		const char*	pLine;
+		int d;	//	indent depth
+		int nItemFuncId;	// topic type
+
+		pLine = m_cDocLineMgr.GetLineStr( nLineCount, &nLineLen );
+		
+		for( d = 0; d < nLineLen; ++d ){
+			//	calculate indent level
+			if( pLine[d] == ' ' ){
+				++d;
+			}
+			else if( pLine[d] == '\t' ){
+				d = ( d + 8 ) & 7;
+			}
+			else {
+				break;
+			}
+		}
+		if( pLine[d] == '\r' ||
+			pLine[d] == '\n' ||
+			pLine[d] == '\0' ||
+			pLine[d] == '#' ){
+			//	blank line or comment line are ignored
+			continue;
+		}
+		
+		//	adjust current depth level
+		int i;
+		for( i = depth_index; i >= 0; --i ){
+			if( d == indent_level[ i ] ){
+				depth_index = i;
+				break;
+			}
+			else if( d > indent_level[ i ] && i < MAX_DEPTH - 1 ){
+				depth_index = i + 1;
+				indent_level[ depth_index ] = d;
+				break;
+			}
+		}
+		
+		int w_start = d;
+		if( nLineLen - d > 4 && strncmp( pLine + d, "def", 3 ) == 0 ){
+			//	"def"
+			nItemFuncId = 1;
+			w_start = d + 3; // strlen( def )
+		}
+		else if( nLineLen - d > 6 && strncmp( pLine + d, "class", 3 ) == 0 ){
+			// class
+			nItemFuncId = 4;
+			w_start = d + 5; // strlen( class )
+		}
+		else {
+			//	non-significant
+			continue;
+		}
+		
+		//	2007.02.08 genta Žè”²‚«ƒRƒ�ƒ“ƒg
+		//	Œµ–§‚É‚Í�C‚±‚±‚ÅŒp‘±�s‚ð“ü‚ê‚é‚±‚Æ‚ª‰Â”\‚¾‚ª�C
+		//	‚»‚ñ‚ÈƒŒƒA‚ÈƒP�[ƒX‚Í�l—¶‚µ‚È‚¢
+		
+		//	skip whitespace
+		while( w_start < nLineLen && C_IsSpace( pLine[w_start] ))
+			++w_start;
+
+		int w_end;
+		for( w_end = w_start; w_end < nLineLen
+				&& Python_IsWordChar( pLine[w_end] ); ++w_end )
+			;
+		
+		//	2007.02.08 genta Žè”²‚«ƒRƒ�ƒ“ƒg
+		//	Œµ–§‚É‚Í�C‚±‚ÌŒã‚ÉŠ‡ŒÊ‚ÉˆÍ‚Ü‚ê‚½ˆø�”‚ ‚é‚¢‚ÍŒp�³Œ³ƒNƒ‰ƒX‚ª
+		//	Š‡ŒÊ‚ÉˆÍ‚Ü‚ê‚Ä“ü‚è�C‚³‚ç‚É:‚Æ‘±‚­‚ª
+		//	Œp‘±�s‚Ì‰Â”\�«‚ª‚ ‚é‚Ì‚Å�C‚»‚±‚Ü‚Åƒ`ƒFƒbƒN‚µ‚È‚¢
+		
+		//	‚±‚±‚Ü‚Å‚Å“o˜^—vŒ�OK‚Æ‚Ý‚È‚·
+		
+		//	‚±‚Ì‚ ‚½‚è‚ÍŽb’è
+
+		char szWord[512];	// “K“–‚É‘å‚«‚È�”(python‚Å‚Í–¼‘O‚Ì’·‚³‚Ì�ãŒÀ‚ª‚ ‚é‚Ì‚©�H)
+		int len = w_end -w_start;
+		
+		if( len > 0 ){
+			if( len > sizeof( szWord ) - 1){
+				len = sizeof( szWord ) - 1;
+			}
+			strncpy( szWord, pLine + w_start, len );
+			szWord[ len ] = '\0';
+		}
+		else {
+			strcpy( szWord, "–¼�Ì–¢’è" );
+			len = 8;
+		}
+		if( nItemFuncId == 4 && sizeof( szWord ) - len > 8 ){
+			// class
+			strcpy( szWord + len, " ƒNƒ‰ƒX" );
+		}
+		
+		/*
+		  ƒJ�[ƒ\ƒ‹ˆÊ’u•ÏŠ·
+		  •¨—�ˆÊ’u(�s“ª‚©‚ç‚ÌƒoƒCƒg�”�A�Ü‚è•Ô‚µ–³‚µ�sˆÊ’u)
+		  �¨
+		  ƒŒƒCƒAƒEƒgˆÊ’u(�s“ª‚©‚ç‚Ì•\Ž¦Œ…ˆÊ’u�A�Ü‚è•Ô‚µ‚ ‚è�sˆÊ’u)
+		*/
+		int		nPosX;
+		int		nPosY;
+		m_cLayoutMgr.CaretPos_Phys2Log(
+			0,
+			nLineCount/*nFuncLine - 1*/,
+			&nPosX,
+			&nPosY
+		);
+		pcFuncInfoArr->AppendData( nLineCount + 1, nPosY + 1, szWord, nItemFuncId, depth_index );
+	}
+}
Index: sakura_core/CEditView_Command.cpp
===================================================================
--- sakura_core/CEditView_Command.cpp	(revision 1064)
+++ sakura_core/CEditView_Command.cpp	(working copy)
@@ -4630,6 +4630,7 @@
 	case OUTLINE_FILE:		m_pcEditDoc->MakeFuncList_RuleFile( &cFuncInfoArr );break;	//	2002.04.01 YAZAKI ƒAƒEƒgƒ‰ƒCƒ“‰ð�Í‚Éƒ‹�[ƒ‹ƒtƒ@ƒCƒ‹‚ð“±“ü
 	case OUTLINE_TEXT:
 //	case OUTLINE_UNKNOWN:	//Jul. 08, 2001 JEPRO Žg‚í‚È‚¢‚æ‚¤‚É•Ï�X
+	case OUTLINE_PYTHON:	m_pcEditDoc->MakeFuncList_python(&cFuncInfoArr);break;		// 2007.02.08 genta
 	default:
 		m_pcEditDoc->MakeTopicList_txt( &cFuncInfoArr );
 		break;
Index: sakura_core/CPropTypes.cpp
===================================================================
--- sakura_core/CPropTypes.cpp	(revision 1064)
+++ sakura_core/CPropTypes.cpp	(working copy)
@@ -45,6 +45,7 @@
 	{ OUTLINE_PERL,		"Perl" },			//Sep. 8, 2000 genta
 	{ OUTLINE_ASM,		"ƒAƒZƒ“ƒuƒ‰" },
 	{ OUTLINE_VB,		"Visual Basic" },	// 2001/06/23 N.Nakatani
+	{ OUTLINE_PYTHON,	"Python" },		//	2007.02.08 genta
 	{ OUTLINE_WZTXT,	"WZŠK‘w•tƒeƒLƒXƒg" },	// 2003.05.20 zenryaku, 2003.06.23 Moca –¼�Ì•Ï�X
 	{ OUTLINE_HTML,		"HTML" },			// 2003.05.20 zenryaku
 	{ OUTLINE_TEX,		"TeX" },			// 2003.07.20 naoh
Index: sakura_core/global.h
===================================================================
--- sakura_core/global.h	(revision 1064)
+++ sakura_core/global.h	(working copy)
@@ -239,6 +239,7 @@
 	OUTLINE_HTML,		// 2003.05.20 zenryaku HTMLƒAƒEƒgƒ‰ƒCƒ“‰ð�Í
 	OUTLINE_TEX,		// 2003.07.20 naoh TeXƒAƒEƒgƒ‰ƒCƒ“‰ð�Í
 	OUTLINE_FILE,		//	2002.04.01 YAZAKI ƒ‹�[ƒ‹ƒtƒ@ƒCƒ‹—p
+	OUTLINE_PYTHON,		//	2007.02.08 genta PythonƒAƒEƒgƒ‰ƒCƒ“‰ð�Í
 	OUTLINE_CODEMAX,
 	OUTLINE_BOOKMARK,	//	2001.12.03 hor
 	OUTLINE_DEFAULT =-1,//	2001.12.03 hor
