水平文字移動と垂直文字移動の外変を1つにまとめました。
数値入力からマウス指示(基点→終点)に変更しました。
水平垂直文字移動.bat
@echo off
REM #jww
REM #cd
REM #h1
REM #hc 範囲選択してください
REM #g1 全レイヤグループのデータを編集可能にする
REM #1 【水平文字】の基点を指示 (L)
REM #2 【水平文字】の移動先を指示 (L)
REM #3 【垂直文字】の基点を指示 (L)
REM #4 【垂直文字】の移動先を指示 (L)
REM #e
REM ------------------------------------------------
REM ファイル名:水平垂直文字移動.bat
REM ------------------------------------------------
jgawk -f 水平垂直文字移動.awk jwc_temp.txt > temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
水平垂直文字移動.awk
# ファイル名:水平垂直文字移動.awk
# 仕様:
# ・水平文字(0度)は #1→#2 のベクトルで移動
# ・垂直文字(90/270度)は #3→#4 のベクトルで移動
# ・それ以外は移動しない
BEGIN {
# 水平用移動量
dx_h = 0; dy_h = 0
h_x1 = 0; h_y1 = 0
# 垂直用移動量
dx_v = 0; dy_v = 0
v_x1 = 0; v_y1 = 0
EPS = 1.0e-4
print "hd"
}
# --- 座標の取得と計算 ---
# 水平文字用 (#1 -> #2)
/^hp1/ { h_x1 = $2; h_y1 = $3; next }
/^hp2/ { dx_h = $2 - h_x1; dy_h = $3 - h_y1; next }
# 垂直文字用 (#3 -> #4)
/^hp3/ { v_x1 = $2; v_y1 = $3; next }
/^hp4/ { dx_v = $2 - v_x1; dy_v = $3 - v_y1; next }
# --- メイン処理 ---
{
line = $0
if (substr(line, 1, 2) == "hq") next
head = substr(line, 1, 2)
# 文字データの処理
if (head == "ch" || head == "cs") {
split(line, a, /[ \t]+/)
vx = a[4] + 0
vy = a[5] + 0
# 文字列部分の取り出し
str_start = index(line, "\"")
str_cont = substr(line, str_start)
# A. 水平文字の場合 (vy ≒ 0) -> 水平用移動量を加算
if (vy > -EPS && vy < EPS) {
new_x = a[2] + dx_h
new_y = a[3] + dy_h
printf "%s %.15g %.15g %.15g %.15g %s\n", head, new_x, new_y, vx, vy, str_cont
next
}
# B. 垂直文字の場合 (vx ≒ 0) -> 垂直用移動量を加算
else if (vx > -EPS && vx < EPS) {
new_x = a[2] + dx_v
new_y = a[3] + dy_v
printf "%s %.15g %.15g %.15g %.15g %s\n", head, new_x, new_y, vx, vy, str_cont
next
}
}
# それ以外はそのまま出力
print line
}