日本語と英語のテキスト境界のスペースをどうするか?




uedamac:MEMO ueda$ echo "わたしは aho です。4さいです。" |
 sed 's/\([^a-zA-Z0-9]\) \([a-zA-Z0-9]\)/\1\2/g' |
 sed 's/\([a-zA-Z0-9]\) \([^a-zA-Z0-9]\)/\1\2/g'
わたしはahoです。4さいです。
稿
    

使 CSS ... OSX 


1 Mac 

Mac 



 Mac 




 Mac 使












使


text-spacing  | Unformed Building

 css 



 ...




 css 









日本語と英語の間にスペースを追加するシェルスクリプト

冒頭のスクリプトの逆なのだからすぐできると思ったけど、やってみると想像以上に手がかかった ...。

 
$ echo 私はzarigani toshです。| sed -E 's/([^A-Za-z0-9])([A-Za-z0-9])/\1 \2/g' | sed -E 's/([A-Za-z0-9])([^A-Za-z0-9])/\1 \2/g'
私は zarigani   tosh です。


 ...



man ascii=  ~ 

$ echo 私はzarigani toshです。|sed -E 's/([^ -~])([ -~])/\1 \2/g'|sed -E 's/([ -~])([^ -~])/\1 \2/g'
私は zarigani tosh です。

$ echo ファイル~/.bashrcです。|sed -E 's/([^ -~])([ -~])/\1 \2/g'|sed -E 's/([ -~])([^ -~])/\1 \2/g'
ファイル ~/.bashrc です。




$ echo 'ファイル ~/.bashrc です。'|sed -E 's/([^ -~])([ -~])/\1 \2/g'|sed -E 's/([ -~])([^ -~])/\1 \2/g'
ファイル  ~/.bashrc  です。

$ echo 'ファイル ~/.bashrc です。'|sed -E 's/([^ -~])([!-~])/\1 \2/g'|sed -E 's/([!-~])([^ -~])/\1 \2/g'
ファイル ~/.bashrc です。




2013年1031日
2013 年1031




$ echo '2013年1031'|sed -E 's/([^ -~])([!-/:-~])/\1 \2/g'|sed -E 's/([!-/:-~])([^ -~])/\1 \2/g'
20131031


OSX 10.8.5 



$ echo '早急にOSX 10.8.5をインストールしてください。'|sed -E 's/([^ -~])([0-9]*[!-/:-~][0-9]*)/\1 \2/g'|sed -E 's/([0-9]*[!-/:-~][0-9]*)([^ -~])/\1 \2/g'
早急に OSX 10.8.5 をインストールしてください。

$ echo '2013年1031'|sed -E 's/([^ -~])([0-9]*[!-/:-~][0-9]*)/\1 \2/g'|sed -E 's/([0-9]*[!-/:-~][0-9]*)([^ -~])/\1 \2/g'
20131031




$ echo 'まだ、OSX 10.9にアップデートしてません。'|sed -E 's/([^ -~])([0-9]*[!-/:-~][0-9]*)/\1 \2/g'|sed -E 's/([0-9]*[!-/:-~][0-9]*)([^ -~])/\1 \2/g'
まだ、 OSX 10.9 にアップデートしてません。

$ echo 'まだ、OSX 10.9にアップデートしてません。'|sed -E 's/([^ -~[:punct:]])([0-9]*[!-/:-~][0-9]*)/\1 \2/g'|sed -E 's/([0-9]*[!-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g'
まだ、OSX 10.9 にアップデートしてません。


()使

()使

()

$ echo '私は(zarigani tosh)です。'|sed -E "s/([^ -~[:punct:]])([0-9]*[!-'*-/:-~][0-9]*)/\1 \2/g"|sed -E "s/([0-9]*[!-'*-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g"
私は(zarigani tosh)です。

$ echo '私はzarigani toshです。'|sed -E "s/([^ -~[:punct:]])([0-9]*[!-'*-/:-~][0-9]*)/\1 \2/g"|sed -E "s/([0-9]*[!-'*-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g"
私は zarigani tosh です。

$ echo '私は(zarigani tosh)です。'|sed -E "s/([^ -~[:punct:]])([0-9]*[!-'*-/:-~][0-9]*)/\1 \2/g"|sed -E "s/([0-9]*[!-'*-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g"
私は(zarigani tosh)です。


