Initial
This commit is contained in:
commit
9fa7e795a3
12 changed files with 456 additions and 0 deletions
32
Addons.xcu
Normal file
32
Addons.xcu
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office">
|
||||||
|
<node oor:name="AddonUI">
|
||||||
|
<node oor:name="OfficeMenuBar">
|
||||||
|
<node oor:name="pro.litvinovg.epublishing.menu" oor:op="replace">
|
||||||
|
<prop oor:name="Context" oor:type="xs:string">
|
||||||
|
<value>com.sun.star.text.GlobalDocument,com.sun.star.text.TextDocument,com.sun.star.text.WebDocument</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value xml:lang="en">ePublishing</value>
|
||||||
|
</prop>
|
||||||
|
<node oor:name="Submenu">
|
||||||
|
<node oor:name="HyphenationsConversion" oor:op="replace">
|
||||||
|
<prop oor:name="Context" oor:type="xs:string">
|
||||||
|
<value>com.sun.star.text.GlobalDocument,com.sun.star.text.TextDocument,com.sun.star.text.WebDocument</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Title" oor:type="xs:string">
|
||||||
|
<value xml:lang="en">Convert authHyphenations to manual</value>
|
||||||
|
<value xml:lang="ru">Конвертация автоматических переносов в ручные</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="URL" oor:type="xs:string">
|
||||||
|
<value>macro:///ePublishing.Hyphenations.convertAutoHyphToManual</value>
|
||||||
|
</prop>
|
||||||
|
<prop oor:name="Target" oor:type="xs:string">
|
||||||
|
<value>_self</value>
|
||||||
|
</prop>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
</node>
|
||||||
|
|
||||||
|
</oor:component-data>
|
5
META-INF/manifest.xml
Normal file
5
META-INF/manifest.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<manifest:manifest>
|
||||||
|
<manifest:file-entry manifest:full-path="ePublishing/" manifest:media-type="application/vnd.sun.star.basic-library"/>
|
||||||
|
<manifest:file-entry manifest:full-path="Addons.xcu" manifest:media-type="application/vnd.sun.star.configuration-data"/>
|
||||||
|
</manifest:manifest>
|
37
description.xml
Normal file
37
description.xml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<description xmlns="http://openoffice.org/extensions/description/2006"
|
||||||
|
xmlns:dep="http://openoffice.org/extensions/description/2006"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<identifier value="pro.litvinovg.epublishing" />
|
||||||
|
<version value="0.0.1" />
|
||||||
|
<platform value="all" />
|
||||||
|
<display-name>
|
||||||
|
<name lang="ru">Инструменты для создания электронных изданий</name>
|
||||||
|
<name lang="en">Instruments for digital publishing creation </name>
|
||||||
|
</display-name>
|
||||||
|
<registration>
|
||||||
|
<simple-license accept-by="admin" suppress-on-update="true" suppress-if-required="true" >
|
||||||
|
<license-text xlink:href="license_en.txt" lang="en" />
|
||||||
|
<license-text xlink:href="license_ru.txt" lang="ru" />
|
||||||
|
</simple-license>
|
||||||
|
</registration>
|
||||||
|
<dependencies>
|
||||||
|
<OpenOffice.org-minimal-version value="4.1" dep:name="OpenOffice.org, LibreOffice 4.1 or later" />
|
||||||
|
</dependencies>
|
||||||
|
<publisher>
|
||||||
|
<name xlink:href="mailto:public@litvinovg.pro" lang="en">Georgy Litvinov</name>
|
||||||
|
</publisher>
|
||||||
|
<release-notes>
|
||||||
|
<src xlink:href="releasenotes.txt" lang="en" />
|
||||||
|
</release-notes>
|
||||||
|
<extension-description>
|
||||||
|
<src xlink:href="description/description_ru.txt" lang="ru" />
|
||||||
|
<src xlink:href="description/description_en.txt" lang="en" />
|
||||||
|
</extension-description>
|
||||||
|
|
||||||
|
<icon>
|
||||||
|
<default xlink:href="icons/addon_icon.png" />
|
||||||
|
<high-contrast xlink:href="icons/addon_icon.png" />
|
||||||
|
</icon>
|
||||||
|
</description>
|
||||||
|
|
1
description/description_en.txt
Normal file
1
description/description_en.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Extenstion for digital publishing in HTML and EPUB with pagingation.
|
2
description/description_ru.txt
Normal file
2
description/description_ru.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Расширение для верстки документов в html и epub с сохранением пагинации.
|
||||||
|
Предоставляет различные инструменты для автоматизации подготовки документа к публикации.
|
356
ePublishing/Hyphenations.xba
Normal file
356
ePublishing/Hyphenations.xba
Normal file
|
@ -0,0 +1,356 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
|
||||||
|
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="Hyphenations" script:language="StarBasic">sub markHyph1
|
||||||
|
End sub
|
||||||
|
Sub convertHyphInDoc()
|
||||||
|
Dim statusIndicator as Object
|
||||||
|
statusIndicator = ThisComponent.getCurrentController.StatusIndicator
|
||||||
|
statusIndicator.Start("Конвертация переносов, подождите",10)
|
||||||
|
AcceptAllTrackedChanges
|
||||||
|
convertHyphInText(ThisComponent.Text)
|
||||||
|
' Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
|
||||||
|
statusIndicator.Start("Конвертация переносов, подождите",70)
|
||||||
|
allNotes = ThisComponent.FootNotes
|
||||||
|
For x = 0 to allNotes.Count -1
|
||||||
|
aNote = allNotes.getByIndex(x)
|
||||||
|
convertHyphInText(aNote.Text)
|
||||||
|
Next
|
||||||
|
'disableAutoHyph()
|
||||||
|
statusIndicator.end()
|
||||||
|
MsgBox "Конвертация переносов успешно завершена."
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
sub disableAutoHyph()
|
||||||
|
Dim propertySetInfo As Object
|
||||||
|
Dim oPositionOfMatch As Long
|
||||||
|
oFamilies = ThisComponent.StyleFamilies
|
||||||
|
sElements() = oFamilies.getElementNames()
|
||||||
|
oFamily = oFamilies.getByName(sElements(1))
|
||||||
|
For j = 0 to oFamily.getCount -1
|
||||||
|
oStyle = oFamily.getByIndex(j)
|
||||||
|
propertySetInfo = oStyle.getPropertySetInfo()
|
||||||
|
If propertySetInfo.hasPropertyByName("ParaIsHyphenation") Then
|
||||||
|
oStyle.ParaIsHyphenation = false
|
||||||
|
EndIf
|
||||||
|
Next
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub convertHyphInText(textElement)
|
||||||
|
Dim enum1Element As Object
|
||||||
|
Dim enum1 As Object
|
||||||
|
Dim i As Integer
|
||||||
|
Dim cell As Object
|
||||||
|
enum1 = textElement.createEnumeration()
|
||||||
|
While enum1.hasMoreElements
|
||||||
|
enum1Element = enum1.nextElement
|
||||||
|
If enum1Element.supportsService("com.sun.star.text.Paragraph") Then
|
||||||
|
convertParaHyphens(enum1Element)
|
||||||
|
ElseIf enum1Element.supportsService("com.sun.star.text.TextTable") Then
|
||||||
|
cellNames = enum1Element.cellNames
|
||||||
|
For i = LBound(cellNames) To Ubound(cellNames)
|
||||||
|
cell = enum1Element.getCellByName(cellNames(i))
|
||||||
|
cellText = cell.getText()
|
||||||
|
convertHyphInText(cellText)
|
||||||
|
Next i
|
||||||
|
Else
|
||||||
|
EndIf
|
||||||
|
Wend
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub convertParaHyphens(para)
|
||||||
|
Dim lineEnd As String
|
||||||
|
Dim autoHyphens() As Object
|
||||||
|
Dim autoBreaks() As Object
|
||||||
|
Dim lineNumbers() As Integer
|
||||||
|
Dim charNum as Integer
|
||||||
|
Dim lineLength As Integer
|
||||||
|
Dim i As Integer
|
||||||
|
'No hyphenation needed
|
||||||
|
If para.ParaIsHyphenation = false Then
|
||||||
|
Exit Sub
|
||||||
|
EndIf
|
||||||
|
vCurs = ThisComponent.currentController.getViewCursor()
|
||||||
|
vCurs.goToRange(para.Anchor,false)
|
||||||
|
tCurs = vCurs.Text.createTextCursorByRange(vCurs)
|
||||||
|
tCurs.goToStartOfParagraph(false)
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
i = 0
|
||||||
|
Do While NOT tCurs.isEndOfParagraph() OR NOT tCurs.isStartOfParagraph()
|
||||||
|
vCurs.gotoEndOfLine(true)
|
||||||
|
lineLength = Len(vCurs.String)
|
||||||
|
vCurs.collapseToEnd()
|
||||||
|
i = i + 1
|
||||||
|
tCurs.goToRange(vCurs.End,false)
|
||||||
|
If (tCurs.isEndOfParagraph()) Then
|
||||||
|
Exit Do
|
||||||
|
EndIf
|
||||||
|
lastChar = getPrevChar(tCurs)
|
||||||
|
nextChar = getNextChar(tCurs)
|
||||||
|
|
||||||
|
If Len(nextChar) > 0 Then
|
||||||
|
charNum = Asc(nextChar)
|
||||||
|
If charNum > 767 AND charNum < 880 THen
|
||||||
|
tCurs.goRight(1,false)
|
||||||
|
lastChar = getPrevChar(tCurs)
|
||||||
|
nextChar = getNextChar(tCurs)
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
If needHyphen(lastChar,nextChar,lineLength) Then
|
||||||
|
addToArray(autoHyphens(),tCurs.Text.createTextCursorByRange(tCurs))
|
||||||
|
addToArray(lineNumbers(),i)
|
||||||
|
'replaceHyphen(tCurs,vCurs)
|
||||||
|
ElseIf needLineBreak(lastChar,newChar) Then
|
||||||
|
addToArray(autoBreaks(),tCurs.Text.createTextCursorByRange(tCurs))
|
||||||
|
EndIf
|
||||||
|
tCurs.goRight(1,false)
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
Loop
|
||||||
|
If Ubound(autoBreaks) <> -1 Then
|
||||||
|
For i = 0 To (Ubound(autoBreaks))
|
||||||
|
insertBreak(autoBreaks(i))
|
||||||
|
Next i
|
||||||
|
EndIf
|
||||||
|
para.ParaIsHyphenation = false
|
||||||
|
If Ubound(autoHyphens) <> -1 Then
|
||||||
|
|
||||||
|
For i = 0 To (Ubound(autoHyphens))
|
||||||
|
replaceHyphen(autoHyphens(i),lineNumbers(i))
|
||||||
|
Next i
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub insertBreak(tCursor As Object)
|
||||||
|
'U+200B Zero length space
|
||||||
|
tCursor.String = ""
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Function getPrevChar(tCurs As Object)
|
||||||
|
tCurs.goLeft(1,true)
|
||||||
|
getPrevChar = tCurs.getString()
|
||||||
|
tCurs.goRight(1,false)
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Function getNextChar(tCurs As Object)
|
||||||
|
tCurs.goRight(1,true)
|
||||||
|
getNextChar = tCurs.getString()
|
||||||
|
tCurs.goLeft(1,false)
|
||||||
|
End Function
|
||||||
|
Sub replaceHyphen(tCurs As Object,lineNumber As Integer)
|
||||||
|
Dim curLineNum As Integer
|
||||||
|
Dim vCurs As Object
|
||||||
|
Dim tLine As Object
|
||||||
|
vCurs = ThisComponent.currentController.getViewCursor()
|
||||||
|
|
||||||
|
'insert soft hyphen character U+00AD
|
||||||
|
tCurs.Text.insertControlCharacter(tCurs.End,com.sun.star.text.ControlCharacter.SOFT_HYPHEN,true)
|
||||||
|
vCurs.goToRange(tCurs.End,false)
|
||||||
|
If vCurs.isAtEndOfLine() = false AND vCurs.isAtStartOfLine() = false Then
|
||||||
|
curLineNum = getParaLineNumber(vCurs)
|
||||||
|
If curLineNum > lineNumber Then
|
||||||
|
compressLine(tCurs)
|
||||||
|
Else
|
||||||
|
stretchLine(tCurs)
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
If vCurs.isAtEndOfLine() = false AND vCurs.isAtStartOfLine() = false Then
|
||||||
|
MsgBox "Конвертация переносов не выполнена. Алгоритм нуждается в доработке. Обратитесь к разработчику."
|
||||||
|
Stop
|
||||||
|
EndIf
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub compressLine(tCurs As Object)
|
||||||
|
Dim vCurs As Object
|
||||||
|
Dim tLine As Object
|
||||||
|
Dim kerning As Integer
|
||||||
|
Dim lineLength As Integer
|
||||||
|
Dim portions As Integer
|
||||||
|
Dim portionSize As Integer
|
||||||
|
Dim textPortions() As Object
|
||||||
|
Dim startPosition As Object
|
||||||
|
Dim tPortion As Object
|
||||||
|
portions = 4
|
||||||
|
vCurs = ThisComponent.currentController.getViewCursor()
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
vCurs.goToStartOfLine(true)
|
||||||
|
vCurs.goLeft(1,true)
|
||||||
|
vCurs.goToStartOfLine(true)
|
||||||
|
tLine = vCurs.Text.createTextCursorByRange(vCurs)
|
||||||
|
lineLength = Len(tLine.String)
|
||||||
|
startPosition = tLine.End
|
||||||
|
If lineLength >= 20 Then
|
||||||
|
portionSize = lineLength/portions
|
||||||
|
For i = 0 To portions - 2
|
||||||
|
tPortion = vCurs.Text.createTextCursorByRange(startPosition)
|
||||||
|
tPortion.goLeft(portionSize,true)
|
||||||
|
addToArray(textPortions(),tPortion)
|
||||||
|
startPosition = tPortion.End
|
||||||
|
Next i
|
||||||
|
tPortion = vCurs.Text.createTextCursorByRange(startPosition)
|
||||||
|
tPortion.goToRange(tLine.Start,true)
|
||||||
|
addToArray(textPortions(),tPortion)
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
kerning = 10
|
||||||
|
tLine.CharKerning = kerning
|
||||||
|
If lineLength > 8 Then
|
||||||
|
Do While vCurs.isAtEndOfLine() = false AND vCurs.isAtStartOfLine() = false
|
||||||
|
kerning = kerning - 1
|
||||||
|
For i = (Lbound(textPortions)) To (Ubound(textPortions))
|
||||||
|
textPortions(i).CharKerning = kerning
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
If vCurs.isAtEndOfLine() = true OR vCurs.isAtStartOfLine() = true Then
|
||||||
|
Exit Do
|
||||||
|
EndIf
|
||||||
|
Next i
|
||||||
|
If kerning < -15 Then
|
||||||
|
Exit Do
|
||||||
|
EndIf
|
||||||
|
Loop
|
||||||
|
Else
|
||||||
|
Do While vCurs.isAtEndOfLine() = false AND vCurs.isAtStartOfLine() = false
|
||||||
|
kerning = kerning - 1
|
||||||
|
tLine.CharKerning = kerning
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
If kerning < -15 Then
|
||||||
|
Exit Do
|
||||||
|
EndIf
|
||||||
|
Loop
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub stretchLine(tCurs As Object)
|
||||||
|
Dim vCurs As Object
|
||||||
|
Dim tLine As Object
|
||||||
|
Dim kerning As Integer
|
||||||
|
vCurs = ThisComponent.currentController.getViewCursor()
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
vCurs.goToStartOfLine(true)
|
||||||
|
tLine = vCurs.Text.createTextCursorByRange(vCurs)
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
kerning = -10
|
||||||
|
tLine.CharKerning = kerning
|
||||||
|
Do While vCurs.isAtEndOfLine() = false AND vCurs.isAtStartOfLine() = false
|
||||||
|
kerning = kerning + 1
|
||||||
|
tLine.CharKerning = kerning
|
||||||
|
vCurs.goToRange(tCurs,false)
|
||||||
|
If tLine.CharKerning > 15 Then
|
||||||
|
Exit Do
|
||||||
|
EndIf
|
||||||
|
Loop
|
||||||
|
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Function getParaLineNumber(vCursor As Object)
|
||||||
|
Dim lineNumber As Integer
|
||||||
|
Dim oSavePosition As Object
|
||||||
|
Dim tCursor As Object
|
||||||
|
oSavePosition = vCursor.Text.createTextCursorByRange(vCursor)
|
||||||
|
tCursor = vCursor.Text.createTextCursorByRange(vCursor)
|
||||||
|
lineNumber = 1
|
||||||
|
vCursor.gotoStartOfLine(false)
|
||||||
|
tCursor.gotoRange(vCursor,false)
|
||||||
|
Do While NOT tCursor.isStartOfParagraph()
|
||||||
|
vCursor.goLeft(1,false)
|
||||||
|
vCursor.gotoStartOfLine(false)
|
||||||
|
tCursor.gotoRange(vCursor,false)
|
||||||
|
lineNumber = lineNumber + 1
|
||||||
|
Loop
|
||||||
|
vCursor.goToRange(oSavePosition,false)
|
||||||
|
getParaLineNumber = lineNumber
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Function needLineBreak(before,after)
|
||||||
|
needLineBreak = false
|
||||||
|
If before = "/" Then
|
||||||
|
If after <> " " AND after <> Chr(10) Then
|
||||||
|
needLineBreak = true
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Sub insertLineBreak(tCurs)
|
||||||
|
tCurs.Text.insertControlCharacter(tCurs.End,com.sun.star.text.ControlCharacter.LINE_BREAK,False)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Function needHyphen(before As String, after As String,lineLength As Integer)
|
||||||
|
Dim charNumBefore as Integer
|
||||||
|
Dim charNumAfter as Integer
|
||||||
|
needHyphen = true
|
||||||
|
If lineLength < 2 Then
|
||||||
|
needHyphen = false
|
||||||
|
EndIf
|
||||||
|
'MsgBox Asc(newChar)
|
||||||
|
'Both are numbers
|
||||||
|
If Len(before) > 0 Then
|
||||||
|
charNumBefore = Asc(before)
|
||||||
|
If charNumBefore > 47 AND charNumBefore < 58 Then
|
||||||
|
If Len(after) > 0 Then
|
||||||
|
charNumAfter = Asc(after)
|
||||||
|
If charNumAfter > 47 AND charNumAfter < 58 Then
|
||||||
|
needHyphen = false
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
|
||||||
|
Select Case before
|
||||||
|
Case " "
|
||||||
|
needHyphen = false
|
||||||
|
'U+002D Hyphen minus
|
||||||
|
Case "-"
|
||||||
|
needHyphen = false
|
||||||
|
'U+2010 Hyphen
|
||||||
|
Case "‐"
|
||||||
|
needHyphen = false
|
||||||
|
Case ""
|
||||||
|
needHyphen = false
|
||||||
|
'U+2014 Em dash
|
||||||
|
Case "—"
|
||||||
|
needHyphen = false
|
||||||
|
'U+2013 En dash
|
||||||
|
Case "–"
|
||||||
|
needHyphen = false
|
||||||
|
'U+2012 Figure Dash
|
||||||
|
Case "‒"
|
||||||
|
needHyphen = false
|
||||||
|
Case "…"
|
||||||
|
needHyphen = false
|
||||||
|
Case "/"
|
||||||
|
needHyphen = false
|
||||||
|
End Select
|
||||||
|
Select Case after
|
||||||
|
Case " "
|
||||||
|
needHyphen = false
|
||||||
|
Case "-"
|
||||||
|
needHyphen = false
|
||||||
|
Case ""
|
||||||
|
needHyphen = false
|
||||||
|
'newline U+000A
|
||||||
|
Case Chr(10)
|
||||||
|
needHyphen = false
|
||||||
|
End Select
|
||||||
|
End Function
|
||||||
|
|
||||||
|
|
||||||
|
sub AcceptAllTrackedChanges
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
rem define variables
|
||||||
|
dim document as object
|
||||||
|
dim dispatcher as object
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
rem get access to the document
|
||||||
|
document = ThisComponent.CurrentController.Frame
|
||||||
|
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
|
||||||
|
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
dispatcher.executeDispatch(document, ".uno:AcceptAllTrackedChanges", "", 0, Array())
|
||||||
|
|
||||||
|
|
||||||
|
end sub
|
||||||
|
</script:module>
|
6
ePublishing/script.xlb
Normal file
6
ePublishing/script.xlb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
|
||||||
|
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="ePublishing" library:readonly="false" library:passwordprotected="false">
|
||||||
|
<library:element library:name="Hyphenations"/>
|
||||||
|
</library:library>
|
||||||
|
|
BIN
icons/addon_icon.png
Normal file
BIN
icons/addon_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 257 KiB |
BIN
icons/clean.png
Normal file
BIN
icons/clean.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 257 KiB |
BIN
icons/validate.png
Normal file
BIN
icons/validate.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 257 KiB |
10
license_en.txt
Normal file
10
license_en.txt
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
The author of this extension is:
|
||||||
|
Georgy Litvinov (public@litvinovg.pro)
|
||||||
|
Copyright 2019.
|
||||||
|
|
||||||
|
This library is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 3 of the License.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
7
license_ru.txt
Normal file
7
license_ru.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Автор расширения:
|
||||||
|
Георгий Литвинов (public@litvinovg.pro)
|
||||||
|
Copyright 2019.
|
||||||
|
|
||||||
|
Это расширение является свободным программным обеспечением, вы можете распространять и/или модифицировать его в соответствии с лицензией GNU Lesser General Public License версии 3.0, опубликованной Free Software Foundation.
|
||||||
|
|
||||||
|
Это расширение распространяется в надежде, что оно будет полезным, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. См. GNU Lesser General Public License для более детальной информации: http://www.gnu.org/licenses/
|
Loading…
Add table
Reference in a new issue