Re: TeX output for UML diagrams [path]
- From: Cyrille Chepelov <cyrille chepelov org>
- To: dia-list gnome org
- Subject: Re: TeX output for UML diagrams [path]
- Date: Sat, 5 Jan 2002 20:33:00 +0100
Le dim, jan 06, 2002, à 12:34:53 +0200, Ruslan Shevchenko a écrit:
1. Small problem with printing UML diagram in TeX: TeX special symbols
in names (such as #) are not escaped, as result TeX output
are not compiled by TeX.
So, I attach patch against dia-0.88.1
thanks for the patch ! It looks mostly good; I've not yet applied it, see
comments/questions below. But as it applies cleanly to CVS head, I don't see
why wouldn't it go in.
2. Are anybody know: what can cause invisability of some words in TeX
diagrams ?
I dunno, sorry. I use dia in dia+LaTeX combo through EPS (EPDF actually).
@@ -45,6 +45,7 @@
#include <string.h>
#include <time.h>
#include <math.h>
+#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -649,12 +650,89 @@
fprintf(renderer->file, "\\fill[fillstyle=solid,fillcolor=diafillcolor,linecolor=diafillcolor]}\n");
}
[ ... ]
+static char* create_tex_escaped_string(const char* in_text)
+{
+ /* count number of symbols to escaped */
+ int extra_count = 0;
+ const char* in_cursor;
+ char* out_cursor;
+ char* out_text;
+ char* prefix;
+ int replace=0;
+ for(in_cursor=in_text;*in_cursor; ++in_cursor) {
+ extra_count+=is_tex_escaped_symbol(*in_cursor,&prefix,&replace);
in all these loops, what happens if the input string is encoded in UTF-8 ?
(how does TeX behave when presented with UTF-8 data ? Can it even do that ?
OK, I tease you, but I'd be very happy to learn how)
+ }
+ /* now alloc memory and print prefixed escaped string */
+ out_text = malloc(strlen(in_text)+extra_count+1);
<nitpick>Please use gmalloc() here</nitpick>
+ out_cursor=out_text;
+ for(in_cursor=in_text;*in_cursor;) {
+ if (is_tex_escaped_symbol(*in_cursor,&prefix,&replace)) {
+ while(*prefix) *out_cursor++ = *prefix++;
+ }
+ if (!replace) {
+ *out_cursor++=*in_cursor++;
+ }else{
+ in_cursor++;
+ }
+ }
+ *out_cursor++='\0';
+ return out_text;
+}
+
static void
draw_string(RendererPSTRICKS *renderer,
const char *text,
Point *pos, Alignment alignment,
Color *color)
{
+ char* tex_escaped_text;
+
set_line_color(renderer,color);
fprintf(renderer->file,"\\rput");
@@ -668,7 +746,12 @@
fprintf(renderer->file,"[r]");
break;
}
- fprintf(renderer->file,"(%f,%f){\\scalebox{1 -1}{%s}}\n",pos->x, pos->y,text);
+
+ tex_escaped_text=create_tex_escaped_string(text);
+
+ fprintf(renderer->file,"(%f,%f){\\scalebox{1 -1}{%s}}\n",pos->x, pos->y,tex_escaped_text);
+
+ free(tex_escaped_text);
<nitpick>gfree()</nitpick>
Thanks in advance !
-- Cyrille
--
Grumpf.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]