871001 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

misty247

misty247

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2011.07.15
XML
カテゴリ:点字・点訳
 26マスで行移しする処理をソースに組み入れた。
 「行替え」処理は、原文の改行記号を保持させているのでOKだ。
 以下のソースで省いた点訳処理も、若干の変更を入れた。行移しを行ってから凹面変換しないと、ややこしいことになるので、処理の流れを以下のようにした。

 点訳処理
 ↓
 行移し処理
 ↓
 凹面変換

 凹面変換は、行ごとに順に処理する必要がある。全体を1つの文字列で扱ってしまうと、 1行目が最終行になってしまう。
 それと、行移し処理のとき、前行が空白になる場合は、空白を詰めるようにした。どういうことか、例えば、インデントしすぎて、先頭語が行末からこぼれた場合などが、これに該当する。空白行を置いて、先頭から書き始めるよりも、先頭語が前行に入る位置まで、インデントを減らす方が、編集意図を外さないと思われるので、そういう仕様にした。

 ソースの一部抜粋になるが、行移し処理と凹面変換を以下のように組み入れた。あまりテストしていないが、一応動いているようである。


Const l_MAX_CHR_1LINE As Long = 26

Dim i As Long
Dim sBraille As String
Dim rng As Range

Dim fEdit As Boolean
Dim sParagraph() As String
Dim lPos As Long
Dim sLine As String

'点訳処理
sParagraph = ... 点訳結果全文(NABCCとvbCR)の1文字列 ...

'行移し処理
Do
fEdit = False
sParagraph = Split(sBraille, vbCr)

For i = 0 To UBound(sParagraph)
If Len(sParagraph(i)) > l_MAX_CHR_1LINE Then
'1行文字数超過の場合
fEdit = True
lPos = InStrRev(sParagraph(i), " ", l_MAX_CHR_1LINE)
If lPos = 0 Then
'行移しの切れ目なし(強制行移し)
sParagraph(i) = Left$(sParagraph(i), l_MAX_CHR_1LINE) & vbCr _
& Mid$(sParagraph(i), l_MAX_CHR_1LINE + 1)
ElseIf LTrim$(Left$(sParagraph(i), lPos - 1)) = vbNullString Then
'空白行になるケースは空白を1つ詰めて再検証
sParagraph(i) = Mid$(sParagraph(i), 1)
Else
'最後尾の分かち書き箇所で行移し
Mid$(sParagraph(i), lPos) = vbCr
End If
End If
Next
sBraille = Join(sParagraph, vbCr)
Loop While fEdit

'凹面変換
sParagraph = Split(sBraille, vbCr)
For i = 0 To UBound(sParagraph)
sLine = ""
For lPos = 1 To Len(sParagraph(i))
sLine = msConcave(Asc(Mid$(sParagraph(i), lPos, 1)) - &H20) & sLine
Next
sParagraph(i) = sLine
Next
sBraille = Join(sParagraph, vbCr)







お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.07.16 00:30:00
コメント(0) | コメントを書く


PR

Calendar

Profile

misty247

misty247

Freepage List

Keyword Search

▼キーワード検索


© Rakuten Group, Inc.