亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? zscpascaleditorview.cpp

?? C++ mfc 源代碼
?? CPP
字號:
/////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998 by Juraj Rojko jrojko@twist.cz
// All rights reserved
//
// ZSCPascalEditorView.cpp : implementation of the CZSCPascalEditorView class
//

#include "stdafx.h"
#include "resource.h"

#include "ZSCPascalEditorDoc.h"
#include "ZSCPascalEditorView.h"
#include "StringTokenizer.h"
#include "ResultDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CZSCPascalEditorView

IMPLEMENT_DYNCREATE(CZSCPascalEditorView, CRichEditView)

BEGIN_MESSAGE_MAP(CZSCPascalEditorView, CRichEditView)
	//{{AFX_MSG_MAP(CZSCPascalEditorView)
	ON_CONTROL_REFLECT(EN_CHANGE, OnChange)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CRichEditView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRichEditView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRichEditView::OnFilePrintPreview)

	ON_NOTIFY_REFLECT(EN_PROTECTED, OnProtected)
	ON_MESSAGE(WM_SETTEXT, OnSetText)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CZSCPascalEditorView construction/destruction

CZSCPascalEditorView::CZSCPascalEditorView()
{
	m_chComment = 1;
	m_bCaseSensitive = FALSE;
	m_bChangeCase = TRUE;

	SetStringQuotes(_T("\""));

	SetKeywordColor(RGB(0,0,255), FALSE);
	SetConstantColor(RGB(0,0,0), TRUE);
	SetCommentColor(RGB(0,128,0), FALSE);
	SetNumberColor(RGB(255,0,255), FALSE);
	SetStringColor(RGB(255,128,255), FALSE);

	m_bInForcedChange = FALSE;
	m_changeType = ctUndo;
	m_crOldSel.cpMin = m_crOldSel.cpMax = 0;
}

CZSCPascalEditorView::~CZSCPascalEditorView()
{
}

BOOL CZSCPascalEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CRichEditView::PreCreateWindow(cs);
}


void CZSCPascalEditorView::OnInitialUpdate()
{
	// Set the printing margins (720 twips = 1/2 inch).
	SetMargins(CRect(720, 720, 720, 720));

	CRichEditView::OnInitialUpdate();
}

/////////////////////////////////////////////////////////////////////////////
// CZSCPascalEditorView printing

BOOL CZSCPascalEditorView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}


/////////////////////////////////////////////////////////////////////////////
// CZSCPascalEditorView diagnostics

#ifdef _DEBUG
void CZSCPascalEditorView::AssertValid() const
{
	CRichEditView::AssertValid();
}

void CZSCPascalEditorView::Dump(CDumpContext& dc) const
{
	CRichEditView::Dump(dc);
}

