Compare commits

...

13 Commits

7 changed files with 464 additions and 71 deletions

View File

@ -68,8 +68,10 @@ def build_server_with_addons():
for addon in addons:
if (addon):
addon_dir = base.get_script_dir() + "/../../" + addon
if (base.is_exist(addon_dir)):
if (base.is_exist(addon_dir + "/package.json")):
base.print_info("npm ci: " + addon)
base.cmd_in_dir(addon_dir, "npm", ["ci"])
base.print_info("npm run build: " + addon)
base.cmd_in_dir(addon_dir, "npm", ["run", "build"])
def build_server_develop():

View File

@ -14,7 +14,7 @@ and Plugins (Methods/Events) API using the following Python scripts:
```bash
Node.js v20 and above
Python v3.10 and above
Python v3.12 and above
```
## Installation

View File

@ -5,6 +5,7 @@ import shutil
import argparse
import generate_docs_json
import json
from pathlib import PurePosixPath
# Configuration files
editors = {
@ -22,11 +23,35 @@ root = os.path.abspath(os.path.join(os.path.dirname(script_path), '../../../../.
missing_examples = []
used_enumerations = set()
translations = {}
translations_lang = None
missed_translations = {}
used_translations_keys = {}
global_output_dir = ""
cur_editor_name = None
def find_common_path_part(path_full: str, path_suffix: str, anchor: str) -> str:
path_full = path_full.replace('\\', '/')
path_suffix = path_suffix.replace('\\', '/')
parts1 = PurePosixPath(path_full).parts
parts2 = PurePosixPath(path_suffix).parts
try:
idx1 = [p.lower() for p in parts1].index(anchor.lower())
idx2 = [p.lower() for p in parts2].index(anchor.lower())
except ValueError:
return ""
common_segments = []
for p1, p2 in zip(parts1[idx1:], parts2[idx2:]):
if p1.lower() == p2.lower():
common_segments.append(p1)
else:
break
return "/".join(common_segments)
def load_json(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return json.load(f)
@ -62,27 +87,22 @@ def process_link_tags(text, root=''):
otherwise, a link to a class method is created.
For a method, if an alias is not specified, the name is left in the format 'Class#Method'.
"""
reserved_links = {
'/docbuilder/global#ShapeType': f"{'../../../../../../' if root == '' else '../../../../../' if root == '../' else root}docs/office-api/usage-api/text-document-api/Enumeration/ShapeType.md",
'/plugin/config': 'https://api.onlyoffice.com/docs/plugin-and-macros/structure/configuration/',
'/docbuilder/basic': 'https://api.onlyoffice.com/docs/office-api/usage-api/text-document-api/'
}
def replace_link(match):
content = match.group(1).strip() # Example: "/docbuilder/global#ShapeType shape type" or "global#ErrorValue ErrorValue"
content = match.group(1).strip() # Example: "global#ShapeType shape type" or "global#ErrorValue ErrorValue
parts = content.split()
ref = parts[0]
label = parts[1] if len(parts) > 1 else None
if ref.startswith('/'):
# Handle reserved links using mapping
if ref in reserved_links:
url = reserved_links[ref]
display_text = label if label else ref
return f"[{display_text}]({url})"
else:
# If the link is not in the mapping, return the original construction
return match.group(0)
if ref.startswith('/docs/'):
url = root + '../../../..' + ref
display_text = label if label else ref
if url.endswith('/'):
last_dir = url.rstrip('/').split('/')[-1]
url = f"{url}{last_dir}"
return f"[{display_text}]({url}.md)"
elif ref.startswith("global#"):
# Handle links to typedef (similar logic as before)
typedef_name = ref.split("#")[1]
@ -403,7 +423,7 @@ def generate_method_markdown(method, enumerations, classes, example_editor_name)
# Separate comment and code, remove JS comments
if '```js' in example:
comment, code = example.split('```js', 1)
comment = get_translation(remove_js_comments(comment))
comment = get_translation(comment.strip())
content += f"\n\n## {get_translation(f"Example")}\n\n{comment}\n\n```javascript {example_editor_name}\n{code.strip()}\n"
else:
# If there's no triple-backtick structure, just show it as code
@ -481,7 +501,7 @@ def generate_enumeration_markdown(enumeration, enumerations, classes, example_ed
if example:
if '```js' in example:
comment, code = example.split('```js', 1)
comment = remove_js_comments(comment)
comment = get_translation(comment.strip())
content += f"\n\n## {get_translation(f"Example")}\n\n{comment}\n\n```javascript {example_editor_name}\n{code.strip()}\n"
else:
# If there's no triple-backtick structure
@ -578,9 +598,13 @@ def process_doclets(data, output_dir, editor_name):
def generate(output_dir, translations_file):
global translations
global translations_lang
global global_output_dir
global_output_dir = output_dir
if translations_file is not None and os.path.exists(translations_file):
translations = load_json(translations_file)
translations_lang = os.path.splitext(os.path.basename(translations_file))[0]
else:
translations = {}
@ -639,9 +663,6 @@ if __name__ == "__main__":
args = parser.parse_args()
if args.translations is None:
args.translations = args.destination + "/translations.json"
generate(args.destination, args.translations)
print("START_MISSING_EXAMPLES")
print(",".join(missing_examples))

View File

@ -6,6 +6,7 @@ import shutil
import argparse
import generate_docs_events_json
import json
from pathlib import PurePosixPath
# Папки для каждого editor_name
editors = {
@ -22,8 +23,33 @@ root = os.path.abspath(os.path.join(os.path.dirname(script_path), '../../../../.
missing_examples = []
used_enumerations = set()
translations = {}
translations_lang = None
missed_translations = {}
used_translations_keys = {}
global_output_dir = ""
def find_common_path_part(path_full: str, path_suffix: str, anchor: str) -> str:
path_full = path_full.replace('\\', '/')
path_suffix = path_suffix.replace('\\', '/')
parts1 = PurePosixPath(path_full).parts
parts2 = PurePosixPath(path_suffix).parts
try:
idx1 = [p.lower() for p in parts1].index(anchor.lower())
idx2 = [p.lower() for p in parts2].index(anchor.lower())
except ValueError:
return ""
common_segments = []
for p1, p2 in zip(parts1[idx1:], parts2[idx2:]):
if p1.lower() == p2.lower():
common_segments.append(p1)
else:
break
return "/".join(common_segments)
def load_json(path):
with open(path, 'r', encoding='utf-8') as f:
@ -94,31 +120,22 @@ def process_link_tags(text, root=''):
otherwise, a link to a class method is created.
For a method, if an alias is not specified, the name is left in the format 'Class#Method'.
"""
reserved_links = {
'/docbuilder/global#ShapeType': f"{'../../../../../../' if root == '' else '../../../../../' if root == '../' else root}docs/office-api/usage-api/text-document-api/Enumeration/ShapeType.md",
'/plugin/config': 'https://api.onlyoffice.com/docs/plugin-and-macros/structure/configuration/',
'/docbuilder/basic': 'https://api.onlyoffice.com/docs/office-api/usage-api/text-document-api/'
}
def replace_link(match):
content = match.group(1).strip() # Example: "/docbuilder/global#ShapeType shape type" or "global#ErrorValue ErrorValue"
content = match.group(1).strip() # Example: "global#ShapeType shape type" or "global#ErrorValue ErrorValue
parts = content.split()
ref = parts[0]
label = parts[1] if len(parts) > 1 else None
if ref.startswith('/'):
# Handle reserved links using mapping
if ref in reserved_links:
url = reserved_links[ref]
display_text = label if label else ref
return f"[{display_text}]({url})"
elif ref.startswith('/docs/plugins/'):
url = f"../../{ref.split('/docs/plugins/')[1]}.md"
display_text = label if label else ref
return f"[{display_text}]({url})"
else:
# If the link is not in the mapping, return the original construction
return match.group(0)
if ref.startswith('/docs/'):
url = root + '../../../..' + ref
display_text = label if label else ref
if url.endswith('/'):
last_dir = url.rstrip('/').split('/')[-1]
url = f"{url}{last_dir}"
return f"[{display_text}]({url}.md)"
elif ref.startswith("global#"):
# Handle links to typedef (similar logic as before)
typedef_name = ref.split("#")[1]
@ -179,7 +196,7 @@ def escape_text_outside_code_blocks(md):
def generate_event_markdown(event, enumerations):
name = event['name']
desc = correct_description(event.get('description', ''))
desc = correct_description(event.get('description', ''), '../', True)
params = event.get('params', [])
md = f"# {name}\n\n{desc}\n\n"
@ -283,7 +300,7 @@ def generate_enumeration_markdown(enumeration, enumerations):
# Attempt splitting if the user used ```js
if '```js' in cleaned_example:
comment, code = cleaned_example.split('```js', 1)
comment = comment.strip()
comment = get_translation(comment.strip())
code = code.strip()
if len(examples) > 1:
content += f"**{get_translation("Example")} {i}:**\n\n{comment}\n\n"
@ -308,7 +325,7 @@ def generate_events_summary(events):
]
lines = [
f"| [{ev['name']}](./{ev['name']}.md) | "
f"{correct_description(ev.get('description', ''), isInTable=True)} |\n"
f"{correct_description(ev.get('description', ''), '../', isInTable=True)} |\n"
for ev in sorted(events, key=lambda e: e['name'])
]
return "".join(header + lines)
@ -395,9 +412,13 @@ def process_events(data, editor_dir):
def generate_events(output_dir, translations_file):
global translations
global translations_lang
global global_output_dir
global_output_dir = output_dir
if translations_file is not None and os.path.exists(translations_file):
translations = load_json(translations_file)
translations_lang = os.path.splitext(os.path.basename(translations_file))[0]
else:
translations = {}

View File

@ -5,6 +5,7 @@ import shutil
import argparse
import generate_docs_methods_json
import json
from pathlib import PurePosixPath
# Configuration files
editors = {
@ -21,11 +22,35 @@ root = os.path.abspath(os.path.join(os.path.dirname(script_path), '../../../../.
missing_examples = []
used_enumerations = set()
translations = {}
translations_lang = None
missed_translations = {}
used_translations_keys = {}
global_output_dir = ""
cur_editor_name = None
def find_common_path_part(path_full: str, path_suffix: str, anchor: str) -> str:
path_full = path_full.replace('\\', '/')
path_suffix = path_suffix.replace('\\', '/')
parts1 = PurePosixPath(path_full).parts
parts2 = PurePosixPath(path_suffix).parts
try:
idx1 = [p.lower() for p in parts1].index(anchor.lower())
idx2 = [p.lower() for p in parts2].index(anchor.lower())
except ValueError:
return ""
common_segments = []
for p1, p2 in zip(parts1[idx1:], parts2[idx2:]):
if p1.lower() == p2.lower():
common_segments.append(p1)
else:
break
return "/".join(common_segments)
def load_json(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return json.load(f)
@ -61,36 +86,28 @@ def process_link_tags(text, root=''):
otherwise, a link to a class method is created.
For a method, if an alias is not specified, the name is left in the format 'Class#Method'.
"""
reserved_links = {
'/docbuilder/global#ShapeType': f"{'../../../../../' if root == '' else '../../../../' if root == '../' else root}docs/office-api/usage-api/text-document-api/Enumeration/ShapeType.md",
'/plugin/config': 'https://api.onlyoffice.com/docs/plugin-and-macros/structure/configuration/',
'/docbuilder/basic': 'https://api.onlyoffice.com/docs/office-api/usage-api/text-document-api/'
}
def replace_link(match):
content = match.group(1).strip() # Example: "/docbuilder/global#ShapeType shape type" or "global#ErrorValue ErrorValue"
content = match.group(1).strip() # Example: "global#ShapeType shape type" or "global#ErrorValue ErrorValue
parts = content.split()
ref = parts[0]
label = parts[1] if len(parts) > 1 else None
if ref.startswith('/'):
# Handle reserved links using mapping
if ref in reserved_links:
url = reserved_links[ref]
display_text = label if label else ref
return f"[{display_text}]({url})"
else:
# If the link is not in the mapping, return the original construction
return match.group(0)
if ref.startswith('/docs/'):
url = root + '../../../..' + ref
display_text = label if label else ref
if url.endswith('/'):
last_dir = url.rstrip('/').split('/')[-1]
url = f"{url}{last_dir}"
return f"[{display_text}]({url}.md)"
elif ref.startswith("global#"):
# Handle links to typedef (similar logic as before)
typedef_name = ref.split("#")[1]
used_enumerations.add(typedef_name)
display_text = label if label else typedef_name
return f"[{display_text}]({root}Enumeration/{typedef_name}.md)"
elif ref.startswith("https"):
display_text = label if label else ref # Keep the full notation, e.g., "Api#CreateSlide"
return f"[{display_text}]({ref})"
else:
# Handle links to class methods like ClassName#MethodName
try:
@ -422,7 +439,7 @@ def generate_method_markdown(method, enumerations, classes):
# Attempt splitting if the user used ```js
if '```js' in cleaned_example:
comment, code = cleaned_example.split('```js', 1)
comment = comment.strip()
comment = get_translation(comment.strip())
code = code.strip()
if len(examples) > 1:
content += f"**{get_translation("Example")} {i}:**\n\n{comment}\n\n"
@ -447,7 +464,7 @@ def generate_properties_markdown(properties, enumerations, classes, root='../'):
for prop in sorted(properties, key=lambda m: m['name']):
prop_name = prop['name']
prop_description = prop.get('description', 'No description provided.')
prop_description = correct_description(prop_description, isInTable=True)
prop_description = correct_description(prop_description, root, isInTable=True)
prop_types = prop['type']['names'] if prop.get('type') else []
param_types_md = generate_data_types_markdown(prop_types, enumerations, classes, root)
content += f"| {prop_name} | {param_types_md} | {prop_description} |\n"
@ -533,7 +550,7 @@ def generate_enumeration_markdown(enumeration, enumerations, classes):
# Attempt splitting if the user used ```js
if '```js' in cleaned_example:
comment, code = cleaned_example.split('```js', 1)
comment = comment.strip()
comment = get_translation(comment.strip())
code = code.strip()
if len(examples) > 1:
content += f"**{get_translation("Example")} {i}:**\n\n{comment}\n\n"
@ -639,9 +656,13 @@ def process_doclets(data, output_dir, editor_name):
def generate(output_dir, translations_file):
global translations
global translations_lang
global global_output_dir
global_output_dir = output_dir
if translations_file is not None and os.path.exists(translations_file):
translations = load_json(translations_file)
translations_lang = os.path.splitext(os.path.basename(translations_file))[0]
else:
translations = {}

View File

@ -0,0 +1,54 @@
#!/usr/bin/env python
import sys
sys.path.append('../../scripts')
import base
import os
import glob
from pathlib import Path
params = sys.argv[1:]
if (3 != len(params)):
print("use: thumbnails_auto.py path_to_builder_directory path_to_input_files_directory path_to_output_files_directory")
exit(0)
base.configure_common_apps()
directory_x2t = params[0].replace("\\", "/")
directory_input = params[1].replace("\\", "/")
directory_output = params[2].replace("\\", "/")
if not os.path.exists(directory_output):
os.mkdir(directory_output)
def rename_dir(input, output):
if base.is_dir(u"" + directory_output + u"/" + output):
base.delete_dir(u"" + directory_output + u"/" + output)
os.rename(u"" + directory_output + u"/" + input, u"" + directory_output + u"/" + output)
return
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "512", "724"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "1024", "1448"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "324", "458"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "648", "916"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "256", "368"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "400", "566"])
base.cmd("python", ["thumbnails_old.py", directory_x2t, directory_input, directory_output, "184", "260"])
#base.cmd("python", ["thumbnails.py", directory_x2t, directory_input, directory_output, "792", "1098"])
#rename_dir("[512x724]", "inside_1x_[512x724]")
#rename_dir("[1024x1448]", "inside_2x_[1024x1448]")
#rename_dir("[228x316]", "main_1x_[228x316]")
#rename_dir("[456x632]", "main_2x_[456x632]")
#rename_dir("[256x368]", "mobile_[256x368]")
#rename_dir("[792x1098]", "source_[792x1098]")
dirnames = list(Path(directory_output).iterdir())
for dir_name in dirnames:
if len(list(Path(dir_name).iterdir())) == 0:
print("Delete dir ", dir_name)
Path(dir_name).rmdir()
#base.delete_dir(dir_name)

View File

@ -0,0 +1,274 @@
#!/usr/bin/env python
import sys
sys.path.append('../../scripts')
import base
import os
import glob
import imagesize
import importlib.util
from pathlib import Path
from os.path import dirname, abspath, join
# Python 3 compatibility hack
try:
unicode('')
except NameError:
unicode = str
params = sys.argv[1:]
if (5 != len(params)):
print("use: thumbnails.py path_to_builder_directory path_to_input_files_directory path_to_output_files_directory width height")
exit(0)
mapping = {"[512x724]": "inside_1x_[512x724]",
"[1024x1448]": "inside_2x_[1024x1448]",
"[228x316]": "main_1x_[228x316]",
"[456x632]": "main_2x_[456x632]",
"[256x368]": "mobile_[256x368]",
"[792x1098]": "source_[792x1098]",
"[324x458]": "main_1x_[324x458]",
"[648x916]": "main_2x_[648x916]",
"[400x566]": "pop_up_[400x566]",
"[184x260]": "desktop[184x260]",
}
cur_path = os.getcwd()
base.configure_common_apps()
directory_x2t = params[0].replace("\\", "/")
directory_input = params[1].replace("\\", "/")
directory_output = params[2].replace("\\", "/")
th_width = params[3]
th_height = params[4]
docbuilder_path = os.path.join(directory_x2t, "docbuilder.py")
if not os.path.isfile(docbuilder_path):
print(f"ERROR: docbuilder.py not found in '{directory_x2t}'")
exit(1)
spec = importlib.util.spec_from_file_location("docbuilder", docbuilder_path)
docbuilder_mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(docbuilder_mod)
CDocBuilder = docbuilder_mod.CDocBuilder
CDocBuilderValue = docbuilder_mod.CDocBuilderValue
#output_dir = directory_output + "/[" + str(th_width) + "x" + str(th_height) + "]"
#if base.is_dir(output_dir):
# base.delete_dir(output_dir)
#base.create_dir(output_dir)
input_files = []
for file in glob.glob(os.path.join(u"" + directory_input, u'*')):
input_files.append(file.replace("\\", "/"))
#print(input_files)
temp_dir = os.getcwd().replace("\\", "/") + "/temp"
if base.is_dir(temp_dir):
base.delete_dir(temp_dir)
base.create_dir(temp_dir)
directory_fonts = directory_x2t + "/sdkjs/common"
if not base.is_file(directory_fonts + "/AllFonts.js"):
base.cmd_in_dir(directory_x2t, "docbuilder", [], True)
# # True for fit, False for 100%
# isScaleSheetToPage = False
#
# json_fit_text = "0"
# if isScaleSheetToPage:
# json_fit_text = "1"
#
# #json_params += "'fitToWidth':" + json_fit_text + ",'fitToHeight':" + json_fit_text + ","
# if isScaleSheetToPage:
# json_params = "{'spreadsheetLayout':{'fitToWidth':1,'fitToHeight':1},"
# else:
# json_params = "{'spreadsheetLayout':{'fitToWidth':0,'fitToHeight':0},"
# json_params += "'documentLayout':{'drawPlaceHolders':true,'drawFormHighlight':true,'isPrint':true}}"
# json_params = json_params.replace("'", """)
json_params = "{"
json_params += "'spreadsheetLayout':{"
# True for fit, False for 100%
isScaleSheetToPage = False
json_fit_text = "0"
if isScaleSheetToPage:
json_fit_text = "1"
json_params += "'fitToWidth':" + json_fit_text + ",'fitToHeight':" + json_fit_text + ","
if True:
json_params += "'orientation':'landscape',"
page_margins = "'pageMargins':{'bottom':10,'footer':5,'header':5,'left':5,'right':5,'top':10}"
page_setup = "'pageSetup':{'orientation':1,'width':210,'height':297,'paperUnits':0,'scale':190," \
"'printArea':false,'horizontalDpi':600,'verticalDpi':600,'usePrinterDefaults':true,'fitToHeight':1,'fitToWidth':1}"
json_params += "'sheetsProps':{'0':{'headings':false,'printTitlesWidth':null,'printTitlesHeight':null," + page_margins + "," + page_setup + "}}},"
json_params += "'documentLayout':{'drawPlaceHolders':true,'drawFormHighlight':true,'isPrint':true},"
json_params += "'ignorePrintArea':'false'"
json_params += "}"
json_params = json_params.replace("'", """)
if not os.path.exists(directory_output):
os.mkdir(directory_output)
output_len = len(input_files)
output_cur = 1
for input_file in input_files:
if os.path.isdir(input_file):
next_dir_name = os.path.basename(input_file)
base.cmd("python", ["thumbnails_old.py", directory_x2t, input_file, os.path.join(directory_output, next_dir_name), th_width, th_height])
if base.is_dir(temp_dir):
base.delete_dir(temp_dir)
base.create_dir(temp_dir)
continue
print("process [" + str(output_cur) + " of " + str(output_len) + "]: " + str(input_file.encode("utf-8")))
width_page = th_width
height_page = th_height
json_params_file = json_params
if input_file.lower().endswith('.xlsx'):
temp_dir_builder = directory_output + "/temp_builder"
if base.is_dir(temp_dir_builder):
base.delete_dir(temp_dir_builder)
base.create_dir(temp_dir_builder)
builder = CDocBuilder()
builder.SetTmpFolder(temp_dir_builder)
builder.OpenFile(input_file)
context = builder.GetContext()
globalObj = context.GetGlobal()
cmd = """
(function(){
Api.getPrintAreaSize = function() {
return { Width:0, Height:0 };
};
var sheet = Api.GetSheets()[0];
var usedRange = sheet.GetUsedRange();
var maxCol = -1;
var maxRow = -1;
usedRange.ForEach(function (cell) {
if (cell.GetRowHeight() === 0 || cell.GetColumnWidth() === 0) {
return;
}
var row0 = cell.GetRow() - 1;
var col0 = cell.GetCol() - 1;
var hasContent = false;
var val = cell.GetValue();
if (val !== "" && val !== null && val !== undefined) {
hasContent = true;
}
if (!hasContent) {
var formula = cell.GetFormula();
if (typeof formula === 'string' && formula.indexOf("=") === 0) {
hasContent = true;
}
}
if (hasContent) {
if (col0 > maxCol) maxCol = col0;
if (row0 > maxRow) maxRow = row0;
}
});
if (maxRow < 0 || maxCol < 0) {
return;
}
var printRange = sheet.GetRange(
sheet.GetRangeByNumber(0, 0),
sheet.GetRangeByNumber(maxRow, maxCol)
);
Api.getPrintAreaSize = function() {
return { Width:printRange.Width, Height:printRange.Height };
};})();
"""
builder.ExecuteCommand(cmd)
api = globalObj['Api']
sizeWH = api.getPrintAreaSize()
wPrint = sizeWH.Get("Width").ToDouble()
hPrint = sizeWH.Get("Height").ToDouble()
print("CELL (printSize): " + str(wPrint) + "x" + str(hPrint))
if (wPrint > 1 and hPrint > wPrint):
tmp = width_page
width_page = height_page
height_page = tmp
json_params_file = json_params_file.replace("&quot;width&quot;:210,&quot;height&quot;:297", "&quot;width&quot;:297,&quot;height&quot;:210")
builder.CloseFile()
base.delete_dir(temp_dir_builder)
output_dir = os.path.join(directory_output,
os.path.splitext(os.path.basename(input_file))[0])
#output_dir = str(output_dir.encode("utf8"))
output_dir = abspath(unicode(output_dir))
if not os.path.exists(output_dir):
os.mkdir(output_dir)
output_dir = os.path.join(output_dir,
mapping["[" + str(th_width) + "x" + str(th_height) + "]"])
#output_dir = str(output_dir.encode("utf8"))
#output_dir = dirname(abspath(unicode(output_dir)))
output_dir = abspath(unicode(output_dir))
if not os.path.exists(output_dir):
os.mkdir(output_dir)
output_file = output_dir # os.path.join(output_dir, os.path.splitext(os.path.basename(input_file))[0])
xml_convert = u"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
xml_convert += u"<TaskQueueDataConvert>"
xml_convert += (u"<m_sFileFrom>" + input_file + u"</m_sFileFrom>")
xml_convert += (u"<m_sFileTo>" + output_file + u".zip</m_sFileTo>")
xml_convert += u"<m_nFormatTo>1029</m_nFormatTo>"
xml_convert += (u"<m_sAllFontsPath>" + directory_fonts + u"/AllFonts.js</m_sAllFontsPath>")
xml_convert += (u"<m_sFontDir>" + directory_fonts + u"</m_sFontDir>")
xml_convert += (u"<m_sJsonParams>" + json_params_file + u"</m_sJsonParams>")
xml_convert += u"<m_nDoctParams>1</m_nDoctParams>"
xml_convert += u"<m_oThumbnail>"
xml_convert += u"<first>false</first>"
if ((0 != width_page) and (0 != height_page)):
xml_convert += u"<aspect>16</aspect>"
xml_convert += (u"<width>" + str(width_page) + u"</width>")
xml_convert += (u"<height>" + str(height_page) + u"</height>")
xml_convert += u"</m_oThumbnail>"
xml_convert += u"<m_nDoctParams>1</m_nDoctParams>"
xml_convert += (u"<m_sTempDir>" + temp_dir + u"</m_sTempDir>")
xml_convert += u"</TaskQueueDataConvert>"
base.save_as_script(temp_dir + "/to.xml", [xml_convert])
base.cmd_in_dir(directory_x2t, "x2t", [temp_dir + "/to.xml"], True)
base.delete_dir(temp_dir)
base.create_dir(temp_dir)
base.extract_unicode(output_file + u".zip", output_file)
if os.path.exists(output_file + ".zip"):
try:
base.delete_file(output_file + ".zip")
except:
print("Error in deletin file: ", output_file + ".zip")
output_cur += 1
#output_file = output_file.replace("\\", "/")
#imnames = Path(output_file).glob("*.png")#glob.glob("/" + output_file.replace(":", "") + "/*.png")
imnames = [str(pp) for pp in Path(output_file).glob("*.png")]
#print(output_file + "/*.png", imnames)
#continue
if len(imnames) == 0:
base.delete_dir(output_file)
else:
width, height = imagesize.get(imnames[0])
print("WxH: ", width, height)
if width < height and False: #удалить вертикальные превью
base.delete_dir(output_file)
base.delete_dir(temp_dir)
os.chdir(cur_path)