All pastes #1933985 Raw Edit

olecom

public text v1 · immutable
#1933985 ·published 2010-09-05 23:41 UTC
rendered paste body
==
== File of "Microsoft Word Objects" aka ThisDocument: Форум_GallopeRU_v001.cls ==
==
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "Форум_GallopeRU_v001"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
' _v001 -- 1) поддержка текстованных urlов; они синие и подчёркиваются (порядок тэгов для форума важен)
'          2) убрал маленький шрифт для форумтэгов (нафига, когда они undoца)

' подключаемся к событиям окон, для ловли выделения (больше ничего Word не может предложить)
Dim События As New Класс_Событий
Sub Document_Open()
Set События.прога = Word.Application
End Sub

==
== File of "Class Modules": Класс_Событий.cls ==
==

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "Класс_Событий"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Public WithEvents прога As Word.Application
Attribute прога.VB_VarHelpID = -1
Sub прога_WindowSelectionChange(ByVal Sel As Selection)
Dim i, j, s, d, возврат, имя

If Len(Sel.Range.Document.Content.Text) = Len(Sel.Text) Then
    параментры_поста.Show
    If параментры_поста.Tag <> "АГА" Then
        Exit Sub
    End If
    If Right(параментры_поста.адрес, 1) <> "/" Then
        параментры_поста.адрес = параментры_поста.адрес & "/"
    End If

    ActiveDocument.Save
    имя = ActiveDocument.Path + "\" + ActiveDocument.Name
    d = ActiveDocument.Path + "\" + "Картинки-" & ActiveDocument.Name
    Set fs = CreateObject("Scripting.FileSystemObject")
    On Error Resume Next ' вЫрубаем ошибки
    fs.DeleteFolder ActiveDocument.Path + "\" + d + ".files"
    On Error GoTo 0 ' врубаем ошибки
    
    ActiveDocument.SaveAs FileName:=d + ".htm", FileFormat:=wdFormatFilteredHTML, AddToRecentFiles:=False
    
    возврат = 0
    ' жирный
    Sel.HomeKey Unit:=wdStory
    With Sel.Find
        .ClearFormatting
        .Font.Bold = True
        
        Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True
            i = Len(Sel.Text)
            With .Parent
                .InsertBefore "[b]"
                .InsertAfter "[/b]"
            End With
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            возврат = возврат + 2
        Loop
    End With

    ' курсив
    Sel.HomeKey Unit:=wdStory
    With Sel.Find
        .ClearFormatting
        .Font.Italic = True
        Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True
            i = Len(Sel.Text)
            With .Parent
                .InsertBefore "[i]"
                .InsertAfter "[/i]"
            End With
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            возврат = возврат + 2
        Loop
    End With

    ' подчёркнутый
    Sel.HomeKey Unit:=wdStory
    With Sel.Find
        .ClearFormatting
        .Font.Underline = wdUnderlineSingle
        Do While .Execute(FindText:="", Forward:=True, Format:=True, Wrap:=wdFindStop) = True
            i = Len(Sel.Text)
            With .Parent
                .InsertBefore "[u]"
                .InsertAfter "[/u]"
            End With
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            возврат = возврат + 2
        Loop
    End With
    
    ' картинки
    i = 0
    j = Dir(d + ".files\image*.*")
    For Each картинка In ActiveDocument.InlineShapes
    Dim f
        s = Right(j, 4)
        If картинка.AlternativeText = "" Then
        ' формируем туповатое имя и расширение
f = параментры_поста.имя + VBA.CStr(i) + s
s = vbCrLf + "[img]" + параментры_поста.адрес + f + "[/img]"
        Else
        ' альтернативный текст -- это имя файла картинки, и оно должно быть похоже на имя для Винды
f = VBA.Replace(VBA.Replace(картинка.AlternativeText, " ", "_"), ":", "")
f = VBA.Replace(VBA.Replace(VBA.Replace(VBA.Replace(f, "\", ""), "/", ""), "?", ""), "*", "")
f = VBA.Replace(VBA.Replace(VBA.Replace(VBA.Replace(f, "<", ""), ">", ""), "|", ""), Chr(34), "")
f = параментры_поста.имя + f + s
        ' к префиксу добавляем имя и расширение
s = vbCrLf + "[img]" + параментры_поста.адрес + f + "[/img]"
        End If
        On Error Resume Next ' вЫрубаем ошибки
        fs.DeleteFile d + ".files\" + f ' убираем, возможно уже имеющийся файл
        fs.MoveFile d + ".files\" + j, d + ".files\" + f ' переименовываем
        On Error GoTo 0 ' врубаем ошибки

        картинка.Range.InsertAfter s
        j = Dir
        i = i + 1
        возврат = возврат + 1
    Next
    
    ' линки
    For Each h In ActiveDocument.Hyperlinks
        With h.Range
            .InsertBefore "[url=" + h.Address + "#" + h.SubAddress + "][color=#0000FF]"
            .InsertAfter "[/color][/url]"
        End With
        возврат = возврат + 2
    Next
    
    ' завершение работы
    Selection.WholeStory
    Selection.Copy
    ActiveDocument.Undo возврат
    ActiveDocument.SaveAs имя, wdFormatDocument
    Sel.EndKey Unit:=wdStory
    ActiveWindow.View.Type = wdNormalView

    fs.DeleteFile d + ".htm"
    ChDir ActiveDocument.Path
End If
End Sub

==
== File of "Forms": параментры_поста.frm ==
==
VERSION 5.00
Begin {C62A69F0-16DC-11CE-9E98-00AA00574A4F} параментры_поста 
   Caption         =   "Преобразование текста для форума Galloper.ru (движок phpBB)"
   ClientHeight    =   3300
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   11055
   OleObjectBlob   =   "параментры_поста.frx":0000
   StartUpPosition =   1  'CenterOwner
   Tag             =   "0"
End
Attribute VB_Name = "параментры_поста"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Sub CommandButton1_Click()
Tag = "АГА"
Hide
End Sub

Sub CommandButton2_Click()
Tag = ""
Hide
End Sub