Author Topic: Example Script [Not working]: Multiple Paste  (Read 1797 times)

Offline Stefan

  • Administrator
  • Hero Member
  • *****
  • Posts: 775
  • Karma: +6/-0
Example Script [Not working]: Multiple Paste
« on: September 27, 2009, 08:42:57 PM »
Hi all.

To see what is possible by an script
and what is needed from the editor script engine
i post here some test scripts.

Please note that this scripts are NOT written for HippoEDIT right now
and that HippoEDIT didn't even have an scripting support implemented right now.
(script will be converted once HippoEDIT scripting support is implemented)

Hint:
* i am not an programmer,
* that script may not be well designed (mostly i am have less interest if my script works "fair to middling"
    to clean it up, because of i had to do other things is more important mostly)
* test my scripts with test files only
* i give no guarantee that your files are not deleted
   and that your computer will not gonna implode.

* the scripts are free to use and to modify. But please respect the copyright mentions inside the scripts.

(If YOU want to post scripts too, please add an disclaimer as mine too.
You could even use mine for non-working scripts)





Example Script [Not working]: Multiple Paste


This script is not written by me but by James Swan


Code: [Select]
' http://forum.pspad.com/read.php?2,42625,42697#msg-42697
'
'*******************************************************************************
' FILENAME : multiple_paste.vbs

' DESCRIPTION : This script will paste the selected text block a given
' number of times, each time on a new line and replace any
' insertion markers in the text with either an incrementing
' number or a value from a comma delimited list.

' If no text is selected the user will be prompted to enter
' text into an input box.

' If there is no insertion marker in the selected/entered
' text block and the user enters a number when prompted for
' the replacement input, then the textblock will be pasted
' the given number of times with no changes made to the text.

' USAGE : For example if you select or enter the following text:
' (NOTE: the insertion marker can be changed from the default of § on LINE 66)

' [list § "example_§"] \

' You will then be prompted to enter the range of values
' with which to replace the insertion marker(s). The script
' accepts 3 different formats of replacement input:

' An End Number for Incremental Replacement (0 to n),
' (NOTE: the incremental start index can be changed from the default of 0 on LINE 67)
' Eg. entering 3 returns:

' [list 0 "example_0"] \
' [list 1 "example_1"] \
' [list 2 "example_2"] \
' [list 3 "example_3"] \

' A Numeric Range, Eg. entering 5-9 returns:

' [list 5 "example_5"] \
' [list 6 "example_6"] \
' [list 7 "example_7"] \
' [list 8 "example_8"] \
' [list 9 "example_9"] \

' A Comma Delimited List, Eg. entering red,blue,green returns:

' [list red "example_red"] \
' [list blue "example_blue"] \
' [list green "example_green"] \

' CREATED : 8 October 2007
' CREATED BY : James Swan

' NOTE : Configure the preferred insertion marker on LINE 66
' Configure the preferred incremental start index on LINE 67
' This script has only been tested on Windows XP

' You may distribute this script freely, but please keep this header intact.
'*******************************************************************************
Option Explicit

Const MODULE_NAME = "MultiplePaste"
Const MODULE_VER = "0.1"
Const MODULE_TITLE = "Multiple Paste"

'**************************** CONFIGURE ************************************
Const INSERTION_MARKER = "§"
Const INCREMENTAL_START_INDEX = 0
'***************************************************************************

Dim strInput, strOutput

Sub Init()
addMenuItem MODULE_TITLE,                      MODULE_TITLE, MODULE_NAME, "CTRL+SHIFT+ALT+V"
 addMenuItem "&Open this script file to edit", MODULE_TITLE, "openThisScriptFile"
End Sub

Sub MultiplePaste ()
Dim objEditor

' empty any content from any previous multiple pastes
strInput = ""
strOutput = ""

Set objEditor = newEditor()
With objEditor
.assignActiveEditor()
strInput = .selText()
If ProcessInput() Then
' trim trailing line break
strOutput = Left(strOutput,Len(strOutput)-1)
.selText strOutput
End If
End With
Set objEditor = nothing

