[M1 Mac, Monterey 12.6.3, Python 3.10.4]
AdobeXDアイテムデータからJSONファイルを作成するスクリプトとC++ソースコードの内容と比較するスクリプトを統合しました。
これでAdobeXDプラグイン出力のテキストファイルをターミナルにドラッグ&ドロップするだけでC++ソースコードとの比較結果が分かるようになります。
次はVSCodeの拡張機能作成に着手する予定です。
import pandas as pd
print("AdobeXDアイテムデータのパスを入力してください")
items_file = input()
# JSONファイル名作成
items_json_file = "/code/cpp/projects/VideoEditor/plugin/" + (items_file.split("/")[-1]).split(".")[0] + ".json"
print(items_json_file)
# 先頭と末尾のシングルクォートを削除
items_file2 = items_file[1:-1]
print(items_file2)
# データファイルを読み込む
with open(items_file2, "r") as tf:
items_list = tf.read().replace("\n","").split(';')
# print(items_list)
# print(len(items_list))
# listからデータ抽出し、JSON文字列作成
json_str = ""
num = 0
for item in items_list:
name = item.split("'")[1]
# print(name + "\n")
xy = (item.split("global X,Y:")[1]).split("parent")[0]
x = xy.split(",")[0]
y = xy.split(",")[1]
# print(x + "\n")
# print(y + "\n")
wh = (item.split("{")[1]).split("global")[0]
w = (wh.split("width:")[1]).split(", height")[0]
h = wh.split("height:")[1]
# print(w + "\n")
# print(h + "\n")
if num == 0:
json_str += "{\"" + name + "\"" + ":[" + x + ", " + y + ", " + w + ", " + h + "],\n"
elif num < len(items_list) -1:
json_str += "\"" + name + "\"" + ":[" + x + ", " + y + ", " + w + ", " + h + "],\n"
else:
json_str += "\"" + name + "\"" + ":[" + x + ", " + y + ", " + w + ", " + h + "]}"
# print(json_str + "\n")
num += 1
# JSONファイル作成
with open(items_json_file, mode='w') as f:
f.write(json_str.replace(" ",""))
# C++ソースファイル
cpp_file = '/code/cpp/projects/VideoEditor/src/VideoEditor.cpp'
# 検索用ファイル文字列(行単位)
with open(cpp_file) as f:
lines = f.readlines()
# 不一致ファイル名作成
false_json_file = "/code/cpp/projects/VideoEditor/plugin/" + (items_json_file.split("/")[-1]).split("_")[0] + "_false_" + (items_json_file.split("/")[-1]).split("_")[1]
print(false_json_file)
# JSONファイルをpandasで読込
df = pd.read_json(items_json_file)
print(df)
# 非ウィジェットデータのリスト
notWidget_list = ['convertArea', 'STDOUT', 'IMAGESTOVIDEO', 'VIDEOTOIMAGES']
# 非ウィジェットデータ削除
df2 = df.drop(columns = notWidget_list)
# ウィジェット名リスト化
columns = df2.columns.values
print(columns)
print("columns_len: " + str(len(columns)))
# C++データとAdobeXDデータの照合
false_json = ""
false_count = 0
new_notWidget_list = list()
for col in columns:
data = df.loc[:, col]
# print(data.values)
data2 = str(data.values[0]) + "," + str(data.values[1]) + "," + str(data.values[2]) + "," + str(data.values[3])
print(data2)
var_str = col + " = new"
print(var_str)
line_str = [line for line in lines if var_str in line]
try:
line_str2 = line_str[0]
print(line_str)
str_exist = data2 in line_str2
print(str_exist)
if str_exist == False:
old_xy = (line_str2.split("(")[1]).split(",\"")[0]
print("col, old_xy: " + col + ", " + str(old_xy))
if false_count == 0:
false_json += "{\"" + col + "\"" + ":[[" + old_xy + "],[" + data2 + "]],\n"
else:
false_json += "\"" + col + "\"" + ":[[" + old_xy + "],[" + data2 + "]],\n"
false_count += 1
except Exception as e:
print(e)
new_notWidget_list.append(col)
print("new_notWidget_list: " + str(new_notWidget_list))
print("false_count: " + str(false_count))
false_json2 = false_json[:-2] + "}"
# 不一致WidgetのJSONファイル作成
with open(false_json_file, mode='w') as f:
f.write(false_json2)