[:punct:]





$ echo '2013年1031'|tr 0-9 0-9|sed -E "s/([^ -~[:punct:]])([0-9]*[!-'*-/:-~][0-9]*)/\1 \2/g"|sed -E "s/([0-9]*[!-'*-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g"
20131031


Automator 


OK ...



 bash  LANG=ja_JP.UTF-8 

Automator  bash LANG 



 ... 


LANG export 

export LANG=ja_JP.UTF-8
cat|tr 0-9 0-9|sed -E "s/([^ -~[:punct:]])([0-9]*[!-'*-/:-~][0-9]*)/\1 \2/g"|sed -E "s/([0-9]*[!-'*-/:-~][0-9]*)([^ -~[:punct:]])/\1 \2/g"





command-v 


使








 ...

pre 

pre 

blockquote 

HTML 

[]




# ブロック要素のタグ
 >>〜〜<<
 >||〜〜||<
 >|〜〜|<
 <pre>〜〜</pre>
 <blockquote>〜〜</blockquote>

# インライン要素のタグ
 <〜〜>
 [〜〜]

Ruby 











 Ruby 

$ echo '早急にOSX 10.8.5をインストールしてください。'|ruby -pe '
$_.tr!("0-9","0-9"); 
$_.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\/:-~][0-9]*)/, "\\1 \\2"); 
$_.gsub!(/([0-9]*[!-\u0027*-\/:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2");
'
早急に OSX 10.8.5 をインストールしてください。


 Ruby 

Ruby  \u0027 使

Ruby  \1  \2  \\1\\2 

ruby -pe '何らかのコード; ...'


 ruby -p 

while gets
  何らかのコード; ...
  print $_
end


$_ 1gets 1

 $_ $_ 





export LANG=ja_JP.UTF-8

cat | ruby -pe '
$_.tr!("0-9","0-9"); 
$_.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\/:-~][0-9]*)/, "\\1 \\2"); 
$_.gsub!(/([0-9]*[!-\u0027*-\/:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2");
'


pre  blockquote 

export LANG=ja_JP.UTF-8

cat | ruby -pe '
BEGIN{block_point = 0}

block_point += 1 if $_ =~ /(?:^>.*>$|^>\|$|^>\|.*\|$|<pre *.*>|<blockquote *.*>)/
if block_point == 0 then
  $_.tr!("0-9","0-9")
  $_.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\/:-~][0-9]*)/, "\\1 \\2")
  $_.gsub!(/([0-9]*[!-\u0027*-\/:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2")
end
block_point -= 1 if $_ =~ /(?:^<<$|^\|<$|^\|\|<$|<\/ *pre>|<\/ *blockquote>)/
'


 BEGIN while gets 

END while gets 

ruby -pe 'BEGIN{初期化コード}; 何らかのコード; ... END{締めのコード};'




初期化コード

while gets
  何らかのコード; ...
  print $_
end

締めのコード









1

$&

$`

$~.post_match


3

export LANG=ja_JP.UTF-8

cat | ruby -ne '
BEGIN{block_point = 0}

r=$_
block_point += 1 if $_ =~ /(?:^>.*>$|^>\|$|^>\|.*\|$|^<pre *.*>|^<blockquote *.*>)/
if block_point == 0 then
  r = ""
  e = $_
  $_ =~ /(\[.*\]|<.*>)/
  while $`
    s,m,e = $`,$&,$~.post_match
    s.tr!("0-9","0-9")
    s.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\/:-~][0-9]*)/, "\\1 \\2")
    s.gsub!(/([0-9]*[!-\u0027*-\/:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2")
    r << s + m
    e =~ /(\[.*\]|<.*>)/
  end
  e.tr!("0-9","0-9")
  e.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\/:-~][0-9]*)/, "\\1 \\2")
  e.gsub!(/([0-9]*[!-\u0027*-\/:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2")
  r <<e
end
block_point -= 1 if $_ =~ /(?:^<<$|^\|<$|^\|\|<$|^<\/ *pre>|^<\/ *blockquote>)/
puts r
'






HTML

export LANG=ja_JP.UTF-8

cat | ruby -ne '
BEGIN{block_point = 0}

r=$_
block_point += 1 if $_ =~ /(?:^>.*>$|^>\|$|^>\|.*\|$|^<pre *.*>|^<blockquote *.*>)/
if block_point == 0 then
  r = ""
  s, e = "", $_
  while e =~ /(<a *.+?<\/ *a>|<.*?>|\[.*?\])/
    s, m, e = $`, $&, $~.post_match
    s << e[0]
    s.tr!("0-9","0-9")
    s.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\-:-~][0-9]*)/, "\\1 \\2")
    s.gsub!(/([0-9]*[!-\u0027*-.:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2")
    s.slice!(-1)
    r << s + m
  end
  e = (s[-1] || " ") + e
  e.tr!("0-9","0-9")
  e.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\-:-~][0-9]*)/, "\\1 \\2")
  e.gsub!(/([0-9]*[!-\u0027*-.:-~][0-9]*)([^ -~[:punct:]])/, "\\1 \\2")
  e.slice!(0)
  r <<e