End Sub

Function ProcessInput()
Dim strInsert
Dim i, intStart, intEnd, intTotal
Dim arrInserts

If Len(strInput) = 0 Then
strInput = InputBox("Please enter the text to paste" & vbCrLf & "including insertion marker(s): " & INSERTION_MARKER & "" & vbTab, MODULE_TITLE, "")
End If

If Len(strInput) = 0 Then

Call AbortAlert("You must enter some text to paste.", False)
ProcessInput = False
Exit Function

Else

If InStr(strInput, INSERTION_MARKER) > 0 Then

strInsert = Trim(InputBox("Please enter the range of values with which to replace the insertion marker(s)." _
& vbCrLf & "This can be in any one of the following formats: " & vbCrLf & vbCrLf &_
"- Number" & vbTab & vbTab & "eg 10." & vbCrLf &_
"- Numeric Range" & vbTab & "eg 5-10." & vbCrLf &_
"- Comma Delimited List" & vbTab & "eg red,blue,green." & vbTab & vbCrLf _
, MODULE_TITLE))

If Len(strInsert) = 0 Then

Call AbortAlert("You must enter either a number, a numeric range, or a comma delimited list.", True)
ProcessInput = False
Exit Function

Else

If InStr(strInsert,",") > 0 Then

arrInserts = Split(strInsert, ",")

ElseIf InStr(strInsert,"-") > 0 Then

intStart = Int(Left(strInsert, InStr(strInsert,"-")-1))
intEnd = Int(Mid(strInsert, InStr(strInsert,"-")+1))
intTotal = intEnd - intStart

If intEnd < intStart Then
Call AbortAlert("When entering a numeric range, the last value must be greater than the first.", False)
ProcessInput = False
Exit Function
End If

ReDim arrInserts(intTotal)

For i = 0 To UBound(arrInserts)
arrInserts(i) = intStart + i
Next

ElseIf IsNumeric(strInsert) Then

intStart = INCREMENTAL_START_INDEX
intEnd = Int(strInsert)
intTotal = intEnd - intStart

If intEnd < intStart Then
Call AbortAlert("You entered a value [" & intEnd & "] less than your currently entered incremental start index [" & INCREMENTAL_START_INDEX & "].", False)
ProcessInput = False
Exit Function
End If

ReDim arrInserts(intTotal)

For i = 0 To UBound(arrInserts)
arrInserts(i) = intStart + i
Next

Else
Call AbortAlert("I'm sorry, but an unanticipated error occurred.", False)
ProcessInput = False
Exit Function
End If

For i = 0 To UBound(arrInserts)
strOutput = strOutput & Replace(strInput, INSERTION_MARKER, arrInserts(i)) & vbCrLf
Next

End If

Else

strInsert = Trim(InputBox("Please enter the number of times you wish to paste the text." _
& vbTab & vbCrLf, MODULE_TITLE))

If IsNumeric(strInsert) Then
For i = 0 To strInsert
strOutput = strOutput & strInput & vbCrLf
Next
Else
Call AbortAlert("You may only enter a number if the text to be pasted contains no insertion marker(s).", True)
ProcessInput = False
Exit Function
End If

End If

ProcessInput = True

End If

End Function

Sub AbortAlert(strMsg, blnShowPleaseSee)

If blnShowPleaseSee Then
strMsg = strMsg & vbTab & vbCrLf & "Please see the header of the script source for more information on using " & MODULE_TITLE & "."
End If

MsgBox "Aborting..." & vbCrLf & vbCrLf & strMsg & vbTab & vbCrLf, 16, MODULE_TITLE
End Sub
'==============================================================
Sub openThisScriptFile
    editor.openFile(moduleFileName(module_name))
End Sub
'<EOF>=========================================================

Stefan, HippoEDIT beta tester 
HippoEDIT - the editor programmers wants to code thyself when they are dreaming.        -Don't just edit. HippoEDIT!-