CZSCPascalEditorDoc* CZSCPascalEditorView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CZSCPascalEditorDoc)));
	return (CZSCPascalEditorDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CZSCPascalEditorView message handlers
void CZSCPascalEditorView::Initialize() 
{
	PARAFORMAT pf;
	pf.cbSize = sizeof(PARAFORMAT);
	pf.dwMask = PFM_TABSTOPS ;
	pf.cTabCount = MAX_TAB_STOPS;
	for( int itab = 0 ; itab < pf.cTabCount  ; itab++ )
		pf.rgxTabs[itab] = (itab + 1) * 1440/5 ;

	SetParaFormat( pf );

	CHARFORMAT cfDefault;
	cfDefault.cbSize = sizeof(cfDefault);
	cfDefault.dwEffects = CFE_PROTECTED; 
	cfDefault.dwMask = CFM_BOLD | CFM_FACE | CFM_SIZE | CFM_CHARSET | CFM_PROTECTED;
	cfDefault.yHeight = 200;
	cfDefault.bCharSet = 0xEE; 
	strcpy(cfDefault.szFaceName, _T("Courier New")); 

	GetRichEditCtrl().SetDefaultCharFormat(cfDefault);
	
	GetRichEditCtrl().SetEventMask(ENM_CHANGE | ENM_SELCHANGE | ENM_PROTECTED);
}

void CZSCPascalEditorView::SetSLComment(TCHAR chComment, TCHAR chComment2)
{
	m_chComment = chComment;
	m_chComment2 = chComment2;
}

void CZSCPascalEditorView::SetSLComment(LPCTSTR lpszComment)
{
	m_strComment = lpszComment;
}

void CZSCPascalEditorView::AddKeywords(LPCTSTR lpszKwd)
{
	m_strKeywords = m_strKeywords + lpszKwd;
	m_strKeywordsLower = m_strKeywords;
	if (!m_bCaseSensitive)
		m_strKeywordsLower.MakeLower();
}

void CZSCPascalEditorView::ClearKeywords()
{
	m_strKeywords.Empty();
	m_strKeywordsLower.Empty();
}							  

void CZSCPascalEditorView::AddConstants(LPCTSTR lpszConst)
{
	m_strConstants = m_strConstants + lpszConst;
	m_strConstantsLower = m_strConstants;
	if (!m_bCaseSensitive)
		m_strConstantsLower.MakeLower();
}

void CZSCPascalEditorView::ClearConstants()
{
	m_strConstants.Empty();
	m_strConstantsLower.Empty();
}							  

void CZSCPascalEditorView::SetCaseSensitive(BOOL bSensitive)
{
	m_bCaseSensitive = bSensitive;
}

void CZSCPascalEditorView::SetChangeCase(BOOL bChange)
{
	m_bChangeCase = bChange;
}

void CZSCPascalEditorView::SetStringQuotes(LPCTSTR lpszStrQ)
{
	m_strStringQuotes = lpszStrQ;
}

void CZSCPascalEditorView::SetKeywordColor(COLORREF clr, BOOL bBold)
{
	m_icKeyword.clrColor = clr;
	m_icKeyword.bBold = bBold;
}

void CZSCPascalEditorView::SetConstantColor(COLORREF clr, BOOL bBold)
{
	m_icConstant.clrColor = clr;
	m_icConstant.bBold = bBold;
}

void CZSCPascalEditorView::SetCommentColor(COLORREF clr, BOOL bBold)
{
	m_icComment.clrColor = clr;
	m_icComment.bBold = bBold;
}

void CZSCPascalEditorView::SetNumberColor(COLORREF clr, BOOL bBold)
{
	m_icNumber.clrColor = clr;
	m_icNumber.bBold = bBold;
}

void CZSCPascalEditorView::SetStringColor(COLORREF clr, BOOL bBold)
{
	m_icString.clrColor = clr;
	m_icString.bBold = bBold;
}
int CZSCPascalEditorView::IsKeyword(LPCTSTR lpszSymbol)
{
	CString strSymbol; strSymbol.Format(" %s ", lpszSymbol);
	if (!m_bCaseSensitive) 
		strSymbol.MakeLower();
				
	return m_strKeywordsLower.Find(strSymbol);
}

int CZSCPascalEditorView::IsConstant(LPCTSTR lpszSymbol)
{
	CString strSymbol; strSymbol.Format(" %s ", lpszSymbol);
	if (!m_bCaseSensitive) 
		strSymbol.MakeLower();
				
	return m_strConstantsLower.Find(strSymbol);
}

BOOL CZSCPascalEditorView::IsStringQuote(TCHAR ch)
{
	return (m_strStringQuotes.Find(ch) >= 0);
}


void CZSCPascalEditorView::SetFormatRange(int nStart, int nEnd, BOOL bBold, COLORREF clr)
{
	if (nStart >= nEnd)
		return;

	GetRichEditCtrl().SetSel(nStart, nEnd);

	DWORD dwEffects = bBold?CFE_BOLD:0;

	CHARFORMAT cfm;
	cfm.cbSize = sizeof(cfm);
    GetRichEditCtrl().GetSelectionCharFormat(cfm);
	
	if ((cfm.dwMask & CFM_COLOR)  && cfm.crTextColor == clr && 
		(cfm.dwMask & CFM_BOLD) && (cfm.dwEffects & CFE_BOLD) == dwEffects)
		return;

	cfm.dwEffects = dwEffects;
	cfm.crTextColor = clr;
	cfm.dwMask = CFM_BOLD | CFM_COLOR;

	GetRichEditCtrl().SetSelectionCharFormat(cfm);
}

void CZSCPascalEditorView::ChangeCase(int nStart, int nEnd, LPCTSTR lpsz)
{
	ASSERT((nEnd - nStart) == (int)_tcslen(lpsz));

	if (!m_bCaseSensitive && m_bChangeCase) {
		GetRichEditCtrl().SetSel(nStart, nEnd);
		GetRichEditCtrl().ReplaceSel(lpsz);
	}
}

void CZSCPascalEditorView::FormatTextRange(int nStart, int nEnd)
{
	if (nStart >= nEnd)
		return;

	m_bInForcedChange = TRUE;

	CHARRANGE crOldSel;

	GetRichEditCtrl().GetSel(crOldSel);
	LockWindowUpdate();
	GetRichEditCtrl().HideSelection(TRUE, FALSE);

	TCHAR *pBuffer = NULL;
	try {
		GetRichEditCtrl().SetSel(nStart, nEnd);
		pBuffer = new TCHAR[nEnd - nStart + 1];
		long nLen = GetRichEditCtrl().GetSelText(pBuffer);

		ASSERT(nLen <= nEnd - nStart);

		pBuffer[nLen] = 0;

		TCHAR *pStart, *pPtr;
		pStart = pPtr = pBuffer;

		TCHAR* pSymbolStart = NULL;
		SymbolColor ic;

		while (*pPtr != 0) {
			TCHAR ch = *pPtr;

			if (ch == m_chComment && (m_chComment2 == 0 || pPtr[1] == m_chComment2)) {
				pSymbolStart = pPtr;
				do {
					ch = *(++pPtr);
				} while (ch != 0 && ch != '\r');
				ic = m_icComment;
			} else if (IsStringQuote(ch)) { // Process strings
				pSymbolStart = pPtr;
				TCHAR ch1 = ch;
				do {
					ch = *(++pPtr);
				} while (ch != 0 && ch != ch1 && ch != '\r');
				if (ch == ch1) pPtr++;
				ic = m_icString;
			} else if (_istdigit(ch)) { // Process numbers
				pSymbolStart = pPtr;
				_tcstod(pSymbolStart, &pPtr);
				ic = m_icNumber;
			} else if (_istalpha(ch) || ch == '_') { // Process keywords
				pSymbolStart = pPtr;
				do {
					ch = *(++pPtr);
				} while (_istalnum(ch) || ch == '_');
				*pPtr = 0;
				int nPos = IsKeyword(pSymbolStart);
				if (nPos >= 0) {
					ChangeCase(nStart + pSymbolStart - pBuffer, nStart + pPtr - pBuffer, 
								m_strKeywords.Mid(nPos+1, pPtr - pSymbolStart));
					if (_tcsicmp(m_strComment, pSymbolStart) == 0) {
						*pPtr = ch;
						*pSymbolStart = m_chComment;
						if (pSymbolStart[1] != 0 && m_chComment2 != 0)
							pSymbolStart[1] = m_chComment2;
						pPtr = pSymbolStart;
						pSymbolStart = NULL;
						continue;
					}
					ic = m_icKeyword;
				} else {
					nPos = IsConstant(pSymbolStart);
					if (nPos >= 0) {
							ChangeCase(nStart + pSymbolStart - pBuffer, nStart + pPtr - pBuffer, 
										m_strConstants.Mid(nPos+1, pPtr - pSymbolStart));
						ic = m_icConstant;
					} else {
						pSymbolStart = NULL;
					}
				}
				*pPtr = ch;
			} else {
				pPtr++;
			}

			if (pSymbolStart != NULL) {
				ASSERT(pSymbolStart < pPtr);
				SetFormatRange(nStart + pStart - pBuffer, nStart + pSymbolStart - pBuffer, FALSE, RGB(0,0,0));
				SetFormatRange(nStart + pSymbolStart - pBuffer, nStart + pPtr - pBuffer, ic.bBold, ic.clrColor);
				pStart = pPtr;
				pSymbolStart = 0;
			} else if (*pPtr == 0)
				SetFormatRange(nStart + pStart - pBuffer, nStart + pPtr - pBuffer, FALSE, RGB(0,0,0));
		}

	} catch(...){}

	delete [] pBuffer;

	GetRichEditCtrl().SetSel(crOldSel);
	GetRichEditCtrl().HideSelection(FALSE, FALSE);
	UnlockWindowUpdate();

	m_bInForcedChange = FALSE;
}

void CZSCPascalEditorView::FormatTextLines(int nLineStart, int nLineEnd)
{
	long nStart = GetRichEditCtrl().LineIndex(GetRichEditCtrl().LineFromChar(nLineStart));
	long nEnd = GetRichEditCtrl().LineIndex(GetRichEditCtrl().LineFromChar(nLineEnd));
	nEnd += GetRichEditCtrl().LineLength(nLineEnd);

	FormatTextRange(nStart, nEnd);
}


void CZSCPascalEditorView::FormatAll()
{
	FormatTextRange(0, GetTextLength());
}

LRESULT CZSCPascalEditorView::OnSetText(WPARAM wParam, LPARAM lParam)
{
	LRESULT res = Default();
	//FormatAll();
	return res;	
}

void CZSCPascalEditorView::OnChange() 
{
	if (m_bInForcedChange)
		return;

	CHARRANGE crCurSel; 
	GetRichEditCtrl().GetSel(crCurSel);

	if (m_changeType == ctMove && crCurSel.cpMin == crCurSel.cpMax) {
		// cut was canceled, so this is paste operation
		m_changeType = ctPaste;
	}

	switch(m_changeType) {
	case ctReplSel:// old=(x,y) -> cur=(x+len,x+len)
	case ctPaste:  // old=(x,y) -> cur=(x+len,x+len)
		FormatTextLines(m_crOldSel.cpMin, crCurSel.cpMax);
		break;
	case ctDelete: // old=(x,y) -> cur=(x,x)
	case ctBack:   // old=(x,y) -> cur=(x,x), newline del => old=(x,x+1) -> cur=(x-1,x-1)
	case ctCut:    // old=(x,y) -> cur=(x,x)
		FormatTextLines(crCurSel.cpMin, crCurSel.cpMax);
		break;
	case ctUndo:   // old=(?,?) -> cur=(x,y)
		FormatTextLines(crCurSel.cpMin, crCurSel.cpMax);
		break;
	case ctMove:   // old=(x,x+len) -> cur=(y-len,y) | cur=(y,y+len)
		FormatTextLines(crCurSel.cpMin, crCurSel.cpMax);
		if (crCurSel.cpMin > m_crOldSel.cpMin) // move after
			FormatTextLines(m_crOldSel.cpMin, m_crOldSel.cpMin);
		else // move before
			FormatTextLines(m_crOldSel.cpMax, m_crOldSel.cpMax);
		break;
	default:
		FormatAll();
		break;
	}

	//undo action does not call OnProtected, so make it default
	m_changeType = ctUndo;
}

void CZSCPascalEditorView::OnProtected(NMHDR* pNMHDR, LRESULT* pResult)
{
	ENPROTECTED* pEP = (ENPROTECTED*)pNMHDR;

	// determine type of change will occur

	switch (pEP->msg) {
	case WM_KEYDOWN:
		switch (pEP->wParam) {
		case VK_DELETE:
			m_changeType = ctDelete;
			break;
		case VK_BACK:
			m_changeType = ctBack;
			break;
		default:
			m_changeType = ctUnknown;
			break;
		}
		break;
	case EM_REPLACESEL:
	case WM_CHAR:
		m_changeType = ctReplSel;
		break;
	case WM_PASTE:
		m_changeType = (m_changeType == ctCut)?ctMove:ctPaste;
		break;
	case WM_CUT:
		m_changeType = ctCut;
		break;
	case EM_SETCHARFORMAT:
		// Ignore this
		break;
	default:
		m_changeType = ctUnknown;
		break;
	};

	if (pEP->msg != EM_SETCHARFORMAT && m_changeType != ctMove)
		m_crOldSel = pEP->chrg;

	*pResult = FALSE;
}

static LPCTSTR szKeywords = " Program Const Var Procedure Function "
"Integer Real Char Array Record Begin End While Repeat For Case Print "
"Read If Until Then Else To DownTo Step Do "
"And Mod Div Not Or ";

static LPCTSTR szConstants = " MAXINT ";

int CZSCPascalEditorView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CRichEditView::OnCreate(lpCreateStruct) == -1)
		return -1;

	Initialize();

	SetCaseSensitive(FALSE);
	SetStringQuotes(_T("\""));
	SetSLComment(_T('/'), _T('/'));
	SetSLComment(_T("rem"));
	AddKeywords(szKeywords);
	AddConstants(szConstants);

	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产色综合久久| 91精品国产麻豆国产自产在线 | 亚洲乱码中文字幕综合| 色婷婷av久久久久久久| 亚洲成人动漫在线免费观看| 欧美成人欧美edvon| 免费不卡在线观看| 国产精品视频第一区| 欧美在线免费观看亚洲| 韩国精品一区二区| 久久久久久久综合色一本| 亚洲成av人片在www色猫咪| 亚洲一区二区三区在线看| 欧美色综合网站| 一区二区三区色| 国产在线视视频有精品| 国产91丝袜在线播放| 欧美本精品男人aⅴ天堂| 久久久久久久久岛国免费| 婷婷久久综合九色综合绿巨人| 日韩一区欧美二区| 色婷婷综合久色| 欧美一区中文字幕| 亚洲男人的天堂在线观看| 精品国产网站在线观看| 欧洲精品中文字幕| 国产精品一级二级三级| 亚洲一二三专区| 欧美国产日韩一二三区| 欧美一级片在线| 亚洲精品中文字幕乱码三区 | 日韩一区二区三区四区五区六区| 成人网男人的天堂| 一区二区三区四区精品在线视频 | 久久99久久精品欧美| 亚洲精品美腿丝袜| 国产欧美一区二区精品仙草咪| 欧美一区二区啪啪| 欧洲中文字幕精品| 国内精品免费在线观看| 亚洲bt欧美bt精品| 亚洲黄色免费网站| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品资源在线看| 同产精品九九九| 亚洲激情在线激情| 久久免费美女视频| 欧美成人一区二区三区| 91精品国产品国语在线不卡| 欧美人动与zoxxxx乱| 欧美偷拍一区二区| 成人av集中营| 成人一区二区三区视频在线观看| 国产精品1区二区.| 国产一区美女在线| 国产老肥熟一区二区三区| 蜜桃视频免费观看一区| 午夜精品福利一区二区蜜股av| 亚洲视频小说图片| 欧美午夜不卡在线观看免费| 欧美日韩第一区日日骚| 亚洲人成精品久久久久| 国产精品丝袜黑色高跟| 91精品国产综合久久小美女| 欧美一区二区视频免费观看| 欧美一个色资源| 国产精品免费视频观看| 亚洲图片有声小说| 人人狠狠综合久久亚洲| 成人黄色a**站在线观看| 欧美性猛交xxxx黑人交| 91精品国产91综合久久蜜臀| 欧美国产综合一区二区| 亚洲线精品一区二区三区八戒| 极品瑜伽女神91| 69堂成人精品免费视频| 亚洲精品视频免费看| 成人中文字幕在线| 亚洲精品在线观看视频| 日本中文字幕不卡| 欧美日本免费一区二区三区| 亚洲人成亚洲人成在线观看图片 | 成人免费视频视频在线观看免费| 日韩一级二级三级精品视频| 亚洲主播在线播放| 色综合天天综合狠狠| 中文字幕av在线一区二区三区| 麻豆一区二区在线| 欧美一级午夜免费电影| 日韩中文字幕av电影| 欧美影院午夜播放| 亚洲精品视频在线观看免费| 99re这里只有精品视频首页| 中日韩av电影| 粉嫩在线一区二区三区视频| 久久色在线观看| 国产做a爰片久久毛片| 欧美大胆人体bbbb| 免费成人av在线| 日韩三级在线观看| 免费欧美在线视频| 日韩欧美区一区二| 精品一区二区三区在线播放视频 | 欧美精品一区二区在线观看| 蜜桃免费网站一区二区三区| 日韩三区在线观看| 精品一区二区三区不卡| 久久亚洲二区三区| 粉嫩高潮美女一区二区三区| 国产日韩影视精品| 国产91丝袜在线播放| 国产精品二区一区二区aⅴ污介绍| 成人一区二区视频| 亚洲猫色日本管| 欧美亚日韩国产aⅴ精品中极品| 亚洲综合无码一区二区| 欧美图区在线视频| 男女男精品视频网| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品自拍毛片| 中文字幕日本乱码精品影院| 色欧美88888久久久久久影院| 亚洲成人av电影| 欧美一级高清片| 国产精品一区专区| 亚洲色图一区二区| 欧美日韩成人综合天天影院| 男人的j进女人的j一区| 久久精品无码一区二区三区| fc2成人免费人成在线观看播放| 一区二区三区中文字幕精品精品 | 国产精品沙发午睡系列990531| 97se亚洲国产综合自在线| 亚洲国产日产av| 日韩女优av电影在线观看| 国产精品99久久久久| 亚洲欧美日韩国产综合在线 | 亚洲视频资源在线| 欧美日韩你懂的| 精品一区二区在线播放| 国产精品国产三级国产aⅴ原创| 欧美丝袜自拍制服另类| 看片的网站亚洲| 1区2区3区欧美| 91麻豆精品久久久久蜜臀| 国产一区不卡在线| 一区二区三区精品视频| 精品1区2区在线观看| 日本韩国一区二区| 国内欧美视频一区二区| 一区二区三区四区高清精品免费观看 | 国产乱码一区二区三区| 亚洲欧美一区二区三区久本道91| 91精品国产综合久久久蜜臀粉嫩| 高清不卡在线观看av| 亚洲一区二三区| 久久久欧美精品sm网站| 欧美日韩一区中文字幕| 国模少妇一区二区三区| 亚洲一区二区高清| 久久精品视频一区二区三区| 欧美三级中文字幕| youjizz国产精品| 美女网站一区二区| 亚洲激情校园春色| 欧美国产精品久久| 日韩一区二区电影| 91精品办公室少妇高潮对白| 国产一区二区看久久| 婷婷夜色潮精品综合在线| 综合在线观看色| 久久九九久久九九| 777xxx欧美| 欧美午夜影院一区| 成人av电影在线观看| 激情久久五月天| 日韩精彩视频在线观看| 一区二区高清免费观看影视大全| 日本一区二区三区在线观看| 日韩一区二区在线看| 精品视频在线看| 91蜜桃视频在线| 国产不卡免费视频| 日本成人中文字幕在线视频| 一区二区三区国产豹纹内裤在线| 日本一区二区三区四区| 久久久久久久久久电影| 精品三级av在线| 欧美一级淫片007| 制服丝袜亚洲播放| 精品视频123区在线观看| 91免费版在线| 91网站视频在线观看| 成人av午夜影院| 成人精品电影在线观看| 国产精品夜夜爽| 国产精品自拍三区| 国产剧情一区在线| 国产成人午夜精品影院观看视频| 国内精品嫩模私拍在线|