MasterText/src/Main.bas

265 lines
7.8 KiB
QBasic
Raw Normal View History

2024-06-07 20:49:50 +03:00
Attribute VB_Name = "Main"
Option Explicit
Public Sub RunInputFile()
Call AccessUI.InputTargetFile
End Sub
Public Sub RunInputOpen()
Call AccessUI.ChooseTargetFileFromOpened
End Sub
Public Sub RunOpenTarget()
Call ActivateCurrentDocument
End Sub
Public Sub RunInputTemplate()
Call AccessUI.InputTemplate
End Sub
Public Sub RunCheckup()
Call ExecuteAll(bApplyFix:=False)
End Sub
Public Sub RunFixErrors()
Call ExecuteAll(bApplyFix:=True)
End Sub
Public Sub RunRecovery()
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dim xlUI As New API_XLWrapper: Call xlUI.SetDocument(ThisWorkbook)
Call xlUI.ResumeUI
End Sub
Public Sub ExecuteSingle(Optional bApplyFix As Boolean = True)
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dim target As API_WordEditGuard: Set target = PrepareTargetDocument
If target Is Nothing Then _
Exit Sub
AccessUI.PageCount = target.Document.ComputeStatistics(wdStatisticPages)
Dim sRuleID$: sRuleID = AccessUI.SingleRuleID
Dim dbRules As DB_Rules: Set dbRules = AccessRules
Dim iRule As IteratorRule: Set iRule = dbRules.FindRule(sRuleID)
Dim iProcessor As RulesProcessor: Set iProcessor = AccessProcessor
Dim xlUI As New API_XLWrapper: Call xlUI.SetDocument(ThisWorkbook)
Call xlUI.PauseUI
Call target.BeginEdit(AccessUI.RevisionEnabled)
Call dbRules.ClearStats
Call iProcessor.Init(target.Wrapper, AccessUI.ProduceRulesConfig)
Dim nMilliseconds&
nMilliseconds = RunRule(iProcessor, iRule, bApplyFix:=bApplyFix, DoDebug:=True)
Call iProcessor.FinalizeProcessing
Call target.EndEdit
Call xlUI.ResumeUI
If AccessUI.ShowDiff Then _
Call target.SaveAndShowDiff
Call Application.ActiveWorkbook.Activate
Call UserInteraction.ShowMessage(IM_RULES_COMPLETE, nMilliseconds, AccessUI.ErrorsCount, AccessUI.FixesCount)
End Sub
Public Sub RunFixStyles()
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Dim target As API_WordEditGuard: Set target = PrepareTargetDocument
If target Is Nothing Then _
Exit Sub
Dim wordWrap As New API_WordWrapper
Dim templateDoc As Word.Document: Set templateDoc = wordWrap.OpenDocument(AccessUI.TemplatePath)
If templateDoc Is Nothing Then _
Exit Sub
Call target.Document.ActiveWindow.Activate
Call CSE_ProgressBar.Init("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", _
sHeader:="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", _
maxVal:=target.Document.Styles.Count)
Call CSE_ProgressBar.ShowModeless
Call ProcessStyles(target.Document, templateDoc)
Call templateDoc.Close(SaveChanges:=False)
Call Unload(CSE_ProgressBar)
Call UserInteraction.ShowMessage(IM_STYLES_FIXED)
End Sub
Public Sub RunFixManualFormat()
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dim target As API_WordEditGuard: Set target = PrepareTargetDocument
If target Is Nothing Then _
Exit Sub
Dim iDoc As Word.Document: Set iDoc = target.Document
Call target.BeginEdit(AccessUI.RevisionEnabled)
Call CSE_ProgressBar.Init("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", _
sHeader:="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", _
maxVal:=iDoc.Range.End)
Call CSE_ProgressBar.ShowModeless
Call SelectVisibleText(iDoc)
With iDoc
.Range.NoProofing = False
.Application.Selection.ClearCharacterDirectFormatting
.Application.Selection.ClearParagraphDirectFormatting
.Range.NoProofing = True
Call .Paragraphs(1).Range.Select
End With
Call target.EndEdit
Call Unload(CSE_ProgressBar)
Call MsgBox("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
End Sub
Public Sub RunChooseRules()
Dim dbRules As DB_Rules: Set dbRules = AccessRules
Call RulesDlg.Init(dbRules)
Call RulesDlg.Show
If RulesDlg.isCanceled_ Then _
Exit Sub
Dim iSelected As Scripting.Dictionary: Set iSelected = RulesDlg.GetSelectedIDList()
Call Unload(RulesDlg)
Dim iRule As IteratorRule: Set iRule = dbRules.IBegin
Do Until iRule.IsDone
iRule.Enabled = iSelected.Exists(iRule.RuleID)
Call iRule.Increment
Loop
End Sub
Public Sub OpenBannedWords()
Dim fso As New Scripting.FileSystemObject
Dim sFile$: sFile = CONCEPT_SERVER_HOME & CONCEPT_BANNED_WORDS
If Not fso.FileExists(sFile) Then
Call UserInteraction.ShowMessage(EM_MISSING_FILE, sFile)
Exit Sub
End If
Dim oShell As New Shell32.Shell
Call oShell.Open(sFile)
End Sub
Public Sub UpdateBannedWords()
If TryUpdateBannedWords Then
Call UserInteraction.ShowMessage(IM_UPDATE_BANNED_SUCCESS)
Else
Call UserInteraction.ShowMessage(IM_UPDATE_BANNED_FAIL)
End If
End Sub
Public Sub ClearWordFormat()
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dim target As API_WordEditGuard: Set target = PrepareTargetDocument
If target Is Nothing Then _
Exit Sub
Call target.BeginEdit(AccessUI.RevisionEnabled)
Call target.EndEdit
Call UserInteraction.ShowMessage(IM_FORMAT_CLEARED)
End Sub
Public Sub ChangeEncoding()
Call ChangeCharset(AccessUI.TargetPath, Range("c_CodeInput"), Range("c_CodeOutput"))
Call MsgBox("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", vbInformation)
End Sub
Public Sub RunHelp()
Dim iWord As New API_WordWrapper
Dim iHelp As Word.Document: Set iHelp = iWord.OpenDocument(APP_HELP, bReadOnly:=True)
If iHelp Is Nothing Then _
Exit Sub
With iHelp
.ActiveWindow.View.ReadingLayout = False
Call .Application.Activate
End With
End Sub
' ==========
Private Function PrepareTargetDocument() As API_WordEditGuard
Dim applWord As API_WordWrapper: Set applWord = OpenTargetDocument
If applWord Is Nothing Then _
Exit Function
If applWord.Document.ReadOnly Then ' ReadOnly <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Call UserInteraction.ShowMessage(EM_DOC_READONLY)
Call applWord.Document.ActiveWindow.Activate
Exit Function
End If
If applWord.Document.Comments.Count > 0 Then
If Not UserInteraction.AskQuestion(QM_WARN_COMMENTS) Then _
Exit Function
Call applWord.Document.DeleteAllComments
End If
If Not applWord.Document.Saved Then
If UserInteraction.AskQuestion(QM_SAVE_DOC) Then _
Call applWord.Document.Save
End If
Set PrepareTargetDocument = New API_WordEditGuard
Call PrepareTargetDocument.Init(applWord)
End Function
Private Function ExecuteAll(Optional bApplyFix As Boolean = True)
' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dim target As API_WordEditGuard: Set target = PrepareTargetDocument
If target Is Nothing Then _
Exit Function
AccessUI.PageCount = target.Document.ComputeStatistics(wdStatisticPages)
Dim dbRules As DB_Rules: Set dbRules = AccessRules
Dim xlUI As New API_XLWrapper: Call xlUI.SetDocument(ThisWorkbook)
Call xlUI.PauseUI
Call target.BeginEdit(AccessUI.RevisionEnabled)
Call AccessRules.ClearStats
Call CSE_ProgressBar.Init("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", sHeader:="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", maxVal:=dbRules.Count, canInterrupt:=True)
Call CSE_ProgressBar.ShowModeless
Dim iProcessor As RulesProcessor: Set iProcessor = AccessProcessor()
Call iProcessor.Init(target.Wrapper, AccessUI.ProduceRulesConfig)
Dim wasInterrupted As Boolean: wasInterrupted = False
Dim nMilliseconds&: nMilliseconds = 0
Dim bFixFlag As Boolean
Dim iRule As IteratorRule: Set iRule = dbRules.IBegin
Do Until iRule.IsDone
If CSE_ProgressBar.Interrupted Then
wasInterrupted = True
Exit Do
End If
If iRule.Enabled Then
CSE_ProgressBar.Description = iRule.DescriptionLabel
bFixFlag = bApplyFix And iRule.ApplyFixes
nMilliseconds = nMilliseconds + RunRule(iProcessor, iRule, bFixFlag, AccessUI.DoDebug)
End If
Call CSE_ProgressBar.IncrementA
Call iRule.Increment
Loop
CSE_ProgressBar.Description = "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
Call iProcessor.FinalizeProcessing
Call Unload(CSE_ProgressBar)
Call target.EndEdit
Call xlUI.ResumeUI
Call UserInteraction.ShowMessage(IM_RULES_COMPLETE, nMilliseconds, AccessUI.ErrorsCount, AccessUI.FixesCount)
End Function