﻿Option Explicit

' ============================================================
' 【会社ごとの書式調整】ここから「通常変更しない」までを編集する。
' 「=」の右側だけ変更。mmはミリ、ptはポイント、色はRGBの6桁文字列。
' 定数同士を連動させる場合は、右辺に参照先の定数名を記入する。
' 公開用入力ひな形。空欄のままでは実行できない。原文は書き換えない。
' ============================================================

' 1. 用紙・余白（mm）。例: wdPaperA4 / wdPaperA3、縦 / 横。
Public Const RC_PAPER_SIZE As Long = ' 要記入
Public Const RC_ORIENTATION As Long = ' 横: wdOrientLandscape
Public Const RC_MARGIN_MM As Single = ' 四辺共通の基準値
Public Const RC_TOP_MARGIN_MM As Single = ' 要記入
Public Const RC_BOTTOM_MARGIN_MM As Single = ' 要記入
Public Const RC_LEFT_MARGIN_MM As Single = ' 要記入
Public Const RC_RIGHT_MARGIN_MM As Single = ' 要記入
Public Const RC_FOOTER_MM As Single = ' 用紙下端からフッターまで

' 2. 表の幅・セル余白（mm）。左右列の合計を印字可能幅以下にする。
Public Const RC_COLUMN_MM As Single = ' 両列共通の基準値
Public Const RC_NEW_COLUMN_MM As Single = ' 左: 新欄
Public Const RC_OLD_COLUMN_MM As Single = ' 右: 旧欄
Public Const RC_CELL_MARGIN_MM As Single = ' セル左右共通
Public Const RC_CELL_TOP_MM As Single = ' 要記入
Public Const RC_CELL_BOTTOM_MM As Single = ' 要記入
Public Const RC_TABLE_ALIGN As Long = ' Left / Center / Right
Public Const RC_REPEAT_HEADER As Boolean = ' True: 各ページで新/旧を繰り返す
Public Const RC_ALLOW_ROW_BREAK As Boolean = ' 長い条項のページまたぎ

' 3. 基本字体・色。色例: 黒="000000"、紺="000080"、白="FFFFFF"。
Public Const RC_BODY_FONT As String = ' 要記入
Public Const RC_HEADING_FONT As String = ' 要記入
Public Const RC_BODY_SIZE As Single = ' pt
Public Const RC_BODY_BOLD As Boolean = ' 要記入
Public Const RC_BODY_COLOR As String = ' 要記入
Public Const RC_ACCENT_COLOR As String = ' 表題・見出し・条番号・列見出し
Public Const RC_BODY_ALIGN As Long = ' Right / Center / Justify

' 4. 表題・凡例。規程名は入力から取り、前後の文字だけ指定する。
Public Const RC_TITLE_PREFIX As String = ' 要記入
Public Const RC_TITLE_SUFFIX As String = ' 要記入
Public Const RC_TITLE_FONT As String = ' 要記入
Public Const RC_TITLE_SIZE As Single = ' pt
Public Const RC_TITLE_BOLD As Boolean = ' 要記入
Public Const RC_TITLE_COLOR As String = ' 要記入
Public Const RC_TITLE_ALIGN As Long = ' 要記入
Public Const RC_TITLE_AFTER_PT As Single = ' 表題の後の空き
Public Const RC_LEGEND_TEXT As String = ' 要記入
Public Const RC_LEGEND_FONT As String = ' 要記入
Public Const RC_LEGEND_SIZE As Single = ' 要記入
Public Const RC_LEGEND_BOLD As Boolean = ' 要記入
Public Const RC_LEGEND_COLOR As String = ' 要記入
Public Const RC_LEGEND_ALIGN As Long = ' 要記入

' 5. 列見出し・条見出し・条番号。本文とは別に太字・色を指定できる。
Public Const RC_NEW_LABEL As String = ' 要記入
Public Const RC_OLD_LABEL As String = ' 要記入
Public Const RC_HEADER_FONT As String = ' 要記入
Public Const RC_HEADER_SIZE As Single = ' 要記入
Public Const RC_HEADER_BOLD As Boolean = ' 要記入
Public Const RC_HEADER_COLOR As String = ' 要記入
Public Const RC_HEADER_FILL_COLOR As String = ' 要記入
Public Const RC_HEADER_ALIGN As Long = ' 要記入
Public Const RC_HEADING_SIZE As Single = ' 要記入
Public Const RC_HEADING_BOLD As Boolean = ' 要記入
Public Const RC_HEADING_COLOR As String = ' 要記入
Public Const RC_HEADING_BEFORE_PT As Single = ' 条見出しの前の空き

' 6. 行間・段落の空き（pt）。履歴前の空きもここで指定する。
Public Const RC_USE_LINE_GRID As Boolean = ' False: 通常の1行間隔
Public Const RC_GRID_PT As Single = ' 要記入
Public Const RC_BODY_BEFORE_PT As Single = ' 要記入
Public Const RC_BODY_AFTER_PT As Single = ' 要記入
Public Const RC_HISTORY_GAP_PT As Single = ' 要記入

' 7. 罫線。LineWidthはWordの列挙名（例: wdLineWidth075pt=0.75pt）。
Public Const RC_OUTER_BORDER As Boolean = ' 要記入
Public Const RC_CENTER_BORDER As Boolean = ' 要記入
Public Const RC_HEADER_BORDER As Boolean = ' 要記入
Public Const RC_BODY_HORIZONTAL_BORDER As Boolean = ' 要記入
Public Const RC_BORDER_STYLE As Long = ' 要記入
Public Const RC_BORDER_WIDTH As Long = ' 要記入
Public Const RC_BORDER_COLOR As String = ' 要記入