end
block_point -= 1 if $_ =~ /(?:^<<$|^\|<$|^\|\|<$|^<\/ *pre>|^<\/ *blockquote>)/
puts r
'

実験

  • 以上のコードを Automator に追加して、text-spacing サービスを作ってみた。



 ...





____text-spacing____




preblockquote

preblockquote




preblockquote

preblockquote




フォントを修正


...


Lucida Grande

body { font-family:'Lucida Grande','Hiragino Kaku Gothic ProN', Meiryo, sans-serif; }


Lucida Grande


...

text-spacingtext-spacing-none



text-spacing

export LANG=ja_JP.UTF-8

cat | ruby -ne '
BEGIN{block_point = 0}

r=$_
block_point += 1 if $_ =~ /(?:^>.*>$|^>\|$|^>\|.*\|$|^<pre *.*>|^<blockquote *.*>)/
if block_point == 0 then
  r = ""
  s, e = "", $_
  while e =~ /(<a *.+?<\/ *a>|<.*?>|\[.*?\])/
    s, m, e = $`, $&, $~.post_match
    s << e[0]
    s.tr!("0-9","0-9")
    s.gsub!(/([^ -~]) ([!-\u0027*-~])/, "\\1\\2")
    s.gsub!(/([!-\u0027*-~]) ([^ -~])/, "\\1\\2")
    s.slice!(-1)
    r << s + m
  end
  e = (s[-1] || " ") + e
  e.tr!("0-9","0-9")
  e.gsub!(/([^ -~]) ([!-\u0027*-~])/, "\\1\\2")
  e.gsub!(/([!-\u0027*-~]) ([^ -~])/, "\\1\\2")
  e.slice!(0)
  r <<e
end
block_point -= 1 if $_ =~ /(?:^<<$|^\|<$|^\|\|<$|^<\/ *pre>|^<\/ *blockquote>)/
puts r
'


text-spacingtext-spacing-none

(master)$ diff -u text-spacing.rb.sh text-spacing-none.rb.sh
--- text-spacing.rb.sh 2013-11-02 15:58:32.000000000 +0900
+++ text-spacing-none.rb.sh 2013-11-02 15:58:26.000000000 +0900
@@ -12,15 +12,15 @@
     s, m, e = $`, $&, $~.post_match
     s << e[0]
     s.tr!("0-9","0-9")
-    s.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\-:-~][0-9]*)/, "\\1\\2")
-    s.gsub!(/([0-9]*[!-\u0027*-.:-~][0-9]*)([^ -~[:punct:]])/, "\\1\\2")
+    s.gsub!(/([^ -~]) ([!-\u0027*-~])/, "\\1\\2")
+    s.gsub!(/([!-\u0027*-~]) ([^ -~])/, "\\1\\2")
     s.slice!(-1)
     r << s + m
   end
   e = (s[-1] || " ") + e
   e.tr!("0-9","0-9")
-  e.gsub!(/([^ -~[:punct:]])([0-9]*[!-\u0027*-\-:-~][0-9]*)/, "\\1\\2")
-  e.gsub!(/([0-9]*[!-\u0027*-.:-~][0-9]*)([^ -~[:punct:]])/, "\\1\\2")
+  e.gsub!(/([^ -~]) ([!-\u0027*-~])/, "\\1\\2")
+  e.gsub!(/([!-\u0027*-~]) ([^ -~])/, "\\1\\2")
   e.slice!(0)
   r <<e
 end