From 5647de8cd664228a18db77b39248dc6bdbca46b7 Mon Sep 17 00:00:00 2001 From: sdottaka Date: Sat, 12 Aug 2023 14:34:59 +0900 Subject: [PATCH] Add Convert to HTML and View Line Numbers menu item --- Externals/crystaledit/Sample/Sample.rc | 2 + Externals/crystaledit/Sample/SampleView.cpp | 92 +++++++++++++++++++++++++++++ Externals/crystaledit/Sample/SampleView.h | 4 ++ Externals/crystaledit/Sample/resource.h | 2 + 4 files changed, 100 insertions(+) diff --git a/Externals/crystaledit/Sample/Sample.rc b/Externals/crystaledit/Sample/Sample.rc index b8f382f4b..7e7118f6f 100755 --- a/Externals/crystaledit/Sample/Sample.rc +++ b/Externals/crystaledit/Sample/Sample.rc @@ -114,6 +114,7 @@ BEGIN MENUITEM "Print Preview", ID_FILE_PRINT_PREVIEW MENUITEM "Pa&ge Setup...", ID_FILE_PAGE_SETUP MENUITEM "P&rint Setup...", ID_FILE_PRINT_SETUP + MENUITEM "Convert to &HTML...", ID_FILE_CONVERT_TO_HTML MENUITEM SEPARATOR MENUITEM "Recent File", ID_FILE_MRU_FILE1, GRAYED MENUITEM SEPARATOR @@ -189,6 +190,7 @@ BEGIN MENUITEM "View T&op Margins", ID_VIEW_TOPMARGIN MENUITEM "W&rap Lines", ID_VIEW_WORDWRAP MENUITEM "&View Whitespace", ID_VIEW_WHITESPACE + MENUITEM "View Line &Numbers", ID_VIEW_LINENUMBERS MENUITEM "Select &Font...", ID_VIEW_SELECT_FONT MENUITEM SEPARATOR MENUITEM "&Toolbar", ID_VIEW_TOOLBAR diff --git a/Externals/crystaledit/Sample/SampleView.cpp b/Externals/crystaledit/Sample/SampleView.cpp index 03f0eed91..91162707d 100755 --- a/Externals/crystaledit/Sample/SampleView.cpp +++ b/Externals/crystaledit/Sample/SampleView.cpp @@ -27,12 +27,15 @@ BEGIN_MESSAGE_MAP(CSampleView, CCrystalEditView) ON_COMMAND(ID_FILE_PRINT, CCrystalEditView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CCrystalEditView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CCrystalEditView::OnFilePrintPreview) + ON_COMMAND(ID_FILE_CONVERT_TO_HTML, OnFileConvertToHTML) ON_COMMAND(ID_VIEW_SELMARGIN, OnSelMargin) ON_COMMAND(ID_VIEW_TOPMARGIN, OnTopMargin) ON_COMMAND(ID_VIEW_WORDWRAP, OnWordWrap) ON_COMMAND(ID_VIEW_WHITESPACE, OnViewWhitespace) + ON_COMMAND(ID_VIEW_LINENUMBERS, OnViewLineNumbers) ON_COMMAND(ID_VIEW_SELECT_FONT, OnViewSelectFont) ON_UPDATE_COMMAND_UI(ID_VIEW_WHITESPACE, OnUpdateViewWhitespace) + ON_UPDATE_COMMAND_UI(ID_VIEW_LINENUMBERS, OnUpdateViewLineNumbers) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// @@ -140,6 +143,18 @@ void CSampleView::OnUpdateViewWhitespace(CCmdUI* pCmdUI) pCmdUI->SetCheck(GetViewTabs()); } +void CSampleView::OnViewLineNumbers() +{ + GetDocument()->ForEachView([](CSampleView* pView) { + pView->SetViewLineNumbers(!pView->GetViewLineNumbers()); + }); +} + +void CSampleView::OnUpdateViewLineNumbers(CCmdUI* pCmdUI) +{ + pCmdUI->SetCheck(GetViewLineNumbers()); +} + void CSampleView::OnViewSelectFont() { CFontDialog dlg; @@ -150,3 +165,80 @@ void CSampleView::OnViewSelectFont() SetFont(dlg.m_lf); } } + +bool CSampleView::ConvertToHTML(const CString& filename) +{ + LOGFONT lf; + CClientDC dc (CWnd::GetDesktopWindow()); + GetFont(lf); + int nFontSize = -MulDiv (lf.lfHeight, 72, dc.GetDeviceCaps (LOGPIXELSY)); + CString linemax; + linemax.Format(_T("%d"), GetLineCount()); + double marginWidth = GetViewLineNumbers() ? linemax.GetLength() / 1.5 + 0.5 : 0.5; + CString tableStyle; + tableStyle.Format( + _T("table { table-layout: fixed; width: 100%%; height: 100%%; border-collapse: collapse; font-size: %dpt;}\n"), nFontSize); + CString colgroup; + colgroup.Format( + _T("\n") + _T("\n") + _T("\n") + _T("\n"), marginWidth, marginWidth); + +#pragma warning(disable: 4996) + try + { + CStdioFile file(_tfopen(filename, _T("w, ccs=UTF-8"))); + file.WriteString( + _T("\n") + _T("\n") + _T("\n") + _T("\n") + _T("") + GetDocument()->GetPathName() + _T("\n") + _T("\n") + _T("\n") + _T("\n") + _T("\n") + + colgroup + ); + for (int line = 0; line < GetLineCount(); ++line) + { + CString ln; + if (GetViewLineNumbers()) + ln.Format(_T(""), line + 1); + else + ln.Format(_T("")); + file.WriteString(_T("")); + file.WriteString(ln); + file.WriteString(GetHTMLLine(line, _T("td"))); + file.WriteString(_T("\n")); + } + file.WriteString( + _T("
%d
\n") + _T("\n") + _T("\n")); + file.Close(); + return true; + } + catch (CFileException* pe) + { + TRACE(_T("File could not be opened, cause = %d\n"), pe->m_cause); + pe->Delete(); + } + return false; +} + +void CSampleView::OnFileConvertToHTML() +{ + CFileDialog dlg(FALSE, _T("htm"), 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOREADONLYRETURN, + _T("HTML Files (*.htm,*.html)|*.htm;*.html|All Files (*.*)|*.*||")); + if (dlg.DoModal() != IDOK) + return; + ConvertToHTML(dlg.GetPathName()); +} + diff --git a/Externals/crystaledit/Sample/SampleView.h b/Externals/crystaledit/Sample/SampleView.h index c1a1a89f0..5cc85d996 100755 --- a/Externals/crystaledit/Sample/SampleView.h +++ b/Externals/crystaledit/Sample/SampleView.h @@ -21,6 +21,7 @@ public: CSampleDoc* GetDocument(); virtual CCrystalTextBuffer *LocateTextBuffer() override; + bool ConvertToHTML(const CString& filename); protected: @@ -48,12 +49,15 @@ protected: // Generated message map functions protected: //{{AFX_MSG(CSampleView) + afx_msg void OnFileConvertToHTML(); afx_msg void OnContextMenu(CWnd* pWnd, CPoint point); afx_msg void OnSelMargin(); afx_msg void OnTopMargin(); afx_msg void OnWordWrap(); afx_msg void OnViewWhitespace(); afx_msg void OnUpdateViewWhitespace(CCmdUI* pCmdUI); + afx_msg void OnViewLineNumbers(); + afx_msg void OnUpdateViewLineNumbers(CCmdUI* pCmdUI); afx_msg void OnViewSelectFont(); //}}AFX_MSG DECLARE_MESSAGE_MAP() diff --git a/Externals/crystaledit/Sample/resource.h b/Externals/crystaledit/Sample/resource.h index 91e2c68ed..41b7efe84 100755 --- a/Externals/crystaledit/Sample/resource.h +++ b/Externals/crystaledit/Sample/resource.h @@ -52,6 +52,8 @@ #define ID_EDIT_FIND_PREVIOUS 32799 #define ID_VIEW_WHITESPACE 32800 #define ID_VIEW_SELECT_FONT 32801 +#define ID_VIEW_LINENUMBERS 32802 +#define ID_FILE_CONVERT_TO_HTML 32803 #define ID_EDIT_INDICATOR_COL 37900 #define ID_READ_ONLY 37901 #define ID_INDICATOR_ENCODING 37905 -- 2.11.0