#include "fribidixetex-dict.h"
#include "fribidixetex-defines.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/***********************
* D A T A *
***********************/
typedef struct
{
wchar_t hebrew[MAX_COMMAND_LEN];
char ascii[MAX_COMMAND_LEN];
}
dict_t;
#define LETTER_ALEPH L'א'
#define LETTER_TAV L'ת'
#define SIZEOF_ARRAY(x) (sizeof(x)/sizeof(x[0]))
dict_t dict_utf8_tags_perm[] =
{
{ L"ש", "L" },
{ L"י", "R" },
{ L"התחל", "begin" },
{ L"סיים", "end" },
{ L"כותרת", "title" },
{ L"תוכןעניינים", "tableofcontents" },
{ L"צורכותרת", "maketitle" },
{ L"מחבר", "author" },
{ L"תאריך", "date" },
{ L"חלק", "part" },
{ L"פרק", "chapter" },
{ L"סעיף", "section" },
{ L"תתסעיף", "subsection"},
{ L"תתתתסעיף", "subsubsection"},
{ L"הדגש", "emph" },
{ L"פריט", "item" },
{ L"נק", "item" },
{ L"תג", "label" },
{ L"ראה", "ref" },
{ L"הערתשוליים", "footnote" },
{ L"צטט", "cite" },
{ L"נקודות", "ldots" },
};
dict_t dict_utf8_envs_perm[] =
{
{ L"פירוט","itemize"},
{ L"תיאור","description" },
{ L"מספור", "enumerate" },
{ L"שיר", "verse" },
{ L"מסמך", "document" },
{ L"תקציר", "abstract" },
};
/*************/
/* User tags */
/*************/
int user_tags_size=0;
int user_envs_size=0;
dict_t dict_utf8_tags_user[MAX_USER_TRANSLATIONS];
dict_t dict_utf8_envs_user[MAX_USER_TRANSLATIONS];
/**************/
int dict_is_hebrew_letter(FriBidiChar ch)
{
return (LETTER_ALEPH<=ch && ch<=LETTER_TAV);
/* Range from alef to tav in Unicode */
}
char *dict_find(FriBidiChar *str,dict_t *dictionary,int size)
{
wchar_t *wstr;
int i;
FriBidiChar *bstr;
for(i=0;i<size;i++){
wstr=dictionary[i].hebrew;
bstr=str;
while(*bstr && *wstr && *bstr == (FriBidiChar)*wstr){
bstr++;
wstr++;
}
if(*bstr==0 && *wstr==0){
return dictionary[i].ascii;
}
}
return NULL;
}
char *dict_translate_env(FriBidiChar *str)
{
char *ptr;
ptr=dict_find(str,dict_utf8_envs_perm,SIZEOF_ARRAY(dict_utf8_envs_perm));
if(ptr== NULL)
return dict_find(str,dict_utf8_envs_user,user_envs_size);
return ptr;
}
char *dict_translate_tag(FriBidiChar *str)
{
char *ptr;
ptr=dict_find(str,dict_utf8_tags_perm,SIZEOF_ARRAY(dict_utf8_tags_perm));
if(ptr==NULL)
return dict_find(str,dict_utf8_tags_user,user_tags_size);
return ptr;
}
void dict_set_tag(dict_t *entry,FriBidiChar *uni,char *ascii)
{
int i;
for(i=0;uni[i];i++)
entry->hebrew[i]=uni[i];
entry->hebrew[i]=0;
strcpy(entry->ascii,ascii);
}
void dict_add_tans(FriBidiChar *tag_uni,char *tag_ascii,int type)
{
if(type == DICT_ENV) {
if(user_envs_size>=MAX_USER_TRANSLATIONS) {
fprintf(stderr,"Too many evironments translations added\n");
exit(1);
}
dict_set_tag(dict_utf8_envs_user+user_envs_size,tag_uni,tag_ascii);
user_envs_size++;
}
else {
if(user_tags_size>=MAX_USER_TRANSLATIONS) {
fprintf(stderr,"Too many tags translations added\n");
exit(1);
}
dict_set_tag(dict_utf8_tags_user+user_tags_size,tag_uni,tag_ascii);
user_tags_size++;
}
}