垂直文字移動XY.bat
@echo off
REM #jww
REM #cd
REM #h1
REM #hc 文字を選択してください
REM #c 移動量(mm)を入力 (左右 上下) ※例「100 50」「100 0」「0 50」 : /M
REM #e
REM ------------------------------------------------
REM ファイル名:垂直文字移動XY.bat
REM ------------------------------------------------
REM ------------------------------------------------
REM 【 使い方 】
REM 1. 範囲選択します(水平・垂直が混ざっていてもOK)。
REM 2. ステータスバーに移動量を入力します。
REM 入力順序は 「X方向(左右) Y方向(上下)」 です。
REM
REM 【 入力例 】
REM ● 右に100、上に50 動かす
REM 100 50
REM
REM ● 左に100 動かす(上下はそのまま)
REM -100 0
REM
REM ● 下に50 動かす(左右はそのまま)
REM 0 -50
REM ------------------------------------------------
jgawk -f 垂直文字移動XY.awk jwc_temp.txt %* > temp.txt
copy temp.txt jwc_temp.txt
del temp.txt
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
垂直文字移動XY.awk
# ファイル名:垂直文字移動XY.awk
# 仕様:
# ・垂直文字(傾き90度)だけを抽出して移動する
# ・入力1つ目:X方向移動量
# ・入力2つ目:Y方向移動量
BEGIN {
MOVE_X = 0
MOVE_Y = 0
num_count = 0
# --- 引数解析(全角対応) ---
for (i = 1; i < ARGC; i++) {
str = ARGV[i]
sub(/^\/M/, "", str) # /Mを除去
str = to_half(str) # 全角→半角
if (str ~ /^-?[0-9.]+$/) {
if (num_count == 0) {
MOVE_X = str + 0
num_count++
}
else if (num_count == 1) {
MOVE_Y = str + 0
num_count++
}
ARGV[i] = ""
}
}
EPS = 1.0e-4
print "hd"
}
{
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 # 方向余弦X
vy = a[5] + 0 # 方向余弦Y
# 文字列の切り出し
str_start_pos = index(line, "\"")
str_content = substr(line, str_start_pos)
# --- ▼▼▼ 垂直文字の判定 ▼▼▼ ---
# vx(X方向の傾き)が ほぼ0 であれば垂直とみなす
if (vx > -EPS && vx < EPS) {
# X座標とY座標の両方を計算
new_x = a[2] + MOVE_X
new_y = a[3] + MOVE_Y
printf "%s %.15g %.15g %.15g %.15g %s\n", head, new_x, new_y, vx, vy, str_content
next
}
}
# 垂直文字以外(水平など)はそのまま出力
print line
}
# --- 全角→半角変換関数 ---
function to_half(s) {
gsub(/0/, "0", s); gsub(/1/, "1", s); gsub(/2/, "2", s)
gsub(/3/, "3", s); gsub(/4/, "4", s); gsub(/5/, "5", s)
gsub(/6/, "6", s); gsub(/7/, "7", s); gsub(/8/, "8", s)
gsub(/9/, "9", s); gsub(/./, ".", s); gsub(/−/, "-", s)
gsub(/+/, "+", s);
return s
}