CSVGCatApp::SearchByText
CSVGCatApp::SearchReverseByText
CMainFrame::OnFind_sub
CMainFrame::OnFind
CMainFrame::OnFindNext
CMainFrame::OnFindBack
→ 全文検索・補助
開いている SVG ファイルの中を検索します。
→ リンク補修
CSearchDlg ウィンドウ
行挿入
class="keyword" とした SVG ファイルの中のテキストを、ディスク全体の SVG から検索します。
検索範囲を限定することで、高速に検索できるだけでなく、個人的に優先的にヒットさせたいものを
事前に指定できます。
SVGファイル
を開く
SVG ファイル
SVG保存時にxml を作成
keywords フォルダ
パーソナルサーチ
全xml ファイルを検索
関連
KwdSearch_KwdFile クラス(メモリ)
初検索のときは、すべての xml ファイル、
以後、ファイルの更新日時が違うものが対象
SVG ファイル(ロード済み)
SVG ファイル(未ロード)
CSVGCatApp::OpenSub
CSVGCatApp::ScanKeyword関数
KwdSearch_KwdFile_scan
←
フォルダを指定して、キーワードを
スキャンするとき、
↑保存時
↑開く
KwdSearch_KwdPage クラス(メモリ)
*
クラスのデータ構造の詳細は、
→
CSearchDlg::OnOK 関数
↑
SVG ファイルからキーワードを抽出して、検索するまでのデータの流れを示します。
.xml を入れるフォルダ = ExeFullPath + _keywords_path("system\keywords")
uuid が無ければ作成しません
CSearchDlg::OnRemakeCache
KwdSearch_loadCache
CMainFrame::OnSearchFiles
m_SearchDlg
m_SearchDlg = new CSearchDlg;
CSVGCatApp::InitInstance
m_SearchDlg->DestroyWindow();
CSVGCatApp::ExitInstance
CSearchDlg::OKThread
KwdSearch_search
CSearchDlg::RemakeThread
CSVGCatApp::RemakeKeywordDB
データベース作成
検索中
CSearchDlg_onDisp
CSearchDlg::ShowWindow
窓を開く
CSearchDlg::OnClickList
CSearchFrame : CFrameWnd
CFormView
CSearchListView : CListView
CListView を使う方法は中断 CListCtrl にする
旧版) CListCtrl ではなく CListView を使うもの
保存時、走査時に
SVG ファイル
class=keyword
のテキスト
Cats system\keywords フォルダ
1つのSVGファイルに1つの .xml ファイル
ファイル名: (SVGファイル名)_keywords_(file-GUID).xml
フォーマット:XLink単純リンク準拠
リンク補修用とは別のフォルダ
<?xml version="1.0" encoding="Shift-JIS" ?>
<keywords xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="c:\folder\fileA.svg">
<page id="1" title="ページタイトル">
<kw href="#name" level=2>きーわーどA</kw>
<kw>きーわーどB</kw>
</page>
</keywords>
xlink:href があるタグの中に、別のタグがあるのは、
XLinkに準拠していないかも。(確認方法不明)
<g class="keyword">
<text>きーわーどA</text>
</g>
SVGファイル
SVG ファイルからキーワードだけ抽出した XML ファイルを作成します。
<?xml version="1.0" encoding="Shift-JIS" ?>
<keyword-files>
<keywords xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:type="simple"
xlink:href="c:\folder\fileA.svg"
update="2006/01/01-12:10:59">
<page id="1" title="ページタイトル">
<kw href="#name">きーわーどA</kw>
<kw>きーわーどB</kw>
</page>
</keywords>
<keywords>
</keywords>
</keyword-files>
all_keyword.xml ファイル
all_keyword.xml ファイルは、
〜_keyword_〜.xml ファイルを
すべてまとめたファイル。
(実装は未定)
ウィルス対策ファイルの影響を
少なくするために、1つのファイル
にまとめたもの。
SVG Cats 起動時にリードする。
データベース・モジュールを使う?
2id,3level,1keyword,1keyword,…,
keywords_n 個
realloc する。
最後は
ページ数+1
keywords_size
先頭の数字は、下記のタイプ番号を表す。
タイプ1が、1つのテキストに関する情報の最後となる。
タイプ1以外は省略可能。
領域が不足したら realloc する。
キーワードに ',' があったら、2つに分ける
ロードしていない SVG ファイルから、
パーソナルサーチ用の キーワードの xml を作成する
ページタイトルをリードするまで、キーワードをメモリに取っておく必要があるため、次のデータ
構造を用いる。
CSVGCatApp::RemakeKeywordDB
CMainFrame_startSaveKeywordXML
CSVGCatApp::SaveKeywordXML
CMainFrame_endSaveKeywordXML
パーソナルサーチ for Web 用の キーワードの xml を
作成する
サブフォルダを調べて、パーソナルサーチ用の キーワード
の xml ファイルを更新する。(データベース作成)
タイプ1 = キーワード
タイプ2 = id 属性
タイプ3 = キーワードレベル
<text id="name" class="keyword2">
kword</text>
2name,32,1kword,
サンプル
SVGファイル
アンロード状態から、コマンドラインで VML に変換して、以下の図形に関して、パーソナルサーチ for Web
用の keyword.xml に出力されていること。
・class="keyword" のテキスト
・class="dummy, head2" のテキスト
データベース作成や SVG ファイル保存で、パーソナルサーチ (for local) 用の keyword.xml が
出力されていること。
同じファイルの中の複数のキーワードにヒットすること
SVGCat_KwdFile::keywords は、シーケンシャルに
(キーワードの)非零番号(2byte)
キーワード('\0'なし)
を繰り返し、最後は非零番号の後に
'\0'
0xFF
「非零番号」は、上位下位とも 0x00、0xFF にならないようにする。
つまり、番号 = (Lo_byte - 1) + (Hi_byte - 1) * 254。 ビッグエンディアン。
キーワードの番号 は、0〜(SVG ファイルにあるキーワードの数 - 1)。
キーワードの番号から、ページ番号や、URL のサブアドレスを調べる。
Shift-JIS
svg_path でなく
GUID がいいかも
検索するときは、KwdSearch_KwdFile::keywords 変数を単純に文字列検索します。
ただし、1byte または 2byte 前が 0xFF ならヒットにしません。
JavaScript + XML の DOM、XSLT を使う。
いわゆる流行の AJAX ってやつ。
XMLHttpRequest は使ってないけど。
CGI が使えない、個人用ホームページで使えるようにする。
DOM
VBScriptでXML
XSL
コマンドラインオプション
作成します。
ただし、変換した1つのファイルの分だけなので、まとめる必要があります。
単純にコピー&ペーストで構いません。
相対パスには注意してください。
で、
用のキーワードファイルを
CSVGCatApp::SaveKeywordXML
<?xml version="1.0" encoding="Shift_JIS" ?>
<keywords keyword="oo">
<a href="http://www.biglobe.ne.jp/" lower="biglobe">BIGLOBE</a>
<a href="http://www.yahoo.co.jp/" lower="yahoo!">Yahoo!</a>
<a href="local_sample.html">local</a>
<a href="http://www.cnn.co.jp/">日本語</a>
</keywords>
fname_keyword.xml の例
検索用のキーワードと URL の関係を表した XML ファイルで、XSL によりブラウザでも使える。
Sjift-JISのみ対応
lower は、
では、必須ですが、
では、不要です。
CMainFrame_startSaveKeywordXML
CMainFrame_endSaveKeywordXML
この意味は、
"sym1" を検索して、見つかった URL にジャンプすることです。
URLに、ローカルファイルへのパスに続いて、 ?kw を記述した場合、リンク情報が書かれたファイル
%base%\kw.xml?kw=sym1
例: テキストの URL/onlink に設定する値
の kw.xml ファイルから、キーワード(シンボル)
でも使われます。
URL に上記のように書いてあるテキストや画像をクリックすると、ダイナミック・シンボル・リンクを行って、
そのアドレスにジャンプします。
指定するキーワードは、完全一致する必要があります。 キーワードの一部を指定したときは、リンク先が
見つからないエラーになります。
target は、ソースブラウザの target 名に合わせること。
そうすれば、ツールの出力した HTML を見たところに表示できる。
VML 変換での URL 一斉置換?
GNU GLOBAL というソースを HTML に変換ツールから、keywords.xml を作成するツール
global2keywords.exe を提供する。
%base%\kw.xml?kw=.
ピリオドを指定した場合、テキストの内容をキーワードとします。
キーワード.xml
シンボル
URL
ハイパーリンク
開くファイル
ダイナミック・
シンボル・リンク
普通のリンク
ハイパーリンク
URL
開くファイル
ソースファイルを HTML に変換するツールが出力する、シンボルとファイルパスの関係を表すファイル
を利用して、ハイパーリンクします。 プログラムエディタのタグジャンプと同様の機能ですが、ファイルの
中の指示は行番号ではなく URL のサブアドレス(#以降)になります。
を参照して、ダイナミック・シンボル・リンクを行います。
未対応
仮実装。パスの部分は、無視している
ArrX_Dic 型
CadPrim_SaveParam::dic
ArrX_Dic_alloc
ArrX_Dic_init
KwdSearch_WebKwd 構造体
Text_Box::OutVML
/* 動的キーワード検索 */
→ ArrX_Dic
リンク付きテキストをクリックしたときなど
など
VML保存するとき
/* 辞書を作成する(仮バージョン) */
ArrX_Dic_search
KwdSearch_SymLink 型 ListX
CSVGCatApp::m_SymLinks
CadPrim_SaveParam::symLinks
KwdSearch_SymLink_getURL
VML保存するとき
CadPrim::OutVML
ロードされていないか
ファイルが更新されていた
ロード
シンボル
URL
URL を返す
仮バージョン
KwdSearch_SymLink_init
KwdSearch_SymLink_finish
アプリの起動、終了時に、
/* ダイナミック・シンボル・リンク
1. c:\home\SVGCats_src を GLOBAL.bat に転送します。
2. D:\global\bin\HTML を c:\home\SVGCats_src\HTML にコピーします。
CListCtrl
GetItemCount
InsertItem
SetItem( y, x, mask, LPCTSTR text, nImage, UINT state, UINT stateMask, ulong any_data );
mask 下記の論理和
LVIF_TEXT : text 有効
LVIF_STATE : state, stateMask 有効
InsertColumn( x, LPCTSTR header, int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1 );
LVITEM t;
memset( &t, 0, sizeof(t) );
t.iItem = y; t.iSubItem = x; t.mask = LVIF_TEXT;
t.pszText = s; t.cchTextMax = sizeof(s);
m_List.GetItem( &t );
t.pszText
POSITION pos = m_List.GetFirstSelectedItemPosition();
while ( pos != NULL ) {
y = m_List.GetNextSelectedItem( pos );
y を使った処理
}
m_List.SetItemState( y, value, mask );
value, mask は、以下の論理和
LVIS_SELECTED
LVIS_FOCUSED
表形式のコントロールです。
SortItems( cmpF, 1 );
1 は cmpF の第3引数
int CALLBACK cmpF( LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort );
lParam1、lParam2 は、SetItemData した値です。
SVGCats.exe -links a.svg a.links.csv
コマンドライン:
出力例: a.links.csv
リンク先, target, exist, ←, ページ番号, テキスト, リンク元
c:\b.svg, , 1, ←, 3, a へのリンク, c:\a.svg
http://a.com/, _blank, 1, ←, 10, a.com, c:\a.svg
リンク先のアドレスや、リンク先のファイルの存在状況などをリストアップします。
CSVGCatApp::SaveAsLinks
ソース
CSVGCatApp::SaveAsIdss
CSVGCatApp::SaveAsVML
VML変換を行わないとき:
VML変換を行うとき:
CadPrim::OutVML
SVGCats.exe -ids a.svg a.ids.csv
コマンドライン:
出力例: a.ids.csv
パス#id, ページ番号, テキスト
c:\b.svg#top, 3, はじめに
c:\b.svg#src, 4, ソース
ページの途中へリンクするときに使われる id 属性をリストアップします。
x\A
x\B
p\R
p\Q
コピー(自動、手動)
x\C
pubX に
ファイルコピーした場合、リンク先は p になりますが、
手動コピーした場合、リンク先は x になります。
リンク先一覧で確認してから、連続URL一斉置換で、リンク先フォルダ
を p にしたり、リンク先ファイルを Q にします。
(メモ)
公開用のファイルを作るとき、コピーしたもののリンク先は、思ったとおりにならないことが多いです。
内部用
公開用
set cats=C:\Program Files\SVGCats\SVGCats.exe
del *.links.csv
del *.ids.csv
for /R %%i in (*.svg) do @if exist "%%i" "%cats%" -links "%%i"
for /R %%i in (*.svg) do @if exist "%%i" "%cats%" -ids "%%i"
copy *.links.csv links1.csv
sort links1.csv > links.csv
del links1.csv
del *.links.csv
copy *.ids.csv ids1.csv
sort ids1.csv > ids.csv
del ids1.csv
del *.ids.csv
下記のバッチファイルで、すべてのファイルのリンク先 links.csv とシンボル ids.csv を一覧できます。
CSVGCatApp::SaveAsIDs
ソース
パス変数を定義するファイルは、
サブフォルダに格納しても登録されません。 登録内容を変えたら、SVG Cats を再起動させてください。
ファイル名は、(パス変数名).ini です。 大文字小文字は区別しません。
下記は、%work% を C:\Work に置き換えるパス変数 work を定義するファイルです。
パス変数名が env のとき、URL には、%env% で指定できます。
例) c:\home\a%windir%.txt → c:\home\aC:\WINDOWS.txt
変数が無いときは、展開しません : 例) c:\home\a%.txt、c:\home\a%N%.txt のまま
→ GUID空間
パス変数を使うと、PCによってフォルダのある場所が変わっても、URLの記述が変わらないようにできます。
たとえば、
・デスクトップPCにある資料フォルダのパスが、C:\home\resource、
・ノートパソコンにある資料フォルダのパスが、D:\temp\res
だとした場合、資料フォルダの中の list.svg ファイルへのリンクを作成したいとき、SVG Cats ではテキスト
のURL プロパティを 次のように記述できます。
→ パス変数による、複数フォルダのリンク
%res%\list.svg
URL
ただし、このように記述できるのは、%res% に、ファイルが本当に存在するフォルダが PC に登録されてい
るときです。デスクトップ PC に、res = C:\home\resource、ノートパソコンに、res = D:\temp\res のように。
に作成します。
書きかけ
デスクトップ PC
C:\home\resource
list.svg
list.svg
ノートパソコン
D:\temp\res
a.svg
→ SVGファイルに記述するパス変数
検索対象にしないオプション
[PathVariable]
Path = C:\Work
[PathVariable]
Path = E:\Work_Private
Volume = Volume1
GUID_Space = Private
Search = 0
[PathVariable]
Path = F:\Work_Private2
書きかけ
→ ボリュームラベルによるドライブ識別
→ パス変数による、複数フォルダ・リンク
[PathVariable]
Comment = ワーク
Path = C:\Work
work.ini
work.ini
下記は、応用です。
work = C:\Work
未対応
→ GUID空間
Search は、
→ ボリュームラベルによるドライブ識別
Comment には、任意の内容が書けます。(省略可)
Path には絶対パスを指定してください
list.svg
URL
%res%\list.svg
C:\home\resource
res=C:\home\resource のとき
CSVGCatApp::LoadPathVariables
ListX <SVGCat_PathVar>
CSVGCatApp::m_PathVars
CSVGCatApp::InitInstance
アプリの初期化
パス変数をロードする
アプリを起動したとき
リンク付きテキストをクリックしたとき、
VML や VBA に変換するときなど
StrX_repDosEnvEx
CadPrim_PathVar_eval
など
/* パス変数を展開する */
CadPrim_PathVar_getEnv
SVG ファイルに記録するパスや、ユーザに見せる URL は、相対パスを優先しますが、
プログラム内部では、絶対パスで持ちます。
SVGファイル、ユーザ見え=相対パス
プログラム内部=絶対パス
..\a.svg
C:\folder\a.svg
パス変数が入った URL は、絶対パスに変換しません。(パス変数が絶対パスという制限があるので)
%work%\a.svg
%work%\a.svg
SVGファイル、ユーザ見え
プログラム内部
ショートカットを作成したときなど
CadPrim_PathVar_use
CMainFrame::OnPasteAdr
パス変数を使った URL に変える
パス変数を展開する