view xdwhno.lex @ 11:3cecce3b2ce3

add (f)lex file.
author pyon@macmini
date Fri, 15 Jun 2018 18:44:44 +0900 (2018-06-15)
parents
children
line wrap: on
line source
/* xdwhno	Last Change: 2018-06-15 �� 09:48:07.

release: xdwhno.lex
	flex xdwhno.lex
	gcc -I. lex.yy.c xdwapi.lib -static -o xdwhno.exe
	strip xdwhno.exe

�@�\:
  DocuWorks���������۔Ԃ炵�����̂𒊏o

*/
/*** Definition section ***/

%{

/*
 * C �R�[�h�ɂ�C�̕W��I/O ���C�u�������g�����̂�����.
 * %{�� %} �ň͂܂ꂽ�����͂��̂܂ܐ����t�@�C���Ɏ�荞�܂��.
 */
#include <stdio.h>
#include <stdbool.h>
int mcnt = 1;
int column = 1;
bool verbose = false;
bool debug = false;
bool plno = false;
bool z2h = false;
FILE *fp1, *fp2;

%}

/* �����flex�ɓ��̓t�@�C������‚ł��邱�Ƃ�����. */
/* %option noyywrap */

%%
    /*
	 * �K���̈�
     * �R�����g�̓C���f���g���Ȃ���΂Ȃ�Ȃ�.�������Ȃ��Ɛ��K�\���ƌ�F�����Ă��܂�.
     */

0[1238]0[0-9]{7}   {
                /*
                 * ���̋K���͓��͂��琮����\������.
                 * yytext�ɂ͈�v���������񂪊܂܂��.
                 */	
				/* ����s�� mcnt ��̃}�b�`�������珈�� */
				if ( mcnt == column ) {
					if ( plno ) printf( "%d,", yylineno );
				    printf( "%s\n", yytext ); 
				}
				mcnt++;
            }
\n  		{
				mcnt = 1;
				yylineno++;
				ECHO;
			}
�O			{ unput( '0' ); }
�P			{ unput( '1' ); }
�Q			{ unput( '2' ); }
�R			{ unput( '3' ); }
�S			{ unput( '4' ); }
�T			{ unput( '5' ); }
�U			{ unput( '6' ); }
�V			{ unput( '7' ); }
�W			{ unput( '8' ); }
�X			{ unput( '9' ); }
<<EOF>>		{ }
.           { ECHO; }

%%
/*** C�R�[�h�̈� ***/

/*
 * ���C���v���O����.
 * �����͂��Ăяo���A�������ςނƏI������. 
 */


#include <unistd.h>
#include <stdlib.h>
#include <io.h>
#include <glob.h>

#include <windows.h>
#include <xdw_api.h>

void print_error( int code ) {
	switch ( code ) {
	case XDW_E_NOT_INSTALLED:
		fprintf( stderr, "DocuWorks���C���X�g�[������Ă��܂���B" );
		break;
	case XDW_E_FILE_NOT_FOUND:
		fprintf( stderr, "�w�肳�ꂽ�t�@�C�������‚���܂���B" );
		break;
	case XDW_E_FILE_EXISTS:
		fprintf( stderr, "�w�肳�ꂽ�t�@�C���͂��łɑ��݂��܂��B" );
		break;
	case XDW_E_ACCESSDENIED:
		fprintf( stderr, "�w�肳�ꂽ�t�@�C�����J�����Ƃ��ł��܂���B" );
		break;
	case XDW_E_INVALID_NAME:
	case XDW_E_BAD_NETPATH:
		fprintf( stderr, "�w�肳�ꂽ�t�@�C�����J�����Ƃ��ł��܂���B�i�l�b�g���[�N�j" );
		break;
	case XDW_E_BAD_FORMAT:
		fprintf( stderr, "�w�肳�ꂽ�t�@�C���͐������t�H�[�}�b�g�ł͂���܂���B" );
		break;
	case XDW_E_INVALID_ACCESS:
		fprintf( stderr, "�w�肳�ꂽ��������錠��������܂���B" );
		break;
	case XDW_E_SHARING_VIOLATION:
		fprintf( stderr, "�t�@�C�����g�p���ł��B" );
		break;
	default:
		fprintf( stderr, "�G���[���������܂����B" );
		break;
	}
	fprintf( stderr, "[ Error code : %d ]\n", code );
}