' 8. 省略・新設・削除の表示。縦位置は対応本文と同じ上揃えを維持する。
Public Const RC_UNCHANGED_NOTE As String = ' 要記入
Public Const RC_OMITTED_NOTE As String = ' 要記入
Public Const RC_NEW_NOTE As String = ' 要記入
Public Const RC_DELETED_NOTE As String = ' 要記入
Public Const RC_NOTE_ALIGN As Long = ' 番号のない注記
Public Const RC_NOTE_TAB_ALIGN As Long = ' 番号付き注記。Left / Right
Public Const RC_NOTE_TAB_POSITION As Single = ' セル内幅の割合。中央=0.5
Public Const RC_DIFF_UNDERLINE As Long = ' 例: wdUnderlineDouble

' 9. フッター。Falseにすると規程名を出さない。
Public Const RC_SHOW_FOOTER As Boolean = ' 要記入
Public Const RC_FOOTER_PREFIX As String = ' 要記入
Public Const RC_FOOTER_SUFFIX As String = ' 要記入
Public Const RC_FOOTER_FONT As String = ' 要記入
Public Const RC_FOOTER_SIZE As Single = ' pt
Public Const RC_FOOTER_BOLD As Boolean = ' 要記入
Public Const RC_FOOTER_COLOR As String = ' 要記入
Public Const RC_FOOTER_ALIGN As Long = ' 要記入

' ============================================================
' 【通常変更しない】入力認識・照合・下線範囲の計算設定。
' 会社の見た目の調整では触らない。変更時は照合結果を再検証する。
' ============================================================
Public Const RC_ARTICLE_PATTERN As String = "^([ 　\t]*第[ 　\t]*[0-9０-９]+[ 　\t]*条(?:[ 　\t]*の[ 　\t]*[0-9０-９]+)*)([ 　\t]*)(.*)$"
Public Const RC_PARAGRAPH_PATTERN As String = "^([ 　\t]*[0-9０-９]+)([ 　\t]+)(.*)$"
Public Const RC_ITEM_PATTERN As String = "^([ 　\t]*[（(][ 　\t]*[0-9０-９]+[ 　\t]*[）)])([ 　\t]*)(.*)$"
Public Const RC_HEADING_PATTERN As String = "^[ 　\t]*[（(][^0-9０-９）)]+[）)][ 　\t]*$"
Public Const RC_HISTORY_PATTERN As String = "^[ 　\t]*(平成|令和|昭和|大正|明治).*(実施|改定|改正|施行)"
Public Const RC_ARTICLE_MIN As Double = 0.69
Public Const RC_CHILD_MIN As Double = 0.4
Public Const RC_CHILD_REMAINDER_REVIEW As Double = 0.72
Public Const RC_AMBIGUITY_MARGIN As Double = 0.08
Public Const RC_MAX_NODES As Long = 500
Public Const RC_MAX_DIFF_CELLS As Long = 2000000
Public Const RC_MERGE_COMMON As Long = 2
Public Const RC_MERGE_WINDOW As Long = 24

' 以下は設定をWordに渡すための処理。会社ごとの調整では編集しない。
Public Function RC_Color(ByVal hexRGB As String) As Long
    If Len(hexRGB) <> 6 Or hexRGB Like "*[!0-9A-Fa-f]*" Then
        Err.Raise vbObjectError + 160, "RC_Config", "色はRGBの6桁で指定してください: " & hexRGB
    End If
    RC_Color = RGB(CLng("&H" & Left$(hexRGB, 2)), CLng("&H" & Mid$(hexRGB, 3, 2)), CLng("&H" & Right$(hexRGB, 2)))
End Function

Public Function RC_Navy() As Long
    RC_Navy = RC_Color(RC_ACCENT_COLOR)
End Function

Public Function RC_HeaderFill() As Long
    RC_HeaderFill = RC_Color(RC_HEADER_FILL_COLOR)
End Function

Public Function RC_Regex(ByVal pattern As String) As Object
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    re.pattern = pattern
    re.Global = False
    Set RC_Regex = re
End Function

Public Function RC_TrimSpace(ByVal text As String) As String
    Dim s As String
    s = text
    Do While Len(s) > 0
        If InStr(" " & vbTab & "　", Left$(s, 1)) = 0 Then Exit Do
        s = Mid$(s, 2)
    Loop
    Do While Len(s) > 0
        If InStr(" " & vbTab & "　", Right$(s, 1)) = 0 Then Exit Do
        s = Left$(s, Len(s) - 1)
    Loop
    RC_TrimSpace = s
End Function

' 照合専用。数字・否定語・句読点を消さない。出力/変更判定には使わない。
Public Function RC_MatchText(ByVal text As String) As String
    RC_MatchText = Replace(Replace(Replace(Replace(text, " ", ""), "　", ""), vbTab, ""), vbCr, "")
End Function

Public Function RC_NumberKey(ByVal prefix As String) As String
    Dim i As Long, s As String
    s = RC_MatchText(prefix)
    For i = 0 To 9
        s = Replace(s, ChrW(&HFF10 + i), CStr(i))
    Next i
    s = Replace(Replace(s, "（", "("), "）", ")")
    RC_NumberKey = s
End Function
