home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2002 March
/
VPR0203B.ISO
/
APUPDATE
/
VC
/
TXC0601A
/
TXC0601A.LZH
/
_IDMFORM.C
< prev
next >
Wrap
C/C++ Source or Header
|
2001-01-01
|
9KB
|
406 lines
/*
書式関係のIDMコマンド処理群
Start 99年11月19日
*/
#if __TXC__
#include <_wz.h>
#include <windows.h>
#include <windowsx.h>
#include <_idm.h>
#else
#include "_sys.h"
#endif
#include "_idmlib.h"
//##見出し
static BOOL _txIDM_SWITCHHEADLINE(TX* text,int idm)
{
//WCE1.01 980112 カーソル行を簡単に見出しにできるようにした(v.c.)
//PWZ2BETA0.6 980620 カーソル位置が変化しないようにした
IFILE adr = txGetAddress(text);
int iHeadline = txHeadlineMatch(text);
int ly = text->ly;
txSetUndispSilent(text);
if (iHeadline) {
if (idm == IDM_SWITCHHEADLINEPREV) {
iHeadline--;
} else {
iHeadline++;
if (iHeadline > HEADLINE_N) iHeadline = 0;
}
} else {
if (txHeadlineSearchPrev(text)) {
iHeadline = txHeadlineMatch(text);
}
if (iHeadline == 0) iHeadline = 1;
}
txJumpAddress(text,adr);
txHeadlineChange(text,iHeadline);
txfRightChartopTxf(text);
txSetLy(text,ly);
txSetDispSilent(text);
return TRUE;
}
BOOL txIDM_SWITCHHEADLINE(TX* text)
{
return _txIDM_SWITCHHEADLINE(text,IDM_SWITCHHEADLINE);
}
BOOL txIDM_SWITCHHEADLINEPREV(TX* text)
{
return _txIDM_SWITCHHEADLINE(text,IDM_SWITCHHEADLINEPREV);
}
//##文字装飾
BOOL txIDM_INSERTTAGCHAR(TX* text)
{
// タグ記号<>を挿入。タグ内のときはタグセパレータを挿入
// タグ解釈モード時はタグ表示モードに切り替え
if (text->fTxf) txfTagSwitchDisp(text);
if (text->fTxfEnable) {
if (text->fClip) {
HDIALOG hd = dialog("タグ名の指定");
TEXTCHAR szTag[CCHWORD] = {0};
dialogString(hd,"タグ(&T):",14,szTag,textcchof(szTag),20);
if (dialogOpen(hd)) {
txfCharatrEx(text,szTag,NULL);
}
} else {
TEXTCHAR buff[3];
TEXTCHAR* p = text->buff + text->cur;
BOOL fInsertSeparator = FALSE;
while(1) {
TEXTCHAR c = *p++;
if (IschReturn(c)) break;
if (c == CHAR_TXF) break;
if (c == CHAR_TXFEND) {
fInsertSeparator = TRUE;
break;
}
}
if (fInsertSeparator) {
txInsertChar(text,CHAR_ATRDELI);
} else {
buff[0] = CHAR_TXF;
buff[1] = CHAR_TXFEND;
buff[2] = 0;
txInsert(text,buff);
txLeft(text);
}
}
return TRUE;
}
return FALSE;
}
BOOL txIDM_UICHARPROPERTY(TX* text)
{
txfCharProperty(text);
return TRUE;
}
//##段落体裁
BOOL txIDM_UIPARAPROPERTY(TX* text)
{
txfParaProperty(text);
return TRUE;
}
//##特殊文字
BOOL txIDM_INSERTFF(TX* text)
{
txInsertChar(text,CHAR_FF);
return TRUE;
}
BOOL txIDM_INSERTBEAM(TX* text)
{
if (text->fTxfEnable) {
txfBeam(text);
if (text->fTxf) txfBeamFlush(text,TRUE);
return TRUE;
}
return FALSE;
}
BOOL txIDM_UIINSERTTABLE(TX* text)
{
if (text->filekind == TEXT_HTML) { //WZ4.00A 981230 HTMLで「挿入|表」でHTMLの表を挿入するようにした。
#if !__TXC__
#if WZFUNC_HTMLHIGH
txuiHtmlInsertTable(text);
#else
txuiKeisenInsertTable(text);
#endif
#endif // !__TXC__
} else if (!text->fTxf) {
txuiKeisenInsertTable(text);
} else {
txfUiInsertTable(text);
}
return TRUE;
}
#if WZFUNC_BITMAP
BOOL txIDM_UIINSERTBITMAP(TX* text)
{
txfUiInsertImg(text);
return TRUE;
}
#endif
#if WZFUNC_EDITOR
BOOL txIDM_RUBY(TX* text)
{
HDIALOG hd = dialog("ルビ");
mchar szRuby[CCHWORD] = {0};
hd->fPpcPopup = TRUE; //WZ4.00Eb 010101
dialogString(hd,"ルビ(&R):",10,szRuby,cchof(szRuby),20);
if (dialogOpen(hd)) {
mchar szAtr[80 + cchof(szRuby)];
atrAddString(szAtr,NULL,szRuby);
txfCharatrEx(text,"RUBY",szAtr);
return TRUE;
}
return FALSE;
}
#endif
BOOL txIDM_INSERTHR(TX* text)
{
if (text->filekind == TEXT_HTML) { //WZ4.00A 981230 HTMLで「挿入|水平線」は<HR>を挿入するようにした。
txInsertWithReturn(text,"<HR>");
} else {
txApfInsertHR(text);
}
return TRUE;
}
#if 0//WZ4.00Ab 990117
BOOL txIDM_PROOF(TX* text)
{
HDIALOG hd = dialog("校正入力");
mchar szProof[CCHWORD*3] = {0};
static mchar szReader[CCHNAME] = {0};
dialogString(hd,"校正(&P):",10,szProof,cchof(szProof),20);
dialogString(hd,"校正者(&R):",10,szReader,cchof(szReader),20);
if (dialogOpen(hd)) {
mchar szAtr[CCHWORD * 4];
mchar* dst = szAtr;
dst = atrAddString(dst,NULL,szProof);
dst = atrAddString(dst,"READER",szReader);
txfCharatrEx(text,"PROOF",szAtr);
return TRUE;
}
return FALSE;
}
#endif
//##脚注
#if !WINDOWSCE && WZFUNC_EDITOR
enum {
IDD_INSERTRETURN = 100,
};
BOOL CALLBACK dlgprocFootnote(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDIALOG hd = dialogFromHwnd(hwnd);
// CONTEXT_PARAPROPERTY* context = dialogGetCustdata(hd);
switch(message) {
case WM_INITDIALOG: {
TX* text = hwndtextGetText(GetDlgItem(hwnd,IDD_LIST));
text->fSetWidthByWindow = TRUE;
#if 1//WZ4.00Bl 990911
text->dlgcode = DLGC_WANTARROWS|DLGC_WANTCHARS;
#else
text->dlgcode = DLGC_WANTARROWS;
#endif
txFlush(text);
break;
}
case WM_COMMAND: {
int id = GET_WM_COMMAND_ID(wParam,lParam);
int cmd = GET_WM_COMMAND_CMD(wParam,lParam);
switch(id) {
case IDD_INSERTRETURN: {
TX* text = hwndtextGetText(GetDlgItem(hwnd,IDD_LIST));
txInsertReturn(text);
return TRUE;
}
}
break;
}
}
return FALSE;
}
static BOOL _txfUiFootnoteInsert(TX* text,int mode)
{
BOOL fProperty = (mode == 1);
HDIALOG hd = dialog(fProperty ? "脚注のプロパティ" : "脚注の挿入");
TX* text2 = textopen(NULL);
int number = 1; //WZ4.00A 981221 脚注のプロパティで脚注番号が1に初期化された
//
if (fProperty) {
number = txfTagFootnoteGetText(text->buff + text->cur,text2);
txJumpFileTop(text2);
}
dialogSetDlgproc(hd,dlgprocFootnote);
//
dialogControlID(hd,IDD_LIST);
dialogEditWz(hd,"内容(&D):",text2,60,15,WS_VSCROLL|WS_HSCROLL);
//
dialogLFV(hd);
dialogOK(hd,18);
dialogCancel(hd,18);
dialogSpaceV(hd);
dialogControlID(hd,IDD_INSERTRETURN);
dialogCmd(hd,"改行(&R)",18);
//
if (dialogOpen(hd)) {
if (fProperty) txDeleteBytes(text,txfTagGetLch(text->buff + text->cur));
txfFootnoteInsert(text,number,text2);
if (fProperty) txLeft(text);
}
textclose(text2);
return TRUE;
}
BOOL txIDM_UIINSERTFOOTNOTE(TX* text)
{
return _txfUiFootnoteInsert(text,0);
}
BOOL txfUiFootnoteProperty(TX* text)
{
return _txfUiFootnoteInsert(text,1);
}
BOOL txIDM_FOOTNOTE(TX* text)
{
BOOL ret = FALSE;
HDIALOG hd = dialog("脚注の操作");
static BYTE mode = 0;
dialogControlRadioV(hd);
dialogChoiceRadioB(hd,&mode,"番号振り直し(&N)","出力(&O)...",NULL);
if (dialogOpen(hd)) {
ret = TRUE;
if (mode == 0) {
txfFootnoteFlushAll(text);
} else if (mode == 1) {
txfFootnoteOutput(text);
}
}
return ret; //WZ3.90P 981206
}
#endif // !WINDOWSCE
//##整形
BOOL txIDM_FORMREFNAME(TX* text)
{
text->fApfNameSymbol = TRUE;
if (text->fApfing) {
txApfExit(text);
} else {
txApfEnter(text);
}
text->fApfNameSymbol = FALSE;
return TRUE;
}
BOOL txIDM_FORM(TX* text)
{
if (text->fApfing) {
//WCE0.95 970923 IDM_FORMで既に自動整形中のときは自動整形を終了するようにした。
txApfExit(text);
} else {
txApfEnter(text);
}
return TRUE;
}
BOOL txIDM_SWITCHAUTOFORM(TX* text)
{
text->fApf ^= TRUE;
txFlushMenuCheck(text,FMC_CONFIG);
statprintf("自動整形モード %s",text->fApf ? "ON" : "OFF");//WCE0.94 970921
return TRUE;
}
//##その他
static BOOL _txIDM_UIFORMPROPERTY(TX* text,int idm)
{
//WZ4.00Ac 990205 newarg:idm
if (text->fTxf) {
if (txchIsKeisen(txGetChar(text)) || txKeisenGetLeft(text)) {
txKeisenProperty(text);
} else {
txfProperty(text);
}
} else {
if (txchIsKeisen(txGetChar(text)) || txKeisenGetLeft(text)) {
txKeisenProperty(text);
} else {
//WZ4.00Ac 990205 Alt+Enterで自動整形の段落体裁ダイアログを開かないようにした。このダイアログが開くと自動整形が行われ、ユーザの意志によらず勝手にテキストを書き換える事になるため。
//WZ4.00Ad 990210 自動整形モード、自動整形中はAlt+Enterで自動整形の段落体裁ダイアログを開くようにした
if (idm == IDM_UIFORMPROPERTY || text->fApfing || text->fApf) txuiApfConfig(text);
}
}
return TRUE;
}
BOOL txIDM_ALTENTER(TX* text)
{
return _txIDM_UIFORMPROPERTY(text,IDM_ALTENTER);
}
BOOL txIDM_UIFORMPROPERTY(TX* text)
{
return _txIDM_UIFORMPROPERTY(text,IDM_UIFORMPROPERTY);
}
//##プラグイン
#if __TXC__
void __pluginGetProperty(mchar* prop,txstr res)
{
//information("%s",prop);
if (!stricmp(prop,"name")) res = "書式IDM処理";
if (!stricmp(prop,"author")) res = sysGetName();
if (!stricmp(prop,"version")) res = sysGetVersionPrim();
}
static HOOKRESULT CALLBACK wndprocTextHook(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
if (message == WM_TXEVENT && wParam == TXEVENT_IDMEXEC) {
TX* text = hwndtextGetText(hwnd);
int idm = lParam;
switch(idm) {
case IDM_ALTENTER: { // サンプル
statprintf("プロパティ by macro");
txIDM_ALTENTER(text);
return HOOK_CAPTURE;
}
}
}
return HOOK_CONTINUE;
}
void __on_txFrameNew(TX* text)
{
txSetHookWndproctextTxpcode(text,wndprocTextHook);
}
#endif