void print_help() {
	char prog[12] = "xdwhno";
	fprintf( stderr, "Usage:\n" );
	fprintf( stderr, "  %s infile\n", prog );
	fprintf( stderr, "  %s -v infile\n", prog );
	fprintf( stderr, "  %s -p infile ( print line-no )\n", prog );
	fprintf( stderr, "  %s -c N infile ( N-th match )\n", prog );
	fprintf( stderr, "  %s -z infile ( not implement )\n", prog );
	fprintf( stderr, "  %s -d dir ( not implement )\n", prog );
	fprintf( stderr, "  %s -x ( debug )\n", prog );
}

int xdw2txt( const char* in_path, const char *tmpfile ) {

	FILE *fp;
	if ( ( fp = fopen( tmpfile, "w" ) ) == NULL ) {
		fprintf( stderr, "can't open tmp file [%s].\n", tmpfile );
		exit( 1 );
	}

	int api_result = 0;
	// �����n���h�����J��
	XDW_DOCUMENT_HANDLE h = NULL;
	XDW_OPEN_MODE_EX mode = {
		sizeof( XDW_OPEN_MODE_EX ), XDW_OPEN_READONLY, XDW_AUTH_NODIALOGUE 
	};
	api_result = XDW_OpenDocumentHandle( in_path, &h, (XDW_OPEN_MODE*)&mode );
	if ( api_result < 0 ) {
		print_error( api_result );
		return 1;
	}
	// XDW_GetDocumentInformation��p���đ��y�[�W���𓾂�
	XDW_DOCUMENT_INFO info = { sizeof(XDW_DOCUMENT_INFO), 0, 0, 0 };
	XDW_GetDocumentInformation(h, &info);
    int nPage = info.nPages;

    long datasize;
    char* lpszvalue;
    // ���C������
    for ( int i = 1; i <= nPage; i++ ) {
        datasize = XDW_GetPageTextToMemory( h, i, NULL, 0, NULL );
        lpszvalue = (char*)malloc( sizeof(char)*datasize );
        XDW_GetPageTextToMemory( h, i, lpszvalue, datasize, NULL );

        fprintf( fp, "%s\n", lpszvalue );
        free( lpszvalue );
    }

	if ( api_result < 0 ) {
		print_error( api_result );
		return 1;
	}

	// �����n���h����‚���
	XDW_CloseDocumentHandle( h, NULL );

	fclose( fp );
}

int main( int argc, char** argv ) {
	// �I�v�V�����̉��
	char prog[128];
	strcpy( prog, argv[0] );

	bool zenkaku = false;
	bool globdir = false;

	int opt;
	while ( ( opt = getopt( argc, argv, "pvzxdc::" ) ) != -1 ) {
		switch ( opt ) {
			case 'x':
				debug = true;
				break;
			case 'v':
				verbose = true;
				break;
			case 'p':
				plno = true;
				break;
			case 'c':
				column = atoi( optarg );
				break;
			case 'z':
				zenkaku = true;
				break;
			case 'd':
				globdir = true;
				break;
			default:
				fprintf( stderr, "error: illegal option '%c'.\n", opt );
				print_help();
				exit( 1 );
		}
	}

	if ( argc == 1 ) {
		print_help();
		exit( 1 );
	}

	char in_path[ _MAX_PATH ];
    _fullpath( in_path, argv[ argc - 1 ], _MAX_PATH );

	xdw2txt( in_path, "xdwhno.tmp1" );
	if ( verbose ) fprintf( stderr, "x2t done.\n" );

	if ( ( fp1 = fopen( "xdwhno.tmp1", "r" ) ) == NULL ) {
		fprintf( stderr, "can't open tmp file [%s].\n", "xdwhno.tmp1" );
		exit( 1 );
	}

	if ( ( fp2 = fopen( "xdwhno.tmp2", "w" ) ) == NULL ) {
		fprintf( stderr, "can't open tmp file [%s].\n", "xdwhno.tmp2" );
		exit( 1 );
	}

    yyin  = fp1;
	yyout = fp2;	
    yylex(); // �����͂̌Ăяo��

    return 0;
}

int yywrap() {
	if ( z2h ) {
		if ( verbose ) fprintf( stderr, "analysis done.\n" );
		fclose( fp1 );
		fclose( fp2 );

		if ( !debug ) {
			unlink( "xdwhno.tmp1" );
			unlink( "xdwhno.tmp2" );
		}

		exit( 0 );
	}

	z2h = true;
	if ( verbose ) fprintf( stderr, "z2h done.\n" );

	yyout = NULL;
	yylineno = 1;

	if ( ( fp2 = freopen( "xdwhno.tmp2", "r", fp2 ) ) == NULL ) {
		fprintf( stderr, "can't open tmp file [%s].\n", "xdwhno.tmp2" );
		exit( 1 );
	}

	yyin = fp2;

	return 0;
}