2017-02-23 6 views
0

Writerで書かれたバイリンガル辞書を更新する必要があります。LibreOffice Writerでフォントとフォントスタイルでドキュメントをトークン化/解析/検索して置き換える方法は?

  • メインワード(太字1)
  • 外国等価音訳(フォント1、イタリック)
  • 外国の同等(太字2)音声の
  • 部分(フォント1、イタリック)

文書の各行は、上記の部分の後ろにスペースまたは句読点で区切られたメインワードです。

ファイルごとに1行ずつ歩いていくプロセスを自動化し、スペースと句読点を無視して各パート間に区切り文字を配置する必要があります。そのため、Calcファイルに大量に読み込むことができます。言い換えれば、「各部分」は、同じフォントとフォントスタイルを持つ文字の並び(スペースと句読点を無視する)です。

標準検索を試しました&置換機能とAltSearch拡張機能はどちらも完了できません。

検索:同じフォントとFONT_STYLEと連続した文字は、スペースや句読点を無視

を交換してください:用語+上で見つかった「主な問題は、私が言う、検索クエリを記述することはできませんよです区切り文字 "

このためのスクリプトを書く方法や、既存のツールで問題を解決できるかどうかについてのご意見はありますか?

ありがとうございます!

所望の効果のための擬似コード:ここで

var delimiter = "|" 

Go to beginning of document 

While not end of document do: 
    var $currLine = get line from doc 
    var $currChar = get next character which is not space or punctuation; 
    var $font = currChar.font 
    var $font_style - currChar.font_style (e.g. bold, italic, normal) 

    While not end of line do: 
     $currChar = next character which is not space or punctuation; 

      if (currChar.font != $font || currChar.font_style != $font_style) { // font or style has changed 
       print $delimiter 

       $font = currChar.font 
       $font_style - currChar.font_style (e.g. bold, italic, normal) 
      } 
    end While 

end While 

答えて

0

は、あなたの擬似コードが行うもののそれぞれのためのヒントです。

まず、1行ずつ移動する最も簡単な方法は、遅いですが、TextViewCursorです。 XLineCursorセクションに注目してください。 whileループの場合、oVC.goDown()は、ドキュメントの最後に達したときにfalseを返します。 (oVCはTextViewCursorの変数です)。

oVC.goRight(0, False)を呼び出して選択解除し、次にoVC.goRight(1, True)を選択して各文字を取得します。次に、選択された値はoVC.getString()によって取得されます。スペースや句読点を無視するには、おそらくPythonのisalnum()またはreモジュールを使用します。

文字のフォントを確認するには、oVC.getPropertyValue(attr)に電話してください。 attrの値は、書式設定の変更を確認するために単純にCharAutoStyleNameCharStyleNameとすることができます。

'CharFontFamily', 'CharFontFamilyAsian', 'CharFontFamilyComplex', 'CharFontPitch', 'CharFontPitchAsian'などの特定のプロパティのリストを取得するか、文字プロパティはhttps://wiki.openoffice.org/wiki/Documentation/DevGuide/Text/Formattingに記載されています。

区切り文字をテキストに挿入するには、oVC.getText().insertString(oVC, "|", 0)を入力します。

This python code from githubは、これらの機能のほとんどを実行する方法を示していますが、関連する部分を見つけるためにそれを読む必要があります。

また、LibreOffice APIを使用する代わりに、.odtファイルを解凍し、content.xmlをスクリプトで解析します。

+0

.odtの解凍と.xmlファイルの取り出しは参考にしてください。私は.odtがzip形式であることに気づいていませんでした。 – kaanch

関連する問題