180 lines
6.3 KiB
OpenEdge ABL
180 lines
6.3 KiB
OpenEdge ABL
VERSION 1.0 CLASS
|
||
BEGIN
|
||
MultiUse = -1 'True
|
||
END
|
||
Attribute VB_Name = "ParserNPA"
|
||
Attribute VB_GlobalNameSpace = False
|
||
Attribute VB_Creatable = False
|
||
Attribute VB_PredeclaredId = False
|
||
Attribute VB_Exposed = False
|
||
' ====== Legal document title parser =======
|
||
' Shared module version: 20220614
|
||
' Tested in:
|
||
' Depends on:
|
||
' Required reference: z_ParserRegex, PC_InfoNPA
|
||
Option Explicit
|
||
|
||
Private rxTitleFirst_ As RegExp
|
||
Private rxTitleLast_ As RegExp
|
||
Private rxCreatorPrefix_ As RegExp
|
||
Private rxTitle_ As RegExp
|
||
Private rxImmediate_ As RegExp
|
||
|
||
Public data_ As New PC_InfoNPA
|
||
|
||
Private Sub Class_Initialize()
|
||
Set rxTitleFirst_ = New RegExp
|
||
rxTitleFirst_.Pattern = P_NPA_TITLE_FIRST
|
||
rxTitleFirst_.Global = False
|
||
|
||
Set rxTitleLast_ = New RegExp
|
||
rxTitleLast_.Pattern = P_NPA_PROPS_FIRST
|
||
rxTitleLast_.Global = False
|
||
|
||
Set rxCreatorPrefix_ = New RegExp
|
||
rxCreatorPrefix_.Pattern = P_NPA_DOCTYPE
|
||
rxCreatorPrefix_.Global = False
|
||
|
||
Set rxTitle_ = New RegExp
|
||
rxTitle_.Pattern = P_NPA_COMPOSITE_TITLE
|
||
rxTitle_.Global = False
|
||
|
||
Set rxImmediate_ = New RegExp
|
||
rxImmediate_.Pattern = P_NPA_IMMEDIATE
|
||
rxImmediate_.Global = False
|
||
End Sub
|
||
|
||
Public Function Test(target$) As Boolean
|
||
Test = rxTitleLast_.Test(target)
|
||
If Not Test Then Test = rxTitleFirst_.Test(target)
|
||
End Function
|
||
|
||
Public Function Parse(target$) As Boolean
|
||
Set data_ = New PC_InfoNPA
|
||
Dim matches As Object
|
||
Dim isTitleLast As Boolean
|
||
isTitleLast = rxTitleLast_.Test(target)
|
||
If Not isTitleLast Then
|
||
If Not rxTitleFirst_.Test(target) Then
|
||
Parse = False
|
||
Exit Function
|
||
End If
|
||
End If
|
||
|
||
Parse = True
|
||
If isTitleLast Then
|
||
Set matches = rxTitleLast_.Execute(target)
|
||
data_.prefix_ = matches.Item(0).SubMatches(0)
|
||
data_.date_ = matches.Item(0).SubMatches(1)
|
||
data_.number_ = Trim(matches.Item(0).SubMatches(2))
|
||
data_.title_ = Trim(matches.Item(0).SubMatches(3))
|
||
Else
|
||
Set matches = rxTitleFirst_.Execute(target)
|
||
data_.title_ = Trim(matches.Item(0).SubMatches(0))
|
||
data_.prefix_ = Trim(matches.Item(0).SubMatches(1))
|
||
data_.date_ = Trim(matches.Item(0).SubMatches(2))
|
||
data_.number_ = Trim(matches.Item(0).SubMatches(3))
|
||
End If
|
||
|
||
Call ParsePrefix
|
||
Call ParseTitle
|
||
End Function
|
||
|
||
Public Function GetData() As Collection
|
||
Set GetData = data_.AsCollection()
|
||
End Function
|
||
|
||
Public Function GetDataDescription() As Scripting.Dictionary
|
||
Set GetDataDescription = data_.AsDescription()
|
||
End Function
|
||
|
||
Public Function Transform(sText$, sParam$) As String
|
||
Transform = sText
|
||
End Function
|
||
|
||
' =======
|
||
Private Function ParsePrefix()
|
||
If data_.prefix_ = vbNullString Then _
|
||
Exit Function
|
||
If Not rxCreatorPrefix_.Test(data_.prefix_) Then
|
||
data_.creator_ = data_.prefix_
|
||
Exit Function
|
||
End If
|
||
|
||
Dim matches As Object: Set matches = rxCreatorPrefix_.Execute(data_.prefix_)
|
||
data_.docType_ = CapitalizeFirstLetter(Trim(matches.Item(0).Value))
|
||
If Len(data_.docType_) <> Len(data_.prefix_) Then _
|
||
data_.creator_ = Trim(Right(data_.prefix_, Len(data_.prefix_) - Len(data_.docType_)))
|
||
Call FixTypeCase
|
||
End Function
|
||
|
||
Private Function ParseTitle()
|
||
Dim theTitle$: theTitle = data_.title_
|
||
If theTitle = vbNullString Then _
|
||
Exit Function
|
||
|
||
data_.isTimeBound_ = rxImmediate_.Test(theTitle)
|
||
|
||
If Not rxTitle_.Test(theTitle) Then _
|
||
Exit Function
|
||
|
||
Dim matches As Object: Set matches = rxTitle_.Execute(theTitle)
|
||
data_.titlePrefix_ = Trim(matches.Item(0).SubMatches(0))
|
||
data_.titleDoc_ = Trim(matches.Item(0).SubMatches(1))
|
||
End Function
|
||
|
||
Private Function FixTypeCase()
|
||
If Len(data_.docType_) = 0 Then _
|
||
Exit Function
|
||
|
||
Select Case Left(data_.docType_, 1)
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
Case "<22>"
|
||
If data_.docType_ = "<22><><EFBFBD><EFBFBD><EFBFBD>" Then
|
||
data_.docType_ = "<22><><EFBFBD><EFBFBD>"
|
||
Else
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
End If
|
||
Case "<22>"
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
data_.docType_ = Replace(data_.docType_, "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD><EFBFBD>")
|
||
End Select
|
||
End Function
|
||
|