libLASi-1.1.0/examples/Example_2_Result.png100644 1752 1752 47657 10753200634 20604 0ustar00softwaresoftwarePNG  IHDR PN`PLTE222~qRCjvr:[^ZԖZvxu"""R2|qhϵ~jBFBfj͞bKGDH pHYs  ~tIME 7Sb IDATx {۬?jc?_3wy&iҦ[{]kkw5TJ%ECIѡPRt():Jߣi@Rѥdjxr3lH*хTe:k)(:*:UpoTt|Qt*St(:Z*tѡQ+(&EWE/WT_1D5-AQLJ81-urFEEGuGOLI,lXEohؤ*~Y$}Rt|Et4qhz>/(::Z1>] !YбG/-@iQt|)t'OB`8*:bZ&6:ȕ%"[Pdn~Ǘ@N,jq&GY9WDxYxEǗBǹZEp(::“)lI$nRt8+#8Gz`aX]9ﰞf׵3}x1թD}uo8?mw3I/Ö0WI_E XQБK֣7ϥb(I7,#6WDOX쟌)$_%[3@j*:Ξu䓮LK꟨6/to+i sKGu.,煗prHJ_QБ{ؒ[a ssu] 8f u݊u[>-:%f7x?0[+滹[pt`uu௕{(R"F̼ۤQa~ <_FeQO@(0rk+mV 6>gR}tmms 1}CQ6r& 93jCgF v P.N. l5 xr :٢(Z2Cw9`ja,;Ρ ]_> 70TB At "54 >BD|[nܻж%u<Z&`8!")C~wI~Ei00%Zq([@9e@v|Ym33b[T!2>+( 5QnWw{gEd S}l*xA|w=:z8i* *FInv3edzX( \S}UEjfeAt*\Hhp 3O}d$9ن?cGllhOM1u+ؿў) fı_[ZVjB1 qc=U Z-N jGdj,V/; :"UcgVƺ`"248~k5]o 3N) kHb^ usXXR+YY,;`{cxv 6Wb`Wʝ7q*sjInE&gj ECf`^8t2St"(03rL 6kKVD#&ߛ1A!zeSRp7Of:oH](L{_u0*{>U4'َCa&ӣV n^y:##Ɲ]&譙] CXW &%=zX OY*̤3M߼ q\%a6wuKI/+~G5- rCZR r|{ z%绣ïnPucb# 4GߞnȃtPpɴ&{80WB'q,-ؗ1~Z_9\5AcdxaRgm/o)Mr-sIVc [3zvߜkoܹ 7s.'504YV9bJ.EV&:{\=pu)|W2̘`>Mʇaxc} ͞tΥ@Lf;sUޒ.>Bo{ϸκgڼKQ<) Zпdesjk1umfp-*C7' 0#ϋ,Y +YHSrY=v,Akh%/'/910Q KjhwvkY a OWte71`.pD@o;N:5=JjȞ#~eW-=9^x|6 eqCg-]RUֳehqOŗPhu2>!;0+2vJ9sI&IyFG?4.JGB[8d2z+VE&eVUgJ߯+(h};tRǽIe =ߡxn[oRӸ{_Ʃ)iqJ&{Y1M`Xls(y=sCUё3ނ977<-ֹ=K n^aݍlDYpz=ԃ,~+(yy'׶ERjV]qJ0~0L8iZTH<"w0ea tN@wԋfq(lgo()WKhVM'h޾SѰSAnzxI'䏴UЁ[pߏ ԇFx;U=:JJ%ECIѡPRt():J%ECIѡPRt():J^$z`w{#:+LXet?@!)i֜Y:o֓@_xft<{F):W;9"vٛ2>vN_GG蚳,xCBg3w+:S׭:W-\;:/~yF,V&ݜ#uUPx惛gsjxWt$| (>E:3w')n~;"kMX f ~| yu 9~HthրG*:*$/J ?xC.;}f$s'3YQ;:f.wб5%xA5eN[GPD9E{cc'ȥ#d@H_1x& ?Gm#0 :eVۆsg|2ղe)W 'HG9-:z݊=Iӓ1]w:g).r Qęꛣ<IS]1w9:j;@Q|_Ή seFr+Z 3t2X9GS Ft_ZD2:gёO vt<:hwp:o,˥xGџz~O#ieIJ/X{#bX#Ϙ%zIi=ːK^i䕢*n]1O3t4t#ɼ2:<xOtY2 tF2*rw{eW2ɐPfgx2Mk:)D=e$944WRt:;yi_9|e{z\LMձHōߌ>@ ,GlYNpB :R[VVt!:(ۿxכlO^슩~wYJbEWѷ*Kёe?[I:Jv2Ys-25ϟ5kUlgy Tt:>0 A#Ú9JJ%ECIѡPRt():J%ECIѡPRt():J%ECIѡPSt[^`Qxku\*f ʳ~`xz`dN7P۫Y`HϝCʔ-M}MeX6ңƕΙ]ғ43ț3ƟevޢUէTBgnKR -݊@.u<̿1(^1"g,-O =8uXv,u PwĔP|&v%+(8Te|L)$6I|6h3r 1gURsH|lI x f?!Т o(jJm -a/ua<80t@wFЊ8{AUgf^FXK,6P 1*(K}E$nOuS'І.~Dmۺyn΋zE;FVR: WT}=0dAynFl`ߒ%*f:KQPہK5UAumK^)UC@ cEim+qG<'Z`xj:VӡPnOJ }GFQG2d<2']A6= ?aI-Kp焽9U'2^X xF>@,5ULj@rS9) B|/OG IeXH`/çRs;0'j*" i|;FU!Ҽ1"cIZe(iA4s/!,5[0itaH 2tMW`PCtaITmAp Bѡ+`K}=*a&=~A]ryP* Ph$9 A`t-m1%VRcsr{(3d4;4یz*u&ttm7¶PxBTыyLIJ"hTwˈZ7 +sBqx6. t^:/!A,SWg˦kj6.2nlˑ]`nf"UF@Ax& :e:s2 R[Hy5)mt(T(@-8=HR0HKN TG2 C%ICm }oXy"<9a Q,$ hPO#zOěZi6sŀeRg/BZϵԕ`Ѩt6c $::٭@Jt5+_u\-+TPmIe?l Rє(㊌Zrku3 P)/5 1PG]-O5ZdVO*TV# {l\~nV|n7OF5c+\M,<dJU"(JdDޟ p5 /'*%?x@ OqJ{愇ڸqc%_T|!nGO>TbPj@:?ʸE.ROO"YuJ_9xwMcPBBD%SDKx4N\]Km=~儞L7:Vr !3SBY]ǣS#8"/+>!\ T6 ,|&c _Tz)mL Xk,KsAH ,RmJ)32!38U4l}jzfO\q͓KSgQ0pK9ugu4ke jFp&b=RpB|$<xA&\TM).ɣfco 7nU_٪75v*TV]URt():J%ECIѡPRt()):J%ECIѡPRt():JJ%ECIѡ5qwkQ|F>:@ǷmO۷Ʋf_ #||St|t`Aoi7?_ǑqmNtGv~{: /1)xcڕǷ.S񏣃xLJBJ!?8yQP01*:u݄ 5c~>ᩯFGsv!~IW#cGHWyN'*:: bSҠ#_BGx<. :#վЧyiѱ_︀'LuNW@㎎!` QEV x#D%C wUwr `:dF'8J @*:O2h):ޥxֶ(:絊E5 QRECIѡPRt():J%ECIѡPRt():J%ECIѡPRt()):J%ECIѡO#̶z|Е/<}O=[a>[i{Un1{;K[y1m_(mWon{2J܋կf[k]wP],~ss \¯{Q3< ¡m9x {)U#4Z2p:<&)%nu Xطnθ l'&7łgH衙> c?<_D)0ֶৃ EyzQ/S[u+-x>R2%P""_Rʐv؃VrdNmKCy^rkJ]j!Kت$Uۑ̕ ZϢ}k[ mG05txfǡ2^g0/vf`OhKi$m@:{A}|ήanpӑțKPÒi:Rkd1~i°TF:@ wqo+Y0I 1v>d/H5Gvk(yY;ma"k2l܆pC@c3. EviH7CN(L]v>ę- 77XC 6yϤ IDATP"h1&}wH ޺VO܎ ]ءeTDpĤ;d8Dy]ڻt c{n+ $~AX&C_m-ښuC`,35bPa)PK+WCZتS3.`{Ÿn, GqF|iiIX_cg)w5A{?l;> F߰],w"[!}h x7YP6g7@1K;@:0>EyifFTrbR2Ip8͟AɒETmq՝y:B3q)ȔJč*iT)/ 1]jۨ #Tm]-`–PA Z!7#6Ic(M+a1>pNY[W `ƮW7&f6CPA ,uw}~&d(EI;{%6.Me'YImWl е<6 ]@V$u,}&mmzd!"[BZ{KC-]Iu;VabQn]m[DˤY[Q,4ԃC\U3gc'aHHpXTS[ H7^ !@UQO,=sN#`+ /cmN|u j@T8Ԡy VGn9'G;1 ?;pGm}W$52#@E0j_Et$ФzvOwR{5t*\3[Mׯk|0s/B;}@hfݮ-jvOiH>S9Pޯ"^ Ɓ VjlmEγQi Vp [ 7t7OXhGcڋX8ao_."h@rr?fWV``V :E(מ~pڀO3Eg:LB;E췮Ò&2}Oa.!l7x-d= t IdA.b>lM%Brݑ|Zv\ܥV'83么ՄT3XʓoIFj˯^&Kn'[Ҥm}:֊oA`(t"ֆqZռ߹aO2\ 帙ח7loDɘfo}U7$U絟ʭ7ž[FGkJV+v-e5ޚD&Np]+q-PfYmuߒ{ tO4+u|i37N%VkX֋%t\׀5ApE߶8[8+6i\g#ORY/275o5[,, U[iMf zdALi#v_Ҧ[F1$yJ ž.e Vk>Zy RS/>˹]߁]r}h8U22m5XSs{Қeyga6lnG6ZW:JQzӹ".%I_\1?sr"+<'( 4mɘd(5r=evsYHtڭ J9ē6n<.ύ2v}7cP*mAX^m:"[CM0HyhEd^7a$dA|͂ Qð3ȩ1!~0Y%޶dZM?oOx,x[u[QjGcXFtx}溺EcebJl@V)J3R-[jPـ7BGβ@kAjd 8eHvIH &YZ̓"@j]o1+r.gIAAZmV^^CXHE 9tly(q"pJo q9.(ə阧b+i V#:ʲeE"Ɣ-դ-X^4G p ,.C.^Ƈ2du5:uј`1% {›knvg1E$0뽗55Y)tvI* Z&v#x2v{kng.Q{Xa𾗡2Z<)V2Fe#DSsj X6,J)IHԭ*|_[jZYVSYD̲@(n6_{Qe{e*3/e%P^HR wn,G/kYJة^Б.kZ=VUKIbQEkHHo*"oXAVi #JfؽL[s\q.\l{?8Њm]g(X,vZH邋by~.[nLij( RDgS(rK֘jo%w#Kf_yOm\ܲuAfl %]AAg 0/;KNPł*‰SCY6RAR[siw1hm$M$t;·֩amlpǺZs 9cȃ+ 11!`@mƝu&`K?tKglІg2(܅)]Ϲn74$I'CƕоQ7+,d6 e VFL$"< "zu0̎ɀ zzYOj..#ݍ0,+˭3A? YFʀO/](oKf":hD|aU t$.N S\uqC C~(`=rJV ||k4XW=)V OYM\8z\Tu oI΋lc/_OhnZ9iT+=Ų>M@ȲM4 >&N$B5(?w<fCCr;skUQ+X>BLG~7+]`|ڗǕȏ}Ԅ֓0nRuǼ0)I'cc7k_5j-[0]yrϏT)4GXZ`St`q v):ފd?g~<1Tpx8@8*:+3!88ϧ;H;Mpw}xx%2E&&^drRıtt5}չh6=c-kZ,IeZ1qp yUx$Zzc`=D˃da&kmKtAq<@"("F;d1N`!x|8.R0y$.m)T&ᑲ&FQ8L \9<(8 2ja|G,Az. ȤƇ 5ƜVJtd+؛^\ۑK˘8O!4*GcbВ@NcK"#q{|KD|,M2]&(:; +'`19s+QlGFPR]@sby:<k0(ݛ Ƚ^pm=醥A/v t[C c|Lt,=,!C"*:ZР(X@M ݂x cۧƴc<-3ϏLJK#t"9NPi*utr:`:!O1R;&6'c8B>`р *aDH pƗBd}Pt#-N/m'zA4w[c Yfat@b0Qf#pʄ.D(!㎎p`ET#0߱[dX~HtX*WDuwpytqfAN߁K5.\? C3r]7q{<+>GёB?XđOxpjPD'>,:Zm`8R_ 5J>8=2EQl>NБwWrww['" w B, h7#NсFp&7 PGk+dJzԀ1VtA"=#<82k=`ͣLKU.XG;ggc,, ;}X&+SeYp%Fԃ-qzrYꜥm9Lˇp|:gy$$w}@̵v[-Ei+! ~ltI`9>[tjNtPӥAGZdqdyEi̼d;:; e+&T KtZވNyFr ŨQ=gV+H'ye1Җ;1\.\)^9]7:a==ݕR%E Mp$ٕKe4 igNY{W ?*\FB9_n":F_Y%8 APtOJ^qOed4fW,AEGCůQ0EG;~tF$/SH+ylԟ舿~K*h90:aj@WlaK}/լwFǪ>te0>Jo*CkcE_ ElwSP05Ę~ (W&&-KtS7?FGF!ʬPdmnݏq؍ $iD є$4 _a?~5_V#u\ݐ<ܨao8ep%f-*1Dŷ>сN kY X WFtMzO 7GBoW%}eAAet7D9M5Gn4v<}J$BЇ bh}1ZБ~&m eb"7AuB?/<ߠ1.F9xE1wǝFP'VQ~ "vt$~n0;4*X#A8%A(ҢsݷD1cnc:OǹCy-:$͸AZ p:sqHx;t8@U{p7?ؠ`d4 (S40 &!t8X'B3b{Ƣ"Df@p,ØA{<`WkY&ҡOJ<T觠S<(t(:i\p ilB_xCt,Et,'ڠ㞖kDžс%Utp8~SPt): 8F85♄StAǽԡ=3ZtݲGst &x[tTpgr&<Ңt`CRZtXE{#:9ٟ3`w0:^^@]рcol} aX+=ƭ++x/˂hGyEƧ3Z1;׼3tKA^b1Wt卽_qBczZxtYt4})^)0N~3Zz2Ƙ Li~3Va a;:pJ+eFxh9I/7q*(tSchؽw G4Q\@0 {Ytje}EǝQ6r,N9=b'f\˶CM!Hݕ}꾄Ii3# +l,eEۢ#N#9Min5?A?D\KFMD?N Sz tAzA=vF+:KRqHHx nN61o,vZ;Å3V`xOqX}A {c1ωxwtqNt,FG$=EE뎜?%:흢I AQt(:' ~PtAâ1RESp(:J%ECIѡPRt():JJ%ECIѡP谞?![/=x <[!rc $er y[[tB#Oin.\t~3IN*=>vT]آsu` Cy)|7#P,V{XЖ;mנԋ[ן=3\23|Bp=2*?"`и>@EI^H1 M>=3.7Oii/!R 67. ucܢD$HZdE W ܗZYo7a:g;8AXٛb5Ъl6hhif%eINE3HAH7ꊡj_Q;ÌMةag6@(dHl{AFΨ27h%ɘs~b7@DDYp$`քس0s!LPncr 3)(myF搱!h6ÂxFKוaIMNgD>~g7.!IDAT rr2F/KMQ,Sى&bW2>aa04͕ f 5& C V$ C9/YQbm2տ E,}lLWyٜ| K}>&4d"pt?̄7xicѠ@v1읐}S# <7AWǰhC<|%&$I W]ӥf{'nJ'y :El4@C$H(t(`nig"F+~si`=5#}u&V9D%C +OSbD[K; t! )sj01^g g*8LF#(Iچm’PXM֥8)wlh_D\hrSab.dmC.{P` ,lX":O`k.#弝AR?تOP/BA,Mv5Yt=\- gJ,:;XRL.ѓztXW*u4Θ.{L 6p(9ӁyOJ!4'Ҝ:D|kƖt)&O\5Ë* (Cf"7-җ.0 -'۩;w0{ 8e5|t"kбY䖰rU'g>qmPy{ c9˫yUOt0[x+3@踴醧%Sߖ{Iwm1ٽ gS~3-? 7E,J%ECIѡPRt():5"DXIENDB`libLASi-1.1.0/examples/ComplexTextLayoutExample.cpp100644 1752 1752 27433 10753200634 22404 0ustar00softwaresoftware#include #include #include #include using namespace LASi; using namespace std; int main(const int argc, char* const argv[]) { ofstream strm; try { // // This is the Postscript document object: // PostscriptDocument doc; //double x, y; double xAdvance,yMinimum,yMaximum,lineSpacing,yDelta; ///////////////////////////////////////////////// // // DOCUMENT HEADER: // // Here is where you put user-defined Postscript // procedures. LASi's glyph procedures also end up // in the header of the final Postscript document: // ///////////////////////////////////////////////// doc.osHeader() << "%%%%%%%%%%%%%%% " << endl; doc.osHeader() << "% " << endl; doc.osHeader() << "% Unit metrics: " << endl; doc.osHeader() << "% " << endl; doc.osHeader() << "%%%%%%%%%%%%%%% " << endl; doc.osHeader() << "/inch {72 mul} bind def" << endl; doc.osHeader() << "/cm {inch 2.54 div} bind def" << endl; doc.osHeader() << "/mm {cm 10 div} bind def" << endl; ///////////////////////////////////////////////// // // DOCUMENT BODY: // ///////////////////////////////////////////////// // // The Vera font family is available from www.gnome.org // See http://www.unifont.org/fontguide/ for download site // doc.osBody() << setFont("Vera Sans",LASi::NORMAL_STYLE,LASi::BOLD) << setFontSize(30); doc.osBody() << "gsave" << endl; doc.osBody() << "2 cm 26 cm moveto" << endl; doc.osBody() << "0.61 0.22 0.10 setrgbcolor" << endl; doc.osBody() << show("L"); doc.osBody() << "0.93 0.85 0.65 setrgbcolor" << endl; doc.osBody() << show("A"); doc.osBody() << "0.83 0.58 0.32 setrgbcolor" << endl; doc.osBody() << show("S"); doc.osBody() << "0.16 0.07 0.07 setrgbcolor" << endl; doc.osBody() << show("i"); doc.osBody() << "grestore" << endl; // // Set the standard font that we are going to use for comments in the document: // doc.osBody() << setFont("Vera Sans",LASi::ITALIC) << setFontSize(12); // // Determine a line spacing for the Vera Sans 12 point strings: // Be sure to pass a string to get_dimensions() that will have the // maximum ascenders and descenders that you will need for your text. // For example, for Latin text, at least one among "A", "X", "b", "d", and "k" // should be maximally ascendant, while at least one among "g", "p", "q", // and "y" should be maximally descendant. // // For other languages and scripts, you would choose different strings // for fixing line spacing. For a CTL script like Thai or Hindi, you // would definitely want to include vowels and other diacritic marks that // sit above or below consonants and would use a string like "ดูที่นี้" (Thai) or // "कि कु कू कै" (Devanagari). For Arabic, you might have to decide // whether you are going to have vocalized or unvocalized text, since // vocalization will increase the required line spacing. // doc.get_dimensions("AXbdk gpqy",&lineSpacing); // // Define a Postscript procedure called "newLine" which will use "lineSpacing" for the increment: // doc.osHeader() << "/leftMargin 2 cm def" << endl; doc.osHeader() << "/verticalPosition 25 cm def" << endl; doc.osHeader() << "/verticalIncrement " << lineSpacing << " def" << endl; doc.osHeader() << "/newLine {" << endl; doc.osHeader() << " /verticalPosition verticalPosition verticalIncrement sub def" << endl; doc.osHeader() << " leftMargin verticalPosition moveto" << endl; doc.osHeader() << "} bind def" << endl; doc.osBody() << "leftMargin verticalPosition moveto" << endl; doc.osBody() << show("LASi uses Pango's layout services to make laying out left-to-right") << endl; doc.osBody() << "newLine" << endl; doc.osBody() << show("and right-to-left text trivially easy:") << endl; // // You can always use the virtual "serif" or "sans" font // if you don't want to specify a specific font: // doc.osBody() << setFont("serif") << setFontSize(22) << endl; // // Here we pass the full set of parameters to get dimensions: // doc.get_dimensions("Hello World! / שלום",&lineSpacing,&xAdvance,&yMinimum,&yMaximum); // // Draw a rectangle showing the bounding box of the string: // yDelta=yMaximum-yMinimum; doc.osBody() << "gsave" << endl; doc.osBody() << "newpath" << endl; doc.osBody() << "1 0 0 setrgbcolor" << endl; doc.osBody() << "2.5 cm 23.2 cm moveto" << endl; doc.osBody() << 0 << " " << yMinimum << " rmoveto " << endl; doc.osBody() << 0 << " " << yDelta << " rlineto " << endl; doc.osBody() << xAdvance << " " << 0 << " rlineto " << endl; doc.osBody() << 0 << " " << -yDelta << " rlineto " << endl; doc.osBody() << "closepath" << endl; doc.osBody() << "stroke" << endl; doc.osBody() << "grestore" << endl; // // Now print the string: // doc.osBody() << "2.5 cm 23.2 cm moveto" << endl; doc.osBody() << show("Hello World! / ") << show("שלום");//shalom doc.osBody() << setFont("Vera Sans",LASi::ITALIC) << setFontSize(12); doc.osBody() << "leftMargin 22 cm moveto" << endl; doc.osBody() << show("Scripts with complex layout requirements, such as Arabic and Thai, are supported:") << endl; ///////////////////////////////////////////////// // // "ALEXANDRIA" IN ARABIC: الإسكندرية // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; doc.osBody() << "2.5 cm 20.5 cm moveto" << endl; // // The Ae_Cortoba font is available from arabeyes.org // See http://www.unifont.org/fontguide/ for download site // doc.osBody() << setFont("Ae_Cortoba") << setFontSize(22) << endl; doc.osBody() << "0.6 0.5 0.1 setrgbcolor" << endl; doc.osBody() << show("الإسكندرية"); doc.osBody() << "grestore" << endl; ///////////////////////////////////////////////// // // "UTHAITHANI" IN THAI: อุทัยธานี // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; doc.osBody() << "2.5 cm 19 cm moveto" << endl; // // Garuda is part of the Thai national font set from NECTEC. // See http://www.unifont.org/fontguide/ for download site // doc.osBody() << setFont("Garuda") << endl; doc.osBody() << setFontSize(30) << endl; doc.osBody() << "0.55 0.32 0.21 setrgbcolor" << endl; doc.osBody() << show("อุทัยธานี"); doc.osBody() << "grestore" << endl; // // Move the vertical position down to 17.5 cm: // doc.osBody() << "/verticalPosition 17.5 cm def" << endl; doc.osBody() << setFont("Vera Sans",LASi::ITALIC) << setFontSize(12); doc.osBody() << "leftMargin verticalPosition moveto" << endl; doc.osBody() << show("LASi is based on Unicode, so you can produce documents containing virtually any") << endl; doc.osBody() << "newLine" << endl; doc.osBody() << show("of the world's scripts while still using familiar Postscript operators to manipulate") << endl; doc.osBody() << "newLine" << endl; doc.osBody() << show("text or graphic elements:") << endl; ///////////////////////////////////////////////// // // "NAGANO PREFECTURE" IN JAPANESE: 長野県 // // Here we demonstrate using the Postscript "rotate" command // to achieve a nice graphic layout effect and show how easy // it is to mix LASi's show() method with Postscript: // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; doc.osBody() << "4.0 cm 14.0 cm moveto" << endl; // // See http://www.unifont.org/fontguide/ for // the Bitstream Cyberbit ftp download site: // doc.osBody() << setFont("Bitstream Cyberbit") << setFontSize(22) << endl; doc.osBody() << "0.4 0.4 0.75 setrgbcolor" << endl; doc.osBody() << "45 rotate" << endl; doc.osBody() << show("長"); doc.osBody() << "-15 rotate" << endl; doc.osBody() << show("野"); doc.osBody() << "-15 rotate" << endl; doc.osBody() << show("県"); doc.osBody() << "grestore" << endl; ///////////////////////////////////////////////// // // "SAINT PETERSBURG" in Cyrillic: Санкт-Петербург // // Notice the anamorphic scaling just to demonstrate another // simple effect in Postscript: // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; doc.osBody() << setFont("Bitstream Cyberbit"); doc.osBody() << "7.0 cm 14.2 cm moveto" << endl; doc.osBody() << "0.6 0.74 0.2 setrgbcolor" << endl; doc.osBody() << "0.65 1.75 scale" << endl; doc.osBody() << show("Санкт-Петербург"); doc.osBody() << "grestore" << endl; ///////////////////////////////////////////////// // // Bengali: First line from UN declaration des droits des hommes (en Bengali): // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; // // The Akaash Bengali font is // available from http://savannah.nongnu.org/download/freebangfont/ // See http://www.unifont.org/fontguide/ for // other Bengali font options: // doc.osBody() << setFont("Akaash"); doc.osBody() << setFontSize(16); doc.osBody() << "6.0 cm 15.7 cm moveto" << endl; doc.osBody() << "0.6 0.44 0.42 setrgbcolor" << endl; doc.osBody() << show("সমস্ত মানুস স্বাধীনভাবে সমান মর্যাদা এবং অধিকার নিয়ে জন্মগ্রহন করে । "); doc.osBody() << "grestore" << endl; // // Move the vertical position down to 13.0 cm: // doc.osBody() << "/verticalPosition 13.0 cm def" << endl; doc.osBody() << setFont("Vera Sans",LASi::ITALIC) << setFontSize(12); doc.osBody() << "leftMargin verticalPosition moveto" << endl; doc.osBody() << show("Equally important, the complete repetoire of scientific and mathematical symbols") << endl; doc.osBody() << "newLine" << endl; doc.osBody() << show("in Unicode are also available to you:") << endl; ///////////////////////////////////////////////// // // SOMETHING FROM MAXIMUM LIKELIHOOD STATISTICS: // // To demonstrate a layout with scientific symbols: // ///////////////////////////////////////////////// doc.osBody() << "gsave" << endl; doc.osBody() << "2.5 cm 10.9 cm moveto" << endl; doc.osBody() << setFontSize(22) << endl; doc.osBody() << "0.5 setgray" << endl; doc.osBody() << setFont("Bitstream Cyberbit") << endl; doc.osBody() << show("∴ ∂SS(δ) ∕ ∂δ ≡ 2Z′WX + 2(Z′WZδ)"); doc.osBody() << "grestore" << endl; doc.osBody() << "showpage" << endl; ///////////////////////////////////////////////// // // DOCUMENT FOOTER: // // Additional Postscript Document Structuring // Conventions may go here: // ///////////////////////////////////////////////// doc.osFooter() << "%%Pages: 1" << endl; //cerr << "doc.write(cout);\n"; // // Write it all out: // Is this easy or what? // // // If you need to write out an Encapsulated Postscript // (EPS) document, just include the BoundingBox parameters // llx, lly, urx, ury as additional parameters to the write() // method: // // doc.write(cout, llx, lly, urx, ury); // if (argc == 1) { doc.write(cout); } else { strm.open(argv[1]); doc.write(strm); strm.close(); } } catch (runtime_error& e) { cerr << e.what() << endl; return 1; } return 0; } libLASi-1.1.0/examples/MissingGlyphExample.cpp100644 1752 1752 1702 10753200634 21316 0ustar00softwaresoftware// // SimpleLASiExample.cpp // #include #include #include #include using namespace LASi; using namespace std; int main(const int argc, char* const argv[]) { ofstream strm; try { PostscriptDocument doc; // // Set font to generic "serif": // doc.osBody() << setFont("Arial") << setFontSize(18) << endl; //char testString[]={0xe2,0xab,0xb4,0x00}; const char *testString="Unicode U+2AF4 — U+2AF8 glyphs are : ⫴⫵⫶⫷⫸."; // // Show the string: // doc.osBody() << "28 560 moveto" << endl; doc.osBody() << show(testString); // // Postscript showpage: // doc.osBody() << "showpage" << endl; if (argc == 1) { doc.write(cout); } else { strm.open(argv[1]); doc.write(strm); strm.close(); } } catch (runtime_error& e) { cerr << e.what() << endl; return 1; } return 0; } libLASi-1.1.0/examples/Makefile.examples.in100644 1752 1752 1404 10753200634 20542 0ustar00softwaresoftwareCXX = @CMAKE_CXX_COMPILER@ EXEEXT = @EXEEXT@ RPATHCMD = @RPATHCMD@ PKG_ENV = PKG_CONFIG_PATH=@PKG_CONFIG_PATH@ all: example0.ps example1.ps example2.ps example0$(EXEEXT): MissingGlyphExample.cpp $(CXX) -o $@ $< \ $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi` example0.ps: example0$(EXEEXT) ./$< $@ example1$(EXEEXT): SimpleLASiExample.cpp $(CXX) -o $@ $< \ $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi` example1.ps: example1$(EXEEXT) ./$< $@ example2$(EXEEXT): ComplexTextLayoutExample.cpp $(CXX) -o $@ $< \ $(RPATHCMD) `$(PKG_ENV) pkg-config --cflags --libs lasi` example2.ps: example2$(EXEEXT) ./$< $@ clean: rm example0$(EXEEXT) example0.ps \ example1$(EXEEXT) example1.ps \ example2$(EXEEXT) example2.ps .PHONY: all clean libLASi-1.1.0/examples/Example_1_Result.png100644 1752 1752 7354 10753200634 20551 0ustar00softwaresoftwarePNG  IHDRxfda0PLTEBFB]`\rvrFBvr322$2bKGDH pHYs  ~tIME ()]&BIDATxoǏd0"3(*bEA7{1 {!P2h%'k3h%7p khXkz9E۽z@_X UH3`CMo䑼ibIDy<#m!t:AC!`g~_@w}5 :>AH h{ ~:(-& x@@C=h@7=碀vrO+Ztz/U~80P]z4bՃφKCIR۟5G!yi.]忼W h @BIKEB4'N{$<'\_X/V|U\m'; ͳBƝ}CjGmZ*- ]ƐAV^qQj;!6y6 -c҃&YԨAm9VDzp:ݐVi\25t8Mwʋ`qW]Pd? WrН'7lN"mtfy$+lh DP.(wJ:&/.zv Ot:j>`(ʠNiLñ7 KA SۜE7֊RSz=3.iw\dAw_ 1nʟ&(tKrƼc;. ]Խ~k,s-jkĥs-9%ZV:F6/:ӛէ$u]ι_y\>@LᲉ܆-C&Ϋ%K) [h5'"$,,n_G?IC ZGXEm|},lcs·? Jdz*qV DeC*K̆Wy5_PhqA< (L A}l*M4{7Dr+:EVtG i ~*RϨgر$t9u=-zOOA$""hpM'Ӫ?30pA/83 &dZAЪ'zbQi߆_It3|eB?R%EE{{Ro<781ï"sh)({s,] ?L~жgC^ҋXoC%,]n7~%pjN Ik(ޣ;ֶQ(bAkY4\QW#9.m{ &-N#Ka#AJANlr^9HH:NOQ$y?"]J lw#. ܐttAS*29]ƈOA lgP!HKnTN92d{`+BF{Af޳_,7GbY{R=m[罚]B>r?O"5ڷrhAD@zQ@< AC!?bIENDB`libLASi-1.1.0/examples/CMakeLists.txt100644 1752 1752 2770 10753200634 17427 0ustar00softwaresoftware# examples/CMakeLists.txt # Copyright (C) 2007 Andrew Ross # Copyright (C) 2007 Alan W. Irwin include_directories(${CMAKE_SOURCE_DIR}/include) add_executable(example0 MissingGlyphExample.cpp) target_link_libraries(example0 LASi) add_test(example0 ./example0 example0.ps) add_executable(example1 SimpleLASiExample.cpp) target_link_libraries(example1 LASi) add_test(example1 ./example1 example1.ps) add_executable(example2 ComplexTextLayoutExample.cpp) target_link_libraries(example2 LASi) add_test(example2 ./example2 example2.ps) install(FILES MissingGlyphExample.cpp SimpleLASiExample.cpp ComplexTextLayoutExample.cpp README Example_1_Result.png Example_2_Result.png DESTINATION ${DATA_DIR}/examples ) # Sort out RPATH issues for build of installed examples. if(USE_RPATH) get_target_property(_LIB_INSTALL_RPATH LASi INSTALL_RPATH) string(REGEX REPLACE ";" ":" LIB_INSTALL_RPATH "${_LIB_INSTALL_RPATH}") set(RPATHCMD "-Wl,-rpath -Wl,${LIB_INSTALL_RPATH}") endif(USE_RPATH) # Sort out PKG_CONFIG_PATH issues for build of installed examples. if("$ENV{PKG_CONFIG_PATH}" STREQUAL "") set(PKG_CONFIG_PATH "${libdir}/pkgconfig") else("$ENV{PKG_CONFIG_PATH}" STREQUAL "") set(PKG_CONFIG_PATH "${libdir}/pkgconfig:$ENV{PKG_CONFIG_PATH}") endif("$ENV{PKG_CONFIG_PATH}" STREQUAL "") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/Makefile.examples.in ${CMAKE_CURRENT_BINARY_DIR}/Makefile.examples ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Makefile.examples DESTINATION ${DATA_DIR}/examples RENAME Makefile ) libLASi-1.1.0/examples/SimpleLASiExample.cpp100644 1752 1752 5265 10753200634 20653 0ustar00softwaresoftware// // SimpleLASiExample.cpp // #include #include #include #include using namespace LASi; using namespace std; int main(const int argc, char* const argv[]) { ofstream strm; try { PostscriptDocument doc; double xAdvance,yMinimum,yMaximum,lineSpacing,yDelta; double llx,urx,lly,ury; // // Set font to generic "serif": // doc.osBody() << setFont("serif") << setFontSize(18) << endl; // // "Hello" in formal Arabic, English, Hebrew, and Hindi. // // See http://www.unifont.org/fontguide/ // if you need fonts for these scripts: // char testString[]="السلام عليكم Hello שלום नमस्ते"; // // Get string dimensions: // doc.get_dimensions(testString,&lineSpacing,&xAdvance,&yMinimum,&yMaximum); // // cerr << endl; // cerr << "X-ADVANCE : " << xAdvance << endl; // cerr << "Y-MINIMUM : " << yMinimum << endl; // cerr << "Y-MAXIMUM : " << yMaximum << endl; // cerr << "LINESPACING: " << lineSpacing << endl; // // // Draw a rectangle showing the bounding box of the string: // yDelta=yMaximum-yMinimum; doc.osBody() << "gsave newpath" << endl; doc.osBody() << "1.00 0.00 0.00 setrgbcolor" << endl; doc.osBody() << "100 600 moveto" << endl; doc.osBody() << 0 << " " << yMinimum << " rmoveto " << endl; doc.osBody() << 0 << " " << yDelta << " rlineto " << endl; doc.osBody() << xAdvance << " " << 0 << " rlineto " << endl; doc.osBody() << 0 << " " << -yDelta << " rlineto " << endl; doc.osBody() << "closepath" << endl; doc.osBody() << "stroke grestore" << endl; // // Show the string: // doc.osBody() << "100 600 moveto" << endl; doc.osBody() << show(testString); // // Advance to the next line: // doc.osBody() << "100 600 moveto" << endl; doc.osBody() << "0 " << -lineSpacing << " rmoveto" << endl; // // Print the test string again: // doc.osBody() << show(testString); // // Postscript showpage: // doc.osBody() << "showpage" << endl; // Calculate total bounding box llx = 100-1; urx = 100+xAdvance+1; lly = 600-lineSpacing+yMinimum-1; ury = 600+yMaximum+1; // Write out postscript document, including bounding box. // If the bounding box arguments are omitted then no // bounding box is included in the file. // if (argc == 1) { doc.write(cout,llx,lly,urx,ury); } else { strm.open(argv[1]); doc.write(strm,llx,lly,urx,ury); strm.close(); } } catch (runtime_error& e) { cerr << e.what() << endl; return 1; } return 0; } libLASi-1.1.0/examples/README100644 1752 1752 11402 10753200634 15557 0ustar00softwaresoftwareThree examples that use libLASi =============================== This directory contains three examples that use libLASi. Below we comment on each of these examples, comment on the structure of the resulting postscript files, and then give the build instructions for all examples. Missing Glyph libLASi Example (Example0) ======================================== The example C++ program, "MissingGlyphExample.cpp" is built into the executable, example0. This example renders UTF-8: 0xE2 0xAB 0xB4 = Unicode: U+2AF4 = "Triple vertical bar binary relation" through 0xE2 0xAB 0xB8 = Unicode: U+2AF8 = "TRIPLE NESTED GREATER-THAN". We have determined experimentally that this range of 5 math glyphs is rarely defined on most systems so the point of this example is to test how your system responds to missing glyphs. The correct response should be a rendering of an empty box for each undefined glyph. Some older versions of libLASi generate an incorrect showstopping error for undefined glyphs so this is a test for this potential regression. Simple libLASi Example (Example1) ================================= This example C++ program, "SimpleLASiExample.cpp" is built into the executable, example1. This example renders "Hello" in Arabic, English, Hebrew, and Hindi. Be sure to obtain the fonts listed in the source code, or substitute others present on your machine. See http://www.unifont.org/fontguide/ to obtain the Open Source fonts specified in the program if you need them. "Example_1_Result.png" will show you what the resulting Postscript should look like. Complex Text Layout libLASi Example (Example2) ============================================== This example C++ program, "ComplexTextLayoutExample.cpp" is built into the executable, example2. This example demonstrates a few additional features of libLASi and also demonstrates the layout of complex text layout (CTL) scripts such as Arabic and Indic scripts via Pango. This example prints strings in English, Hebrew, Arabic, Thai, Japanese, Bengali, and Cyrillic: Be sure to obtain the fonts listed in the source code, or substitute others present on your machine. See http://www.unifont.org/fontguide/ to obtain the Open Source fonts specified in the program if you need them. "Example_2_Result.png" will show you what the resulting Postscript should look like. Structure of the PostScript Files Resulting from libLASi ======================================================== The key thing to notice in these example results is that libLASi divides a Postscript document into three parts: a header, a body, and a footer. These three parts correspond directly to the document structure that you will usually find in a well-structured Postscript document. As shown in the example results, the header can contain Postscript convenience procedures that have been defined by the user to ease layout. The header will also contain all of the glyph outline procedures needed to draw the text of the document. Be sure to examine the Postscript output to see what these glyph procedures look like. The body contains the text that we want to print. Here the "gsave" and "grestore" operators are used so that we can change the graphics state -- color, rotation, translation, and so on -- and get back to the original state after we are done. Also notice the use of libLASi's setFont(), setFontSize(), and show() methods. These methods should remind you of the Postscript "setfont", "show" and related commands. But of course here we use libLASi's methods so we can manage Unicode text printed using TrueType and OpenType fonts. Notice that all of the strings are simply null-terminated UTF-8 strings. Another thing to notice is that we also use libLASi's get_dimensions() method to obtain a "lineSpacing". We then define a Postscript "newLine" routine that uses the "lineSpacing" value we got from libLASi. Finally the footer can contain any additional Postscript Document Structuring Conventions, such as the "%%Pages:" directive. Building the Three Examples =========================== The Makefile uses "pkg-config" to determine the proper location of headers and libraries for libLASi and the libraries that it requires. Pkg-config is available for Linux, Mac OS X, and Windows. If you have problems, make sure the environment variable PKG_CONFIG_PATH mentioned in the Makefile is modified to include (colon-separated) paths to the "freetype2", "pango.pc", and "panggoft2.pc" files. Usually this will be in /usr/lib/pkgconfig, /usr/local/lib/pkgconfig, or $PREFIX/lib/pkgconfig where $PREFIX is an installation prefix that you set up when configuring Pango. To compile the example0, example1, and example2 executables and generate the corresponding example0.ps, example1.ps, and example2.ps postscript results, type: make We hope you enjoy using libLASi! 2008-02-07: ET, AWI libLASi-1.1.0/README.release100644 1752 1752 6533 10753200634 15351 0ustar00softwaresoftwarelibLASi Release 1.1.0 ~~~~~~~~~~~~~~~~~~~~~ This is a stable release of libLASi. It represents the ongoing efforts of the libLASi developers to improve the libLASi library for creating PostScript documents that can contain characters from any of the script and symbol blocks supported in Unicode and by the Pango layout engine. If you encounter a problem with libLASi, then please send a bug report to the libLASI developers via the lasi-devel mailing list described at http://lists.sourceforge.net/lists/listinfo/lasi-devel. Please see the license under which this software is distributed (LGPL), and the disclaimer of all warrantees, given in the COPYING.LIB file. INDEX 1. Changes relative to our previous release (version 1.0.5p1 for FreeType versions less than 2.2 and version 1.0.6 for FreeType 2.2+). 1.1 Replace autotools-based build system with a CMake-based build system. 1.2 libLASi can now be built both on Unix and Windows. 1.3 The examples have been reorganized and extended. 1.4 libLASi is now more robust against font/glyph issues. 1.1 Replace autotools-based build system with a CMake-based build system. The build system is now based on CMake. It has been tested on Linux, Mac OS-X and Windows platforms. For directions on how to use CMake to build libLASi, please consult http://www.unifont.org/lasi/. In particular, the new build system has the capability of detecting the FreeType version so the previous split release (1.0.5p1 and 1.0.6) is no longer necessary. 1.2 libLASi can now be built both on Unix and Windows Our new CMake-based build system allows building libLASi on both Unix (Linux, Mac OS X, and proprietary Unices) and Windows (Cygwin, MinGW/MSYS, and Microsoft proprietary build environments) platforms. Instructions for various platforms have been collected at http://www.unifont.org/lasi/. 1.3 The examples have been reorganized and extended and can now be built in both the build tree and install tree. After running "cmake" (which configures libLASi) and "make" (which builds the libLASi library and examples which use that library in the build tree, see instructions at http://www.unifont.org/lasi/), you can run ctest in the build tree to run the examples. If ctest shows no errors, the PostScript results of that test of the libLASi library are collected in the examples/example[0-2].ps files in the build tree. See examples/README in the source tree for descriptions of these test examples. The examples can also independently be built and run in the install tree created by "make install" as well using cd $version/share/lasi$lasi_version/examples make where $version is the installation prefix specified as a command-line option for the cmake command, and $lasi_version is currently 1.1.0. The make command uses pkg-config to specify the correct C++ flags and link flags, and users with independent applications that link to libLASi are advised to use the same method as well. 1.4 libLASi is now more robust against font/glyph issues. Missing glyphs are now rendered as a blank rather than being the cause of showstopping errors seen in previous libLASi releases. Some font installations were occasionally returning non-outline glyphs that were causing segfault errors for older libLASi versions. The libLASi code has now been changed to render a blank for such cases and only attempt to render results for the outline glyphs it was designed for. libLASi-1.1.0/Doxyfile.user100644 1752 1752 141770 10753200634 15600 0ustar00softwaresoftware# Doxyfile 1.4.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = LASi # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/user # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = no # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = no # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = no # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the progam writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./src \ ./include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = src \ example # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO libLASi-1.1.0/COPYING100644 1752 1752 61314 10753200634 14123 0ustar00softwaresoftware GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libLASi-1.1.0/NOTES100644 1752 1752 0 10753200634 13564 0ustar00softwaresoftwarelibLASi-1.1.0/NEWS100644 1752 1752 1240 10753200634 13537 0ustar00softwaresoftware2003/07/28-LS Creating ./configure script. Preparing for beta release. 2003/07/31-LS Releasing 0.1.0 . 2003/08/11-LS Releasing 1.0.0. No more need for configure.sh. configure script will now find all necessary libraries and header files. 2004.12.04-ET Created 1.0.3 (Not released). Scaling bug fixed. A second more advanced example added. 2004.12.20-ET-RK Created 1.0.4. Fixed the way get_dimensions() works to handle descenders and ascenders properly, even for CTL scripts like Arabic, Hindi, Kannada, and Thai. Changed the order of parameters in setFont() to be more logical. NOTE BENE: Please refer to ChangeLog for more recent improvements. libLASi-1.1.0/ChangeLog.1.0.5p1100644 1752 1752 5135 10753200634 15522 0ustar00softwaresoftware1.0.5p1 2006.08.29.ET: * Fixed LASi's "lasi.pc.in" pkg-config file which was missing "-lLASi" 1.0.5 2006.04.28.AWI,ET: * Alan W. Irwin fixed a number of issues with the autotools configuration files, making them compliant with the latest stable releases of the GNU autotools and streamlining the packaging of LASi for Debian and other distributions. * Ed added bounding box parameters to the postscript document class' write() method so that LASi users can now generate EPS files correctly and more easily. * Updated links to reference unifont.org. * Applied Orion Poplawski's patch to make LASi comply with the latest C++ standard and compile with gcc 4.1+ and other compilers which implement tighter syntax checking. * Ed added support for directly passing STL std::string class parameters (old version only provided support for C-style strings). 1.0.4 2004.12.22.ET,RK: * Ritu fixed the lasi.pc and LASi.h installation script bugs * Ed added the StringDimensions class to manage the accrual of relevant text string dimensions. * Ed added the LASi::FontStyle and related enumerations in place of using Pango's enumerations. * Fixed PostscriptDocument::get_dimensions parameter type and ordering to make it more logical. * Revised comments in the code and generated new Doxygen documentation. * Revised the main index.html documentation. 1.0.3 2004.12.03.ET: * Fixed scaling bug. * Got rid of using tmpnam() for glyph identifiers * Changed the way Freetype2 headers are included to comply with Freetype2 conventions. 1.0.0 * Taking advangate of PKG_CHECK_MODULES in configure.ac, there is no longer a need to distribute and edit configure.sh as a wrapper to the configure script. configure can now generate all the necessary "-I" components of the gcc command line. 0.1.2 * Added src/*.h files to the distribution. This means that previous two distros wouldn't build outside of development sandbox. * Set permissions on all distributed files to 644. * Will not throw exception ("no glyph name available") when font face does not contain glyph names. Instead, it will create a random name. 0.1.1 * added PostscriptDocument::get_dimensions(const char*, double&, double&) * oPostscriptStream << show(...) no longer emits Postscript commands that modify origin of coordinate system, but instead advances current insertion point with each glyph drawn. * Performed some refactoring of PostscriptDocument to factor out traversal of glyph sequence corresponding to a string. PostscriptDocument::for_each_glyph_do(...). 0.1.0 Initial release libLASi-1.1.0/CMakeLists.txt100644 1752 1752 6666 10753200634 15621 0ustar00softwaresoftware# Top-level CMakeLists.txt for libLASi ### ### Process this file with cmake to produce Makefile ### # Version 2.4.5 or above of cmake is required! CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5 FATAL_ERROR) project(libLASi CXX) set(PACKAGE lasi) # Location where libLASi cmake build system first looks for cmake modules. set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules) # Version information. include(lasi_version) enable_testing() # parameters to control overall cmake behaviour. # Configure libLASi component variables.... include(lasi) # Use configured variables to process configurable top-level files. configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h ) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/lasi.pc.in ${CMAKE_CURRENT_BINARY_DIR}/lasi.pc ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lasi.pc DESTINATION ${PKG_CONFIG_DIR} ) install(FILES include/LASi.h DESTINATION ${includedir}) add_subdirectory(src) add_subdirectory(examples) # # Generating documentation with doxygen # if(DOXYGEN_EXECUTABLE AND UNIX) # N.B. Both the following custom rules assume the doc directory exists # at make time, and the following install(DIRECTORY... must have doc exist # at cmake time. Therefore, create the doc directory at CMake time. # (Linux experimentation indicates this is a no-op if the empty or # non-empty directory already exists.) file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/doc) # The initial rm command gets rid of everything previously built by this # custom command. add_custom_command( OUTPUT ${CMAKE_SOURCE_DIR}/doc/user/html/index.html COMMAND rm -rf ${CMAKE_SOURCE_DIR}/doc/user COMMAND mkdir ${CMAKE_SOURCE_DIR}/doc/user COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Doxyfile.user DEPENDS ${CMAKE_SOURCE_DIR}/Doxyfile.user WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) # The initial rm command gets rid of everything previously built by this # custom command. add_custom_command( OUTPUT ${CMAKE_SOURCE_DIR}/doc/developer/html/index.html COMMAND rm -rf ${CMAKE_SOURCE_DIR}/doc/developer COMMAND mkdir ${CMAKE_SOURCE_DIR}/doc/developer COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_SOURCE_DIR}/Doxyfile.developer DEPENDS ${CMAKE_SOURCE_DIR}/Doxyfile.developer WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) add_custom_target( documentation ALL DEPENDS ${CMAKE_SOURCE_DIR}/doc/user/html/index.html ${CMAKE_SOURCE_DIR}/doc/developer/html/index.html ) # Install the documentation generated at "make" time. install(DIRECTORY ${CMAKE_SOURCE_DIR}/doc/ DESTINATION ${docdir}/html) endif(DOXYGEN_EXECUTABLE AND UNIX) # # Packing stuff # set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The PostScript Complex Text Layout Library, LASi") set(CPACK_PACKAGE_VENDOR "Ed Trager ") set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README) if(WIN32) set(CPACK_GENERATOR ZIP) else(WIN32) set(CPACK_GENERATOR TGZ) endif(WIN32) set( CPACK_SOURCE_PACKAGE_FILE_NAME "libLASi-${VERSION}" CACHE INTERNAL "tarball basename" ) if(WIN32) set(CPACK_SOURCE_GENERATOR ZIP) else(WIN32) set(CPACK_SOURCE_GENERATOR TGZ) endif(WIN32) # The following components are regex's to match anywhere (unless anchored) # in absolute path + filename to find files or directories to be excluded # from source tarball. set(CPACK_SOURCE_IGNORE_FILES "~$" "^${PROJECT_SOURCE_DIR}.*\\\\.svn/" ) #message("CPACK_SOURCE_IGNORE_FILES = ${CPACK_SOURCE_IGNORE_FILES}") include(CPack) summary() libLASi-1.1.0/config.h.cmake100644 1752 1752 75 10753200634 15502 0ustar00softwaresoftware/* Have FreeType 2.2 or newer */ #cmakedefine HAVE_FT2_2PLUS libLASi-1.1.0/ChangeLog100644 1752 1752 107773 10753200634 14674 0ustar00softwaresoftware------------------------------------------------------------------------ r96 | airwin | 2008-02-08 17:10:48 -0800 (Fri, 08 Feb 2008) | 2 lines Changed paths: A /trunk/README.Release_Manager_Cookbook Initial commit of notes on the process of releasing libLASi at SourceForge. ------------------------------------------------------------------------ r95 | airwin | 2008-02-08 17:01:20 -0800 (Fri, 08 Feb 2008) | 2 lines Changed paths: M /trunk/CMakeLists.txt Make source release tarball name of form libLASi-${VERSION}.tar.gz ------------------------------------------------------------------------ r94 | airwin | 2008-02-08 16:20:13 -0800 (Fri, 08 Feb 2008) | 5 lines Changed paths: M /trunk/ChangeLog Create complete ChangeLog from when project was first created at SourceForge using lasi-1.0.5 source files. Used "svn log --verbose" to generate this ChangeLog. ------------------------------------------------------------------------ r93 | airwin | 2008-02-08 16:01:12 -0800 (Fri, 08 Feb 2008) | 2 lines Changed paths: M /trunk/examples/README Tweak wording. ------------------------------------------------------------------------ r92 | airwin | 2008-02-08 15:37:20 -0800 (Fri, 08 Feb 2008) | 2 lines Changed paths: M /trunk/README.release Tweak wording. ------------------------------------------------------------------------ r91 | airwin | 2008-02-08 15:36:50 -0800 (Fri, 08 Feb 2008) | 2 lines Changed paths: A /trunk/INSTALL Initial commit of INSTALL file. ------------------------------------------------------------------------ r90 | airwin | 2008-02-07 17:31:59 -0800 (Thu, 07 Feb 2008) | 2 lines Changed paths: A /trunk/README.release Initial commit of the release notes for the forthcoming release. ------------------------------------------------------------------------ r89 | airwin | 2008-02-07 17:13:33 -0800 (Thu, 07 Feb 2008) | 2 lines Changed paths: M /trunk/examples/README Tweak wording. ------------------------------------------------------------------------ r88 | airwin | 2008-02-07 15:46:10 -0800 (Thu, 07 Feb 2008) | 2 lines Changed paths: M /trunk/AUTHORS M /trunk/README Add Werner Smekal. ------------------------------------------------------------------------ r87 | airwin | 2008-02-07 15:23:11 -0800 (Thu, 07 Feb 2008) | 2 lines Changed paths: M /trunk/README Added Ritu Khanna as one of the copyright holders. ------------------------------------------------------------------------ r86 | airwin | 2008-02-07 15:22:35 -0800 (Thu, 07 Feb 2008) | 2 lines Changed paths: M /trunk/AUTHORS Tweaked some wording and added Andrew Ross. ------------------------------------------------------------------------ r85 | airwin | 2008-02-07 15:14:06 -0800 (Thu, 07 Feb 2008) | 4 lines Changed paths: M /trunk/README Update list of copyright holders. Tweak wording describing examples. ------------------------------------------------------------------------ r84 | andrewross | 2008-02-07 11:53:14 -0800 (Thu, 07 Feb 2008) | 3 lines Changed paths: M /trunk/src/psDoc.cpp Comment out debugging print messages in preparation for release. ------------------------------------------------------------------------ r83 | andrewross | 2008-02-07 03:04:39 -0800 (Thu, 07 Feb 2008) | 6 lines Changed paths: M /trunk/src/drawGlyph.cpp Hack to prevent segfaults with bitmap fonts. This just ignores any glyphs which are bitmap. The better solution would be to ensure pango doesn't select bitmap fonts. I've not found a way of achieving this though. ------------------------------------------------------------------------ r82 | andrewross | 2008-01-28 09:20:01 -0800 (Mon, 28 Jan 2008) | 3 lines Changed paths: M /trunk/examples/MissingGlyphExample.cpp Ensure fixed string is marked const char * to remove gcc warnings. ------------------------------------------------------------------------ r81 | airwin | 2008-01-27 18:06:56 -0800 (Sun, 27 Jan 2008) | 2 lines Changed paths: M /trunk/examples/CMakeLists.txt M /trunk/examples/Makefile.examples.in Fix rpath and PKG_CONFIG_PATH issues. ------------------------------------------------------------------------ r80 | airwin | 2008-01-27 18:05:57 -0800 (Sun, 27 Jan 2008) | 2 lines Changed paths: M /trunk/src/CMakeLists.txt INSTALL_RPATH for libLASi. ------------------------------------------------------------------------ r79 | airwin | 2008-01-27 18:04:13 -0800 (Sun, 27 Jan 2008) | 8 lines Changed paths: M /trunk/cmake/modules/lasi.cmake set RPATHCMD in examples/CMakeLists.txt instead of here. Find PANGO_RPATH. Option for USE_RPATH (defaults to ON, but system packagers will want to turn it OFF). ------------------------------------------------------------------------ r78 | airwin | 2008-01-27 17:38:45 -0800 (Sun, 27 Jan 2008) | 2 lines Changed paths: D /trunk/examples/Makefile.example.in A /trunk/examples/Makefile.examples.in (from /trunk/examples/Makefile.example.in:76) Rename to a more appropriate name. ------------------------------------------------------------------------ r77 | airwin | 2008-01-27 13:16:06 -0800 (Sun, 27 Jan 2008) | 5 lines Changed paths: M /trunk/cmake/modules/FindPkgConfig.cmake Synchronize with PLplot version of this CMake module. Use correct variables names in the documentation of macros. _pkgconfig_unset now done with correct variable names. ------------------------------------------------------------------------ r76 | airwin | 2008-01-27 12:50:07 -0800 (Sun, 27 Jan 2008) | 2 lines Changed paths: M /trunk Set svn:ignore property to ignore doc directory ------------------------------------------------------------------------ r75 | edtrager | 2007-03-27 11:47:25 -0700 (Tue, 27 Mar 2007) | 3 lines Changed paths: M /trunk/src/contextMgr.h Replaced call to free() with call to g_object_unref() ------------------------------------------------------------------------ r74 | airwin | 2007-03-07 18:49:08 -0800 (Wed, 07 Mar 2007) | 6 lines Changed paths: M /trunk/cmake/modules/instdirs.cmake Do not mark install area variables as advanced. This makes it muxh more obvious to ccmake users when there are unintended inconsistencies between these variables caused by a stale cache or failing to use -DCMAKE_INSTALL_PREFIX as a ccmake command-line option. ------------------------------------------------------------------------ r73 | edtrager | 2007-03-07 18:12:36 -0800 (Wed, 07 Mar 2007) | 4 lines Changed paths: M /trunk/examples/MissingGlyphExample.cpp M /trunk/src/psDoc.cpp (1) Uncommented std::cerr message for debugging purposes (2) Expanded example0 with additional likely-to-be-missing values in the string. ------------------------------------------------------------------------ r72 | edtrager | 2007-03-05 13:58:32 -0800 (Mon, 05 Mar 2007) | 20 lines Changed paths: M /trunk/src/psDoc.cpp (1) If FT_Load_Glyph results in an error in psDoc::for_each_glyph_do(), then we substitute glyph_index zero (0) which should work fine for all none-broken fonts. I consider this as a temporary solution for right now as I am still investigating why Pango appears to be returning an erroneous glyph_index. This appears to be a change in Pango or FreeType2 but I do not know yet what has changed. However I've decided to commit my change to SVN so that it can be tested on other platforms too. (2) Changed FT_LOAD_DEFAULT to FT_LOAD_NO_BITMAP since LASi is exclusively interested in scaled glyphs. No reason to waste CPU cycles loading embedded bitmaps. ------------------------------------------------------------------------ r71 | airwin | 2007-03-05 10:03:31 -0800 (Mon, 05 Mar 2007) | 4 lines Changed paths: M /trunk/CMakeLists.txt Be explicit about the C++ computer language used to build libLASi. This should slighly speed up the cmake execution since the tests for C language support will no longer be done. ------------------------------------------------------------------------ r70 | airwin | 2007-02-14 22:27:32 -0800 (Wed, 14 Feb 2007) | 4 lines Changed paths: M /trunk/src/glyphMgr.cpp Fix up assert's for -DNDEBUG case. N.B. this C++ coding change needs review since I am a C++ newbie. ------------------------------------------------------------------------ r69 | airwin | 2007-02-14 13:19:08 -0800 (Wed, 14 Feb 2007) | 3 lines Changed paths: M /trunk/CMakeLists.txt M /trunk/cmake/modules/lasi.cmake A /trunk/cmake/modules/summary.cmake Add summary of important configuration information at end of output from cmake. ------------------------------------------------------------------------ r68 | airwin | 2007-02-13 11:13:23 -0800 (Tue, 13 Feb 2007) | 3 lines Changed paths: M /trunk/examples/MissingGlyphExample.cpp Use same output handling as other examples. If second argument exists write to that file, otherwise write to stdout. ------------------------------------------------------------------------ r67 | airwin | 2007-02-13 10:52:55 -0800 (Tue, 13 Feb 2007) | 2 lines Changed paths: D /trunk/examples/example1 Remove the example1 directory which is now empty of content. ------------------------------------------------------------------------ r66 | airwin | 2007-02-13 10:52:09 -0800 (Tue, 13 Feb 2007) | 4 lines Changed paths: M /trunk/examples/README D /trunk/examples/example1/README Reorganize examples/README to deal with the three separate examples. Remove examples/example1/README which is now redundant. ------------------------------------------------------------------------ r65 | airwin | 2007-02-13 10:50:58 -0800 (Tue, 13 Feb 2007) | 2 lines Changed paths: M /trunk/examples/CMakeLists.txt Correct typo; SimpleLASi.cpp ==> SimpleLASiExample.cpp ------------------------------------------------------------------------ r64 | airwin | 2007-02-13 10:02:23 -0800 (Tue, 13 Feb 2007) | 4 lines Changed paths: M /trunk/examples/Makefile.example.in D /trunk/examples/example1/Makefile.example.in Add example0 and example1 rules to examples/Makefile.example.in. Remove examples/example1/Makefile.example.in since it is now redundant. ------------------------------------------------------------------------ r63 | airwin | 2007-02-13 09:55:55 -0800 (Tue, 13 Feb 2007) | 4 lines Changed paths: D /trunk/examples/example1/CMakeLists.txt Remove examples/example1/CMakeLists.txt because equivalent actions are now taken in examples/CMakeLists.txt. ------------------------------------------------------------------------ r62 | airwin | 2007-02-13 09:53:18 -0800 (Tue, 13 Feb 2007) | 8 lines Changed paths: M /trunk/examples/CMakeLists.txt A /trunk/examples/Example_1_Result.png (from /trunk/examples/example1/Example_1_Result.png:60) A /trunk/examples/MissingGlyphExample.cpp A /trunk/examples/SimpleLASiExample.cpp (from /trunk/examples/example1/SimpleLASiExample.cpp:60) D /trunk/examples/example1/Example_1_Result.png D /trunk/examples/example1/SimpleLASiExample.cpp Add examples/MissingGlyphExample.cpp. Move examples/example1/SimpleLASiExample.cpp examples/SimpleLASiExample.cpp. Move examples/example1/Example_1_Result.png examples/Example_1_Result.png. Update examples/CMakeLists.txt accordingly. ------------------------------------------------------------------------ r61 | airwin | 2007-02-13 09:35:12 -0800 (Tue, 13 Feb 2007) | 3 lines Changed paths: A /trunk/examples/CMakeLists.txt (from /trunk/examples/example2/CMakeLists.txt:59) A /trunk/examples/ComplexTextLayoutExample.cpp (from /trunk/examples/example2/ComplexTextLayoutExample.cpp:59) A /trunk/examples/Example_2_Result.png (from /trunk/examples/example2/Example_2_Result.png:59) A /trunk/examples/Makefile.example.in (from /trunk/examples/example2/Makefile.example.in:59) D /trunk/examples/example2 Move all files in examples/example2 to examples and remove examples/example2. ------------------------------------------------------------------------ r60 | airwin | 2007-02-13 09:28:49 -0800 (Tue, 13 Feb 2007) | 7 lines Changed paths: D /trunk/examples/CMakeLists.txt A /trunk/examples/README (from /trunk/examples/example2/README:59) D /trunk/examples/example2/README Start of reorganization of examples into one directory. Remove examples/CMakeLists.txt to make way for subsequent move of examples/example2/CMakeLists.txt to examples/CMakeLists.txt Move examples/example2/README to examples/README ------------------------------------------------------------------------ r59 | edtrager | 2007-02-12 18:55:07 -0800 (Mon, 12 Feb 2007) | 5 lines Changed paths: M /trunk/src/psDoc.cpp Corrected the copyright notice in psDoc.cpp to conform with the license notice in the LICENSE file. This is the copyright notice written out in Postscript files. ------------------------------------------------------------------------ r58 | andrewross | 2007-02-10 01:23:49 -0800 (Sat, 10 Feb 2007) | 3 lines Changed paths: M /trunk/examples/example1/SimpleLASiExample.cpp Add postscript bounding box to example 1 output. ------------------------------------------------------------------------ r57 | airwin | 2007-02-05 18:35:57 -0800 (Mon, 05 Feb 2007) | 2 lines Changed paths: D /trunk/doc Remove empty doc directory which is no longer needed under svn control. ------------------------------------------------------------------------ r56 | airwin | 2007-02-05 18:34:23 -0800 (Mon, 05 Feb 2007) | 3 lines Changed paths: M /trunk/CMakeLists.txt Create the doc directory at cmake time. This seems to work regardless of whether doc does not exist or exists as an empty or non-empty directory. ------------------------------------------------------------------------ r55 | smekal | 2007-02-05 00:40:57 -0800 (Mon, 05 Feb 2007) | 1 line Changed paths: M /trunk/cmake/modules/instdirs.cmake M /trunk/src/CMakeLists.txt Added the definition of bindir. For Windows the dll is now installed in the bin directory and not in the lib directory. This changes should have no impact for platforms. ------------------------------------------------------------------------ r54 | airwin | 2007-02-03 15:27:48 -0800 (Sat, 03 Feb 2007) | 3 lines Changed paths: M /trunk/README Update to point to the website, SourceForge project page, and website install directions. Also, note all the recent contributors. ------------------------------------------------------------------------ r53 | airwin | 2007-02-03 15:13:29 -0800 (Sat, 03 Feb 2007) | 7 lines Changed paths: M /trunk/examples/example1/Makefile.example.in M /trunk/examples/example2/Makefile.example.in Simplify Makefiles so they do not dump the README to the screen or launch gv (which may not be available on some systems). As a result of this simplification, what they do now (as the result of the "make" command) is build the examples and generate the postscript results, but that is probably what most users will expect. ------------------------------------------------------------------------ r52 | airwin | 2007-02-03 15:09:40 -0800 (Sat, 03 Feb 2007) | 2 lines Changed paths: M /trunk/examples/example1/README M /trunk/examples/example2/README Re-wrap paragraphs + some rewriting to correspond to new Makefiles. ------------------------------------------------------------------------ r51 | airwin | 2007-02-03 15:08:48 -0800 (Sat, 03 Feb 2007) | 3 lines Changed paths: M /trunk/cmake/modules/lasi.cmake Only set RPATHCMD (used for the installed examples Makefiles) for the non-Darwin case since Darwin does not recognize the -rpath option. ------------------------------------------------------------------------ r50 | airwin | 2007-02-03 13:54:30 -0800 (Sat, 03 Feb 2007) | 5 lines Changed paths: M /trunk/cmake/modules/lasi.cmake M /trunk/lasi.pc.in Work around deficiencies in the pkg-config file pangoft2.pc as distributed by the pango development package by explictly using information from the pkg-config freetype2.pc file to supply missing freetype2 linking information. ------------------------------------------------------------------------ r49 | airwin | 2007-02-02 23:46:20 -0800 (Fri, 02 Feb 2007) | 4 lines Changed paths: M /trunk Remove svn:ignore property for the doc subdirectory since that subdirectory is now under svn control. ------------------------------------------------------------------------ r48 | airwin | 2007-02-02 23:43:45 -0800 (Fri, 02 Feb 2007) | 5 lines Changed paths: M /trunk/CMakeLists.txt Since the doc subdirectory now always exists (it is under svn control for that case and also exists in the release tarball) remove the -p option for mkdir (which is not supported by some unices/shell in any case). ------------------------------------------------------------------------ r47 | airwin | 2007-02-02 23:34:13 -0800 (Fri, 02 Feb 2007) | 2 lines Changed paths: M /trunk/doc Ignore user and developer subdirectories of doc which are generated. ------------------------------------------------------------------------ r46 | edtrager2 | 2007-02-02 18:29:45 -0800 (Fri, 02 Feb 2007) | 6 lines Changed paths: A /trunk/doc The documentation directory "doc" must exist even if it is empty. Otherwise one gets a CMake error. This has happened to me on two different platforms today. ------------------------------------------------------------------------ r45 | airwin | 2007-02-02 13:06:38 -0800 (Fri, 02 Feb 2007) | 3 lines Changed paths: M /trunk/cmake/modules/lasi.cmake M /trunk/cmake/modules/pkg-config.cmake M /trunk/examples/example1/Makefile.example.in M /trunk/examples/example2/Makefile.example.in Implement rpath and PKG_CONFIG_PATH capability for Makefiles used for the installed examples tree. ------------------------------------------------------------------------ r44 | airwin | 2007-02-02 12:29:00 -0800 (Fri, 02 Feb 2007) | 2 lines Changed paths: M /trunk/cmake/modules/lasi.cmake # Set executable suffix for the Makefiles for the installation tree examples. ------------------------------------------------------------------------ r43 | airwin | 2007-02-02 12:15:42 -0800 (Fri, 02 Feb 2007) | 3 lines Changed paths: M /trunk/examples/example1/Makefile.example.in M /trunk/examples/example2/Makefile.example.in Configure the compiler and the executable suffix (for windows systems like Cygwin). ToDo: rpath and PKG_CONFIG_PATH. ------------------------------------------------------------------------ r42 | airwin | 2007-02-02 11:58:39 -0800 (Fri, 02 Feb 2007) | 2 lines Changed paths: M /trunk/examples/example1/Makefile.example.in M /trunk/examples/example2/Makefile.example.in Clean up of Makefiles. ------------------------------------------------------------------------ r41 | airwin | 2007-02-02 11:24:59 -0800 (Fri, 02 Feb 2007) | 4 lines Changed paths: M /trunk/examples/example2/CMakeLists.txt D /trunk/examples/example2/Makefile.example A /trunk/examples/example2/Makefile.example.in (from /trunk/examples/example2/Makefile.example:39) Configure Makefile.example. This clears the way so that the compiler, rpath and PKG_CONFIG_PATH can be configured. ------------------------------------------------------------------------ r40 | airwin | 2007-02-02 11:19:42 -0800 (Fri, 02 Feb 2007) | 4 lines Changed paths: M /trunk/examples/example1/CMakeLists.txt D /trunk/examples/example1/Makefile.example A /trunk/examples/example1/Makefile.example.in (from /trunk/examples/example1/Makefile.example:39) Configure Makefile.example. This clears the way so that the compiler, rpath and PKG_CONFIG_PATH can be configured. ------------------------------------------------------------------------ r39 | andrewross | 2007-02-02 10:24:35 -0800 (Fri, 02 Feb 2007) | 9 lines Changed paths: M /trunk/cmake/modules/instdirs.cmake M /trunk/examples/example1/CMakeLists.txt D /trunk/examples/example1/Makefile A /trunk/examples/example1/Makefile.example (from /trunk/examples/example1/Makefile:38) M /trunk/examples/example2/CMakeLists.txt D /trunk/examples/example2/Makefile A /trunk/examples/example2/Makefile.example (from /trunk/examples/example2/Makefile:38) Install examples in share/${PACKAGE}${VERSION}/examples/ These can be build and run as if they were in the build tree. Eventually it might be better if this used information from CMake to determine compiler etc. This could also allow the use of rpath to make sure the correct version of the library is used. ------------------------------------------------------------------------ r38 | andrewross | 2007-02-02 08:22:30 -0800 (Fri, 02 Feb 2007) | 8 lines Changed paths: M /trunk/CMakeLists.txt A /trunk/examples/CMakeLists.txt A /trunk/examples/example1/CMakeLists.txt M /trunk/examples/example1/SimpleLASiExample.cpp A /trunk/examples/example2/CMakeLists.txt M /trunk/examples/example2/ComplexTextLayoutExample.cpp Add automatic compilation of the two existing examples using the new cmake build system. Add ctest support for these examples. Running ctest in the build directory will run the two examples. Postscript output will appear in the examples/example[12]/ directories. ------------------------------------------------------------------------ r37 | smekal | 2007-02-01 13:22:16 -0800 (Thu, 01 Feb 2007) | 1 line Changed paths: M /trunk/cmake/modules/lasi.cmake M /trunk/lasi.pc.in For the win32+Shared libs case DLLFLAG is set to "-DLASi_DLL" which will be used to configure lasi.pc. pkg-config returns the correct flags for this case than. ------------------------------------------------------------------------ r36 | airwin | 2007-02-01 09:10:23 -0800 (Thu, 01 Feb 2007) | 4 lines Changed paths: M /trunk/CMakeLists.txt Greatly simplify the install logic for the generated documentation using the powerful "install(DIRECTORY..." signature. ------------------------------------------------------------------------ r35 | smekal | 2007-02-01 00:00:19 -0800 (Thu, 01 Feb 2007) | 1 line Changed paths: M /trunk/include/LASi.h Added macros which take care about import/export of functions and classes to and from a Windows-dll. This is needed for Visual C++ and other Windows compilers (but not for MinGW or Cygwin) ------------------------------------------------------------------------ r34 | airwin | 2007-01-31 17:55:12 -0800 (Wed, 31 Jan 2007) | 2 lines Changed paths: M /trunk/ChangeLog native line endings on ChangeLog ------------------------------------------------------------------------ r33 | airwin | 2007-01-31 17:20:19 -0800 (Wed, 31 Jan 2007) | 3 lines Changed paths: M /trunk Ignore doc since that is a directory that is automatically generated by the custom rules to generate the documentation. ------------------------------------------------------------------------ r32 | airwin | 2007-01-31 17:11:16 -0800 (Wed, 31 Jan 2007) | 2 lines Changed paths: M /trunk/CMakeLists.txt Drop unneeded touch commands for custom rules to build documentation. ------------------------------------------------------------------------ r31 | airwin | 2007-01-31 16:51:39 -0800 (Wed, 31 Jan 2007) | 2 lines Changed paths: A /trunk/ChangeLog Initial commit of ChangeLog file that is generated by svn2cl. ------------------------------------------------------------------------ r30 | airwin | 2007-01-31 16:48:04 -0800 (Wed, 31 Jan 2007) | 3 lines Changed paths: D /trunk/ChangeLog A /trunk/ChangeLog.1.0.5p1 (from /trunk/ChangeLog:26) Move old hand-crafted ChangeLog ==> ChangeLog.1.0.5p1 to make room for ChangeLog file that is automatically generated by svn2cl. ------------------------------------------------------------------------ r29 | airwin | 2007-01-31 16:28:35 -0800 (Wed, 31 Jan 2007) | 2 lines Changed paths: M /trunk/CMakeLists.txt M /trunk/cmake/modules/instdirs.cmake Install the generated documentation. ------------------------------------------------------------------------ r28 | airwin | 2007-01-31 14:09:37 -0800 (Wed, 31 Jan 2007) | 6 lines Changed paths: M /trunk/CMakeLists.txt M /trunk/Doxyfile.developer M /trunk/Doxyfile.user Make the user and developer documentation output areas distinct (doc/user and doc/developer). This eliminates the interaction between the two custom rules and allows there to be one overall "documentation" target that is automatically invoked if make all (or make) is invoked. ------------------------------------------------------------------------ r27 | airwin | 2007-01-30 22:53:44 -0800 (Tue, 30 Jan 2007) | 3 lines Changed paths: M /trunk/CMakeLists.txt Create custom targets user-docs and developer-docs for building either user documentation or developer documentation using doxygen. ------------------------------------------------------------------------ r26 | airwin | 2007-01-30 20:41:34 -0800 (Tue, 30 Jan 2007) | 3 lines Changed paths: M /trunk/AUTHORS M /trunk/CMakeLists.txt M /trunk/COPYING M /trunk/ChangeLog M /trunk/Doxyfile.developer M /trunk/Doxyfile.user M /trunk/NEWS M /trunk/NOTES M /trunk/README M /trunk/cmake/modules/FindPkgConfig.cmake M /trunk/cmake/modules/instdirs.cmake M /trunk/cmake/modules/lasi.cmake M /trunk/cmake/modules/lasi_version.cmake M /trunk/cmake/modules/pkg-config.cmake M /trunk/config.h.cmake M /trunk/examples/example1/Makefile M /trunk/examples/example1/README M /trunk/examples/example1/SimpleLASiExample.cpp M /trunk/examples/example2/ComplexTextLayoutExample.cpp M /trunk/examples/example2/Makefile M /trunk/examples/example2/README M /trunk/include/LASi.h M /trunk/lasi.pc.in M /trunk/src/CMakeLists.txt M /trunk/src/contextMgr.h M /trunk/src/drawGlyph.cpp M /trunk/src/drawGlyph.h M /trunk/src/glyphMgr.cpp M /trunk/src/glyphMgr.h M /trunk/src/manager.h M /trunk/src/psDoc.cpp M /trunk/src/stringDimensions.h M /trunk/src/util.cpp M /trunk/src/util.h Mass setting of property svn:eol-style to 'native' for all files under svn control except the *.png files. ------------------------------------------------------------------------ r25 | airwin | 2007-01-30 20:39:11 -0800 (Tue, 30 Jan 2007) | 2 lines Changed paths: M /trunk/CMakeLists.txt M /trunk/src/psDoc.cpp Fix line-ending problems. ------------------------------------------------------------------------ r24 | airwin | 2007-01-30 20:36:11 -0800 (Tue, 30 Jan 2007) | 6 lines Changed paths: A /trunk/Doxyfile.developer (from /trunk/Doxyfile.developer.cmake:23) D /trunk/Doxyfile.developer.cmake A /trunk/Doxyfile.user (from /trunk/Doxyfile.user.cmake:23) D /trunk/Doxyfile.user.cmake It turns out don't need to cmake-configure doxygen configuration files after all. So revert ".cmake" suffix on name, e.g., move Doxyfile.developer.cmake ==> Doxyfile.developer Doxyfile.user.cmake ==> Doxyfile.user ------------------------------------------------------------------------ r23 | airwin | 2007-01-30 18:00:34 -0800 (Tue, 30 Jan 2007) | 2 lines Changed paths: D /trunk/Doxyfile.developer A /trunk/Doxyfile.developer.cmake (from /trunk/Doxyfile.developer:22) D /trunk/Doxyfile.user A /trunk/Doxyfile.user.cmake (from /trunk/Doxyfile.user:22) Move doxygen configuration files to names appropriate for configured versions. ------------------------------------------------------------------------ r22 | airwin | 2007-01-30 17:53:34 -0800 (Tue, 30 Jan 2007) | 3 lines Changed paths: M /trunk/Doxyfile.developer M /trunk/Doxyfile.user Update doxygen configuration files from 1.2.x to 1.4.x version of doxygen using "doxygen -u filename" command. ------------------------------------------------------------------------ r21 | airwin | 2007-01-30 16:08:02 -0800 (Tue, 30 Jan 2007) | 10 lines Changed paths: A /trunk/cmake/modules/FindPkgConfig.cmake D /trunk/cmake/modules/UseOurPkgConfig.cmake M /trunk/cmake/modules/lasi.cmake M /trunk/cmake/modules/pkg-config.cmake Modify our configuration to take advantage of the extremely useful pkg_check_modules macro which appears in the new (in CMake cvs) FindPkgConfig.cmake module. Note, FindPkgConfig.cmake should be removed from the libLASi tree when it becomes part of a normal cmake release. Also note our special version of the legacy (in CMake cvs) UsePkgConfig.cmake module (updated to provide version information) is no longer required. ------------------------------------------------------------------------ r20 | airwin | 2007-01-30 15:59:50 -0800 (Tue, 30 Jan 2007) | 3 lines Changed paths: M /trunk/lasi.pc.in Add Requires field so the configured pkg-config file does not have to be supplemented by other pkg-config modules. ------------------------------------------------------------------------ r19 | airwin | 2007-01-30 12:52:20 -0800 (Tue, 30 Jan 2007) | 2 lines Changed paths: A /trunk/cmake/modules/instdirs.cmake M /trunk/cmake/modules/lasi.cmake Implement autotools-like support for a variety of install directories. ------------------------------------------------------------------------ r18 | airwin | 2007-01-30 11:32:23 -0800 (Tue, 30 Jan 2007) | 2 lines Changed paths: M /trunk/cmake/modules/lasi.cmake Quote last argument to transform_version to make its use more robust. ------------------------------------------------------------------------ r17 | smekal | 2007-01-30 11:28:30 -0800 (Tue, 30 Jan 2007) | 1 line Changed paths: M /trunk/src/psDoc.cpp This change in the order of initialization should fix a warning reported by Orion Poplawski, but should have no impact on the code itself. ------------------------------------------------------------------------ r16 | smekal | 2007-01-30 11:26:07 -0800 (Tue, 30 Jan 2007) | 1 line Changed paths: M /trunk/CMakeLists.txt Source packages for Windows are now in zip format as the binary package. ------------------------------------------------------------------------ r15 | airwin | 2007-01-29 23:08:34 -0800 (Mon, 29 Jan 2007) | 3 lines Changed paths: M /trunk/cmake/modules/lasi.cmake Allow major, minor, and patch numbers up to 999 in the version triplet processed by the TRANSFORM_VERSION macro. ------------------------------------------------------------------------ r14 | airwin | 2007-01-29 22:45:50 -0800 (Mon, 29 Jan 2007) | 3 lines Changed paths: M /trunk/cmake/modules/lasi.cmake Make TRANSFORM_VERSION macro more robust and use it to do version checks for FreeType2 library version number. ------------------------------------------------------------------------ r13 | smekal | 2007-01-29 08:14:09 -0800 (Mon, 29 Jan 2007) | 1 line Changed paths: M /trunk/CMakeLists.txt Removed some WIN32 specific code, which should be not necessary for libLASi. ------------------------------------------------------------------------ r12 | airwin | 2007-01-28 19:34:52 -0800 (Sun, 28 Jan 2007) | 4 lines Changed paths: A /trunk/examples A /trunk/examples/example1 A /trunk/examples/example1/Example_1_Result.png A /trunk/examples/example1/Makefile A /trunk/examples/example1/README A /trunk/examples/example1/SimpleLASiExample.cpp A /trunk/examples/example2 A /trunk/examples/example2/ComplexTextLayoutExample.cpp A /trunk/examples/example2/Example_2_Result.png A /trunk/examples/example2/Makefile A /trunk/examples/example2/README Initial commit of all files in the examples tree from lasi-1.0.5p1. (lasi-1.0.6 has the same files). ------------------------------------------------------------------------ r11 | edtrager2 | 2007-01-28 17:34:57 -0800 (Sun, 28 Jan 2007) | 7 lines Changed paths: A /trunk/cmake/modules/UseOurPkgConfig.cmake Ooops, Forgot to add my localized version of UsePkgConfig -- Here it is: UseOurPkgConfig.cmake - Ed ------------------------------------------------------------------------ r10 | edtrager2 | 2007-01-28 17:23:46 -0800 (Sun, 28 Jan 2007) | 17 lines Changed paths: M /trunk/cmake/modules/lasi.cmake M /trunk/cmake/modules/pkg-config.cmake (1) Modified a local version of CMAKE's UsePkgConfig to execute & store the return value of "pkg-config --modversion" so that we can examine a package's version number. (2) Modified lasi.cmake to inspect FreeType2's major and minor version number. A MAJOR number of 9 is required. A MINOR number of 10+ means FT2 2.2.1+. Works for me on my FT2 2.2.1 system. I'll have to check FT2.1.x on some other machine after I do the commit. - Ed Trager ------------------------------------------------------------------------ r9 | airwin | 2007-01-27 18:23:33 -0800 (Sat, 27 Jan 2007) | 3 lines Changed paths: M /trunk/src/drawGlyph.cpp Fix typo. HAVE_FT2_2plus ==> HAVE_FT2_2PLUS ------------------------------------------------------------------------ r8 | airwin | 2007-01-27 17:45:07 -0800 (Sat, 27 Jan 2007) | 6 lines Changed paths: M /trunk/CMakeLists.txt Ignore .svn directories in the source tree when making a source release tarball with "make source_package". Drop the boiler-plate ignoring of .cvsignore and CVS files for source releases. This CVS-related logic is no longer necessary since we are now svn based. ------------------------------------------------------------------------ r7 | airwin | 2007-01-27 17:28:21 -0800 (Sat, 27 Jan 2007) | 9 lines Changed paths: M /trunk/CMakeLists.txt M /trunk/cmake/modules/lasi.cmake A /trunk/config.h.cmake M /trunk/src/drawGlyph.cpp Definitions of some functions in FreeType that prior to 2.2 took non-const pointers now (in FreeType 2.2+) take const pointers. This API incompatibility is now taken care of by defining the HAVE_FT2_2PLUS C++ language macro. Currently this is controlled from CMake by the CMake option of the same name (which defaults to OFF), but this is just a temporary measure, and this needs to be replaced by a CMake test which detects whether FreeType 2.2+ is installed and set HAVE_FT2_2PLUS ON or OFF accordingly. ------------------------------------------------------------------------ r6 | airwin | 2007-01-27 17:03:30 -0800 (Sat, 27 Jan 2007) | 2 lines Changed paths: M /trunk/ChangeLog Tweak to bring ChangeLog up to date as of 1.0.5p1 ------------------------------------------------------------------------ r5 | airwin | 2007-01-27 15:39:58 -0800 (Sat, 27 Jan 2007) | 2 lines Changed paths: M /trunk/cmake/modules/lasi.cmake Add some infrastructure support to define DOXYGEN_EXECUTABLE ------------------------------------------------------------------------ r4 | airwin | 2007-01-27 15:26:32 -0800 (Sat, 27 Jan 2007) | 9 lines Changed paths: M /trunk/cmake/modules/lasi_version.cmake Usually version information should just be updated right before a release, but in this case where we are just establishing a new build system that deals with the libfreetype API change, I thought it important to distinguish these build results from everything that was done previously. Accordingly, the package number has been tentatively updated from 1.0.5p1 to 1.1.0 and the library patch version number has been incremented. These numbers should be reviewed and finalized just before release. ------------------------------------------------------------------------ r3 | airwin | 2007-01-27 10:39:44 -0800 (Sat, 27 Jan 2007) | 2 lines Changed paths: M /trunk/CMakeLists.txt Install configured lasi.pc from correct (binary) directory. ------------------------------------------------------------------------ r2 | airwin | 2007-01-27 10:32:52 -0800 (Sat, 27 Jan 2007) | 2 lines Changed paths: A /trunk/CMakeLists.txt A /trunk/cmake A /trunk/cmake/modules A /trunk/cmake/modules/lasi.cmake A /trunk/cmake/modules/lasi_version.cmake A /trunk/cmake/modules/pkg-config.cmake A /trunk/src/CMakeLists.txt Initial commit of CMake build system. ------------------------------------------------------------------------ r1 | airwin | 2007-01-27 10:10:00 -0800 (Sat, 27 Jan 2007) | 6 lines Changed paths: A /branches A /tags A /trunk A /trunk/AUTHORS A /trunk/COPYING A /trunk/ChangeLog A /trunk/Doxyfile.developer A /trunk/Doxyfile.user A /trunk/NEWS A /trunk/NOTES A /trunk/README A /trunk/include A /trunk/include/LASi.h A /trunk/lasi.pc.in A /trunk/src A /trunk/src/contextMgr.h A /trunk/src/drawGlyph.cpp A /trunk/src/drawGlyph.h A /trunk/src/glyphMgr.cpp A /trunk/src/glyphMgr.h A /trunk/src/manager.h A /trunk/src/psDoc.cpp A /trunk/src/stringDimensions.h A /trunk/src/util.cpp A /trunk/src/util.h Import of selected files from lasi-1.0.5p1. The following directories were excluded: cf, doc, and examples. This left only the top-level, src, and include directories to be included. Furthermore, all files in the included directories that were related to autotools were excluded from the import. ------------------------------------------------------------------------ libLASi-1.1.0/README100644 1752 1752 6475 10753200634 13737 0ustar00softwaresoftwareABOUT libLASi ============= libLASi website is located at http://www.unifont.org/lasi/ with the project page located at http://sourceforge.net/projects/lasi. libLASi is a library that provides a C++ stream output interface (with operator<< ) to writing Postscript and Encapsulated Postscript documents containing any of the world's scripts supported by Unicode 4.0 and the Pango complex text layout engine. You can use any TrueType or OpenType fonts that you want. The library accomodates both left-to-right (e.g. most European languages) as well as right-to-left (e.g. Hebrew, Arabic) scripts, as well as Complex Text Layout (CTL) scripts such as Devanagari, Bengali, Thai, and other Indic and Indic-derived scripts. You can include any number of different scripts or languages in the same document without need for any special configuration or layout calculation on the programmer's part. libLASi accepts Unicode strings encoded in the UTF-8 transformation format which is the de facto standard on Linux and other *nix systems. Although Postscript printing capability exists in open-source toolkits such as Gnome and QT, libLASi was designed for projects that are independent of any one Graphic User Interface (GUI) toolkit or do not even make use of a GUI interface but still require the ability to produce Postscript output containing Unicode text. For installation instructions, see http://www.unifont.org/lasi/ For example programs that uses libLASi, please see the examples directory located in the install tree at $prefix/share/lasi$version/examples where $prefix is the installation prefix and $version is the version of lasi (1.1.0 at the time of writing). An example is provided with such obscure glyphs they are bound to be missing on most systems (which tests that libLASi is robust against that situation). Simple and slightly more extensive examples are provided as well that have more interesting output. See the file COPYING for terms of copying and re-distribution. Copyright (C) 2003, 2004, 2006 Larry Siden Copyright (C) 2008 Ed Trager Copyright (C) 2008 Ritu Khanna Copyright (C) 2008 Alan W. Irwin Copyright (C) 2008 Andrew Ross Copyright (C) 2008 Werner Smekal This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. Original Author: Larry Siden 4047 Rolling Meadow Lane Pittsfield Twp., MI 48197-6619, USA http://umich.edu/~lsiden mailto:lsiden@gmail.com Contributors: Edward H. Trager ehtrager@umich.edu http://eyegene.ophthy.med.umich.edu Ritu Khanna rituk@umich.edu Alan W. Irwin irwin@beluga.phys.uvic.ca Andrew Ross andrewross@users.sourceforge.net Werner Smekal smekal@iap.tuwien.ac.at libLASi-1.1.0/lasi.pc.in100644 1752 1752 422 10753200634 14702 0ustar00softwaresoftwareprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: LASi Description: Library to write UTF-8 strings to Postscript stream. Version: @VERSION@ Requires: freetype2,pango,pangoft2 Libs: -L${libdir} -lLASi Cflags: -I${includedir} @DLLFLAG@ libLASi-1.1.0/src/manager.h100644 1752 1752 1673 10753200634 15424 0ustar00softwaresoftware/** @file * Convert return-code of Freetype library calls to std::runtime_error. * Usage: place every call to Freetype library inside FtEval::eval(). * * libLASi provides a C++ output stream interface for writing * multi-language Postscript documents. * Copyright (C) 2003, 2004 Larry Siden. * * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #ifndef MANAGER_H #define MANAGER_H #include #include #include /** Manager template. * Make underlying types exception-safe. */ template class Manager { protected: T _t; public: Manager() : _t(0), _isOwner(false) {} Manager(const T t) : _t(t), _isOwner(true) {} operator T() const {return _t;} protected: bool isOwner() const {return _isOwner;} void release() {_isOwner = false;} private: bool _isOwner; }; #endif libLASi-1.1.0/src/contextMgr.h100644 1752 1752 1602 10753200634 16134 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing multi-language Postscript documents. * Copyright (C) 2003 Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #ifndef CONTEXT_MGR_H #define CONTEXT_MGR_H #include #include #include "manager.h" /** Manage PangoContext* */ class ContextMgr : public Manager { public: ContextMgr( const char* const lang="en_US.UTF-8", const int dpiX = 72, const int dpiY = 72) { _t = pango_ft2_get_context(dpiX, dpiY); pango_context_set_language(_t, pango_language_from_string(lang)); pango_context_set_base_dir(_t, PANGO_DIRECTION_LTR); } ~ContextMgr() { if (_t && isOwner()) g_object_unref(_t); } }; #endif libLASi-1.1.0/src/stringDimensions.h100644 1752 1752 3716 10753200634 17351 0ustar00softwaresoftware/** @file * * Added to LASi on 2004.12.14 by ET. * * StringDimensions is a simple class for maintaining the relevant * dimensions of a text string realized (i.e., drawn) in a given * font face and font size. * * libLASi provides a C++ output stream interface for writing * multi-language Postscript documents. * Copyright (C) 2003, 2004 Larry Siden. * * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ /** * Class StringDimensions maintains the relevant * dimensions of a text string realized (i.e., drawn) in a given * font face and font size. Used internally by LASi. */ class StringDimensions { private: double xadv; double ymin; double ymax; double lineSpacingFactor; public: // Constructor: StringDimensions(double xAdv=0.0, double yMin=0.0,double yMax=0.0,double spacingFactor=1.2){ xadv = xAdv; ymin = yMin; ymax = yMax; lineSpacingFactor = spacingFactor; } // // Set methods: Accrue mins and maxs: // On the Y-axis, just take the true min and max. // // On the X-axis, sum up all the individual x-advances // in order to get the overall bounding box: // /** * Sum up the individual x advances of each glyph: */ void accrueXAdvance(const double xAdv){ xadv += xAdv; } /** * Keep a running tab on the minimum y value (descent) from all glyphs: */ void setYMin(const double yMin){ if( yMin < ymin ) ymin = yMin; } /** * Keep a running tab on the maximum y value (ascent) from all glyphs: */ void setYMax(const double yMax){ if( yMax > ymax ) ymax = yMax; } // Get methods: const double getXAdvance(){ return xadv; } const double getYMin(){ return ymin; } const double getYMax(){ return ymax; } /** * Line spacing is just the maximum ascent minus the maximum descent * multiplied by the line spacing factor: */ const double getLineSpacing(){ return (ymax-ymin)*lineSpacingFactor; } }; libLASi-1.1.0/src/CMakeLists.txt100644 1752 1752 2255 10753200634 16376 0ustar00softwaresoftware# src/CMakeLists.txt for libLASi ### ### Process this file with cmake to produce Makefile ### set(LASi_LIB_SRCS drawGlyph.cpp glyphMgr.cpp psDoc.cpp util.cpp ) set(LASi_LIB_HDRS contextMgr.h drawGlyph.h glyphMgr.h manager.h stringDimensions.h util.h ) include_directories( ${CMAKE_SOURCE_DIR}/include ${CMAKE_BINARY_DIR} ) add_library(LASi ${LASi_LIB_SRCS} ${LASi_LIB_HDRS}) set(libLASi_LINK_LIBRARIES ${PANGO_LINK_FLAGS} ${PANGOFT2_LINK_FLAGS}) if(MATH_LIB) set(libLASi_LINK_LIBRARIES ${libLASi_LINK_LIBRARIES} ${MATH_LIB}) endif(MATH_LIB) target_link_libraries(LASi ${libLASi_LINK_LIBRARIES} ) if(USE_RPATH) set(LIB_INSTALL_RPATH) list(APPEND LIB_INSTALL_RPATH ${libdir}) list(APPEND LIB_INSTALL_RPATH ${PANGO_RPATH}) set_target_properties( LASi PROPERTIES SOVERSION ${LASi_SOVERSION} VERSION ${LASi_VERSION} INSTALL_RPATH "${LIB_INSTALL_RPATH}" INSTALL_NAME_DIR "${libdir}" ) else(USE_RPATH) set_target_properties( LASi PROPERTIES SOVERSION ${LASi_SOVERSION} VERSION ${LASi_VERSION} INSTALL_NAME_DIR "${libdir}" ) endif(USE_RPATH) install( TARGETS LASi ARCHIVE DESTINATION ${libdir} LIBRARY DESTINATION ${libdir} RUNTIME DESTINATION ${bindir} ) libLASi-1.1.0/src/drawGlyph.h100644 1752 1752 1133 10753200634 15742 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing multi-language Postscript documents. * Copyright (C) 2003 Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #ifndef DRAW_GLYPH_H #define DRAW_GLYPH_H #include #include #include /** Generate the Postscript commands to draw the glyph * using the font in pPangoCtx. */ void writeGlyphRoutine(std::ostream& os, PangoContext * const pPangoCtx, FT_Glyph glyph); #endif libLASi-1.1.0/src/util.h100644 1752 1752 2122 10753200634 14755 0ustar00softwaresoftware/** @file * Convert return-code of Freetype library calls to std::runtime_error. * Usage: place every call to Freetype library inside FtEval::eval(). * * libLASi provides a C++ output stream interface for writing multi-language Postscript documents. * Copyright (C) 2003, 2004 by Larry Siden. * * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #ifndef UTIL_H #define UTIL_H #include #include #include #include #include FT_FREETYPE_H #include std::ostream& operator<<(std::ostream&, const FT_Library); std::ostream& operator<<(std::ostream&, const FT_Face); std::ostream& operator<<(std::ostream&, const FT_Glyph); std::ostream& operator<<(std::ostream&, const FT_Outline); /** Converts a freetype return code into an exception. */ inline void evalReturnCode(const int errCode, const char* funcName) throw (std::runtime_error) { if (errCode) throw std::runtime_error(std::string("Error returned from ") + funcName); } #endif libLASi-1.1.0/src/drawGlyph.cpp100644 1752 1752 12237 10753200634 16324 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing multi-language Postscript documents. * Copyright (C) 2003 Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #include #include #include #include #include #include "glyphMgr.h" #include "util.h" #include "memory.h" using namespace std; using namespace LASi; static FT_Vector operator + (const FT_Vector& vec1, const FT_Vector& vec2) { FT_Vector vec; vec.x = vec1.x + vec2.x; vec.y = vec1.y + vec2.y; return vec; } static FT_Vector operator * (const FT_Vector& vec1, const int n) { FT_Vector vec2; vec2.x = n * vec1.x; vec2.y = n * vec1.y; return vec2; } static FT_Vector operator * (const int n, const FT_Vector& vec1) { return operator*(vec1, n); } static FT_Vector operator / (const FT_Vector& vec1, const int n) { FT_Vector vec2; vec2.x = vec1.x / n; vec2.y = vec1.y / n; return vec2; } //static FT_Vector operator / (const int n, const FT_Vector& vec1) { // return operator/(vec1, n); //} static ostream& operator<<(ostream& os, const FT_Vector& ftVec) { os << ftVec.x / 64.0 << " " << ftVec.y / 64.0; return os; } struct StateOfDrawGlyph { private: std::ostream& _os; FT_Vector _startPt; bool _isNewPath; public: StateOfDrawGlyph(std::ostream& os) : _os(os), _isNewPath(true) { _startPt.x = 0; _startPt.y = 0; } std::ostream& os() {return _os;} FT_Vector startPt() {return _startPt;} void setStartPt(const FT_Vector pt) {_startPt = pt;} bool isNewPath() {return _isNewPath;} void setNewPathFalse() {_isNewPath = false;} }; static int xTo(const FT_Vector* pftVec, void* const data, const char* const cmd) { StateOfDrawGlyph* const state = reinterpret_cast(data); FT_Vector to = *pftVec; state->os() << to << " " << cmd << endl; state->setStartPt(to); return 0; } #ifdef HAVE_FT2_2PLUS static int moveTo(const FT_Vector* pftVec, void* data) { #else static int moveTo(FT_Vector* pftVec, void* data) { #endif StateOfDrawGlyph* const state = reinterpret_cast(data); state->os() << (state->isNewPath() ? "newpath" : "closepath") << endl; state->setNewPathFalse(); xTo(pftVec, data, "moveto"); return 0; } #ifdef HAVE_FT2_2PLUS static int lineTo(const FT_Vector* pftVec, void* data) { #else static int lineTo(FT_Vector* pftVec, void* data) { #endif xTo(pftVec, data, "lineto"); return 0; } #ifdef HAVE_FT2_2PLUS static int cubicTo(const FT_Vector* ctrlPt1, const FT_Vector* ctrlPt2, const FT_Vector* pEndPt, void* data) { #else static int cubicTo(FT_Vector* ctrlPt1, FT_Vector* ctrlPt2, FT_Vector* pEndPt, void* data) { #endif StateOfDrawGlyph* const state = reinterpret_cast(data); state->os() << *ctrlPt1 << " " << *ctrlPt2 << " " << *pEndPt << " curveto" << endl; state->setStartPt(*pEndPt); return 0; } #ifdef HAVE_FT2_2PLUS static int conicTo(const FT_Vector* pCtrlPt, const FT_Vector* pEndPt, void* data) { #else static int conicTo(FT_Vector* pCtrlPt, FT_Vector* pEndPt, void* data) { #endif StateOfDrawGlyph* const state = reinterpret_cast(data); FT_Vector ctrlPt1 = (state->startPt() + 2 * *pCtrlPt) / 3; FT_Vector ctrlPt2 = (*pEndPt + 2 * *pCtrlPt) / 3; return cubicTo(&ctrlPt1, &ctrlPt2, pEndPt, data); } static const FT_Outline_Funcs outlineFuncs = {moveTo, lineTo, conicTo, cubicTo}; void PostscriptDocument::write_glyph_routine_to_stream::operator()(PostscriptDocument::GlyphMap::value_type v) { const GlyphId& glyphId = v.first; const FreetypeGlyphMgr& glyphMgr = v.second; const FT_Glyph glyph = static_cast(glyphMgr); const ios::fmtflags oldflags = os.setf(ios::showpos); const int oldPrecision = os.precision(); os.precision(4); os << endl << '/' << glyphId.str() << " {" << endl; os << "/myFontsize exch def" << endl; // bind argument to name // calculate drawing scale factor os << "/scalefactor myFontsize " << PostscriptDocument::DRAWING_SCALE << " div def" << endl; // divide myFontsize by DRAWING_SCALE os << "gsave" << endl; os << "currentpoint translate" << endl; // put x, y coordinates of current point on top of stack os << "scalefactor dup scale" << endl; // set the x and y scales in the PS transformation matrix StateOfDrawGlyph state(os); if (glyph->format == ft_glyph_format_outline) { evalReturnCode( FT_Outline_Decompose( &reinterpret_cast(glyph)->outline, &outlineFuncs, &state), "FT_Outline_Decompose"); // // 2006.05.01.ET BUG FIX: Various "space" characters // don't actually draw anything, so "fill" can produce // undesired artifacts on pre-existing paths ... // if (!state.isNewPath()) { os << "fill" << endl; } } os << "grestore" << endl; // advance position by width of character (in 16.16 format) os << "scalefactor " << glyph->advance.x / (double)0x10000 << " mul 0 rmoveto" << endl; os << "} def" << endl; // restore os flags and precision os.flags(oldflags); os.precision(oldPrecision); } libLASi-1.1.0/src/glyphMgr.cpp100644 1752 1752 3276 10753200634 16137 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing * multi-language Postscript documents. * Copyright (C) 2003, 2004 Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #include #include #include FT_FREETYPE_H #include #include #include "util.h" #include "glyphMgr.h" using namespace std; /** Manage FT_Glyph by insuring that resources are freed when done. */ FreetypeGlyphMgr::FreetypeGlyphMgr() : _glyph((FT_Glyph)0) { _glyph = (FT_Glyph)0; } FreetypeGlyphMgr::FreetypeGlyphMgr(FT_Glyph glyph) : _glyph(_glyph) {} FreetypeGlyphMgr::FreetypeGlyphMgr(const FreetypeGlyphMgr& ftgm) { //evalReturnCode(FT_Glyph_Copy(ftgm._glyph, &_glyph), "FT_Glyph_Copy() in FreetypeGlyphMgr(const FreetypeGlyphMgr& ftgm)"); if (ftgm._glyph) { int return_code = FT_Glyph_Copy(ftgm._glyph, &_glyph); assert(0 == return_code); } else _glyph = 0; } FreetypeGlyphMgr& FreetypeGlyphMgr::operator=(const FreetypeGlyphMgr& ftgm) { if (this != &ftgm) { if (_glyph) { FT_Done_Glyph(_glyph); } //evalReturnCode(FT_Glyph_Copy(ftgm._glyph, &_glyph), "FT_Glyph_Copy() in operator=(const FreetypeGlyphMgr& ftgm)"); if (ftgm._glyph) { int return_code = FT_Glyph_Copy(ftgm._glyph, &_glyph); assert(0 == return_code); } else _glyph = 0; } return *this; } FreetypeGlyphMgr::~FreetypeGlyphMgr() { if (_glyph) { FT_Done_Glyph(_glyph); } } FreetypeGlyphMgr::operator FT_Glyph() const { return _glyph; } void FreetypeGlyphMgr::assign(const FT_Glyph glyph) { _glyph = glyph; } libLASi-1.1.0/src/psDoc.cpp100644 1752 1752 35706 10753200634 15441 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing * Postscript documents containing text strings in any of the world's * scripts supported by Unicode 4.0 and Pango. * Copyright (C) 2003, 2004, 2006 by Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #include #include #include #include #include #include #include #include "contextMgr.h" #include "glyphMgr.h" #include "util.h" #include "memory.h" #include "stringDimensions.h" #include #include using namespace std; using namespace LASi; static string nameof(const FT_Face& face, const FT_UInt glyph_index) { const int N = 128; // Length of buffer to hold glyph name const int randomNameLength = 16; // Length of a random glyph name char glyph_name[N]; if (!FT_HAS_GLYPH_NAMES(face)){ // // 2004.12.03.ET FIX: Since the glyph has no name entry, // arbitrarily generate a string consisting of a random // assortment of ASCII capital letters to use: // for(int i=0;ifamily_name); const std::string& variant(face->style_name); ostringstream os; os << glyphName << '-' << faceName << '-' << variant << '-' << index; _str = os.str(); const int len = _str.size(); //cerr << "PostscriptDocument::GlyphId::GlyphId(...) before _str=" << _str << endl; // replace spaces with '-' for (int i=0 ; i < len ; ++i) { if (isspace(_str[i])) _str.replace(i, 1, 1, '-'); } //cerr << "PostscriptDocument::GlyphId::GlyphId(...) _str=" << _str << endl; } PostscriptDocument::PostscriptDocument() : _pContextMgr(new ContextMgr()), _fontSize(10), _osBody(*this), _osFooter(*this) {} PostscriptDocument::~PostscriptDocument() { delete _pContextMgr; } inline PangoContext* PostscriptDocument::pangoContext() const { return static_cast(*_pContextMgr); } void PostscriptDocument::setFont( const char* const family, const LASi::FontStyle style, const LASi::FontWeight weight, const LASi::FontVariant variant, const LASi::FontStretch stretch) { // // Style: // PangoStyle _style; switch(style){ case NORMAL_STYLE: _style=PANGO_STYLE_NORMAL; break; case ITALIC: _style=PANGO_STYLE_ITALIC; break; case OBLIQUE: _style=PANGO_STYLE_OBLIQUE; break; default: _style=PANGO_STYLE_NORMAL; break; } // // Weight: // PangoWeight _weight; switch(weight){ case NORMAL_WEIGHT: _weight=PANGO_WEIGHT_NORMAL; break; case BOLD: _weight=PANGO_WEIGHT_BOLD; break; case ULTRALIGHT: _weight=PANGO_WEIGHT_ULTRALIGHT; break; case LIGHT: _weight=PANGO_WEIGHT_LIGHT; break; case ULTRABOLD: _weight=PANGO_WEIGHT_ULTRABOLD; break; case HEAVY: _weight=PANGO_WEIGHT_HEAVY; break; default: _weight=PANGO_WEIGHT_NORMAL; break; } // // Variant: // PangoVariant _variant; switch(variant){ case NORMAL_VARIANT: _variant=PANGO_VARIANT_NORMAL; break; case SMALLCAPS: _variant=PANGO_VARIANT_SMALL_CAPS; break; default: _variant=PANGO_VARIANT_NORMAL; break; } // // Stretch: // PangoStretch _stretch; switch(stretch){ case NORMAL_STRETCH: _stretch=PANGO_STRETCH_NORMAL; break; case ULTRACONDENSED: _stretch=PANGO_STRETCH_ULTRA_CONDENSED; break; case EXTRACONDENSED: _stretch=PANGO_STRETCH_EXTRA_CONDENSED; break; case CONDENSED: _stretch=PANGO_STRETCH_CONDENSED; break; case SEMICONDENSED: _stretch=PANGO_STRETCH_SEMI_CONDENSED; break; case SEMIEXPANDED: _stretch=PANGO_STRETCH_SEMI_EXPANDED; break; case EXPANDED: _stretch=PANGO_STRETCH_EXPANDED; break; case EXTRAEXPANDED: _stretch=PANGO_STRETCH_EXTRA_EXPANDED; break; case ULTRAEXPANDED: _stretch=PANGO_STRETCH_ULTRA_EXPANDED; break; default: _stretch=PANGO_STRETCH_NORMAL; break; } PangoFontDescription* font_description = pango_font_description_new(); pango_font_description_set_family (font_description, family); pango_font_description_set_style (font_description, _style); pango_font_description_set_weight (font_description, _weight); pango_font_description_set_variant (font_description, _variant); pango_font_description_set_stretch (font_description, _stretch); pango_font_description_set_size(font_description, DRAWING_SCALE*PANGO_SCALE); pango_context_set_font_description (static_cast(*_pContextMgr), font_description); } void PostscriptDocument::for_each_glyph_do(const string& s, const GLYPH_FUNC func, void* contextData) { PangoAttrList* const attrList = pango_attr_list_new(); // needed only for call to pango_itemize() GList* glItems = pango_itemize( pangoContext(), s.c_str(), 0, s.length(), attrList, (PangoAttrIterator *) 0); pango_attr_list_unref(attrList); for (; glItems ; glItems = g_list_next(glItems)) { PangoItem* const pItem = reinterpret_cast(glItems->data); PangoGlyphString* const pGlyphString = pango_glyph_string_new(); pango_shape(s.c_str() + pItem->offset, pItem->length, &pItem->analysis, pGlyphString); const FT_Face face = pango_ft2_font_get_face(pItem->analysis.font); PangoGlyphInfo* const pGlyphInfo = pGlyphString->glyphs; for (int i=0 ; i < pGlyphString->num_glyphs ; ++i) { const FT_UInt glyph_index = pGlyphInfo[i].glyph; // get glyph index const PostscriptDocument::GlyphId glyphId(face, glyph_index); // construct GlyphId FreetypeGlyphMgr& glyphMgr = _glyphMap[glyphId]; // access glyph from map if (0 == static_cast(glyphMgr)) { // if glyph is not in map // // access glyph from font face and put it in map // FT_Glyph glyph; // // DEBUG: // //std::cerr << "Glyph Index: " << glyph_index << std::endl; FT_Error error = FT_Load_Glyph(face,glyph_index,FT_LOAD_NO_BITMAP); if(error){ // //DEBUG: // //std::cerr << "PANGO is returning a glyph index of " << std::hex << glyph_index << std::endl; //std::cerr << "but PANGO_GLYPH_UNKNOWN_FLAG is supposed to be: " << 0x10000000 << std::endl; //std::cerr << "and PANGO_GLYPH_EMPTY is supposed to be: " << 0x0FFFFFFF << std::endl; // // Substitute something that works: All fonts are supposed // to handle glyph_index 0 as the default replacement glyph: // evalReturnCode(FT_Load_Glyph(face,0,FT_LOAD_NO_BITMAP),"FT_Load_Glyph"); }else{ evalReturnCode(FT_Load_Glyph(face, glyph_index,FT_LOAD_NO_BITMAP), "FT_Load_Glyph"); } evalReturnCode(FT_Get_Glyph(face->glyph, &glyph), "FT_Get_Glyph"); glyphMgr.assign(glyph); } // // glyph is guaranteed to be in map: // Call the function that operates on the glyph: // (this->*func)(*_glyphMap.find(glyphId), contextData); } pango_glyph_string_free(pGlyphString); pango_item_free(pItem); } g_list_free(glItems); } /** Add the next glyphs dimensions to the bounding box (contextData). * If the advance is in the x direction (the usual case), * the box grows in the x direction, yMax becomes the height * of the tallest character, and yMin the descent of the most * descending character. * * @param mapval std::pair * @param contextData std::pair, the x and y dimensions */ void PostscriptDocument::accrue_dimensions( const PostscriptDocument::GlyphMap::value_type& mapval, void* contextData) { // const GlyphId& gid = static_cast(mapval.first); const FreetypeGlyphMgr& glyphMgr = static_cast(mapval.second); const FT_Glyph& glyph = static_cast(glyphMgr); // // // //const double y_adv = std::abs(glyph->advance.y / (double) 0x10000); // const double x_adv = std::abs(glyph->advance.x / (double) 0x10000); // convert from 16.16 format // // // FT_BBox bbox; FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_unscaled, &bbox); // // Get the mins and maxes, converting from 26.6 format: // // const double x_min = bbox.xMin/64.0; // const double x_max = bbox.xMax/64.0; // const double y_min = bbox.yMin/64.0; const double y_max = bbox.yMax/64.0; StringDimensions *SD = reinterpret_cast(contextData); SD->accrueXAdvance(x_adv); SD->setYMin(y_min); SD->setYMax(y_max); } /** Insert a Postscript glyph_routine call into output stream (contextData). */ void PostscriptDocument::invoke_glyph_routine( const PostscriptDocument::GlyphMap::value_type& mapval, void* contextData) { const GlyphId& gid = static_cast(mapval.first); ostream* pos = reinterpret_cast(contextData); static_cast(*pos) << this->getFontSize() << " " << gid.str() << endl; } /** Returns the line spacing, x-advance, y-minimum and y-maximum * based on the current font face and font size. A bounding box * around the text string, s, can be constructed from the xAdvance, * yMinimum, and yMaximum. yMinimum tells you the descent from the * baseline. yMaximum tells you the ascent from the baseline. * The line spacing provides an inter-line spacing for multi-line * text layout. * * This version accepts a const C-style character string. * */ void PostscriptDocument::get_dimensions(const char* s, double *lineSpacing, double *xAdvance, double *yMin, double *yMax) { StringDimensions SD; for_each_glyph_do(s, &PostscriptDocument::accrue_dimensions,&SD); const double scale = _fontSize / DRAWING_SCALE; // // We always want to retrieve at least the lineSpacing: // *lineSpacing = SD.getLineSpacing() * scale; // // But xAdvance, yMin, and yMax are only necessary to retrieve // if we want to have the bounding box, so we allow default // parameters set to NULL: // if(xAdvance!=NULL) *xAdvance = SD.getXAdvance() * scale; if(yMin !=NULL) *yMin = SD.getYMin() * scale; if(yMax !=NULL) *yMax = SD.getYMax() * scale; } /** Returns the line spacing, x-advance, y-minimum and y-maximum * based on the current font face and font size. A bounding box * around the text string, s, can be constructed from the xAdvance, * yMinimum, and yMaximum. yMinimum tells you the descent from the * baseline. yMaximum tells you the ascent from the baseline. * The line spacing provides an inter-line spacing for multi-line * text layout. * * This version accepts an STL standard string class string. * */ void PostscriptDocument::get_dimensions(std::string s, double *lineSpacing, double *xAdvance, double *yMin, double *yMax){ get_dimensions(s.c_str(),lineSpacing,xAdvance,yMin,yMax); } void show::apply(oPostscriptStream& os) const { //cerr << "show::apply(os): _str = " << _str << endl; PostscriptDocument& doc = os.doc(); doc.for_each_glyph_do(_str, &PostscriptDocument::invoke_glyph_routine, &os); } const unsigned int PostscriptDocument::DRAWING_SCALE = PANGO_SCALE; /** * Writes out the document. * */ void PostscriptDocument::write(std::ostream& os, double llx, double lly, double urx, double ury) { // // Output document header: // // // If any of the bounding box parameters are non-zero, // then write out an EPS document with a bounding box: // if(llx || lly || urx || ury){ // // Encapsulated PostScript Header: // os << "%!PS-Adobe-3.0 EPSF-3.0" << endl; os << "%%BoundingBox: " << int(llx) << " " << int(lly) << " " << int(urx) << " " << int(ury) << endl; os << "%%HiResBoundingBox: " << std::setprecision(9) << llx << " " << lly << " " << urx << " " << ury << endl; }else{ // // Normal Postscript header for print media: // os << "%!PS-Adobe-3.0" << endl; } // // Rest of header: // os << "%%Creator: libLASi C++ Stream Interface for Postscript. LASi is hosted on http://www.unifont.org." << endl; os << "%%Copyright: (c) 2003, 2004, 2006 by Larry Siden. All Rights Reserved. Released under the LGPL." << endl; os << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% START Document Header:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; // // If a "%!PS" is found at the beginning of the user's header, // warn them that LASi already provides that: // if( _osHeader.str().find("%!PS")!=string::npos) cerr << "WARNING: LASi automatically provides \"%!PS-Adobe-3.0\" at the start of the document!" << endl; // // Make sure there is a "%%BeginProlog" to complement the "%%EndProlog" that // LASi puts after the end of the glyph routines: // if( _osHeader.str().find("%%BeginProlog")==string::npos) os << "%%BeginProlog" << endl; os << _osHeader.str() << endl; // // Write out the glyph routines: // os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% START LASi Glyph Routines:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%%BeginResource: GlyphRoutines" << endl; for_each(_glyphMap.begin(), _glyphMap.end(), write_glyph_routine_to_stream(os, static_cast(*_pContextMgr))); os << "%%EndResource" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% END LASi Glyph Routines:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%%EndProlog" << endl; os << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% START Document Body:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << _osBody.str() << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% END Document Body:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%" << endl; os << "% START Document Footer:" << endl; os << "%" << endl; os << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" << endl; os << "%%Trailer" << endl; os << _osFooter.str() << endl; os << "%%EOF" << endl; } libLASi-1.1.0/src/glyphMgr.h100644 1752 1752 2012 10753200634 15567 0ustar00softwaresoftware/** @file * Convert return-code of Freetype library calls to std::runtime_error. * Usage: place every call to Freetype library inside FtEval::eval(). * * libLASi provides a C++ output stream interface for writing * multi-language Postscript documents. * Copyright (C) 2003, 2004 Larry Siden. * * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #ifndef GLYPH_MANAGER_H #define GLYPH_MANAGER_H #include #include FT_FREETYPE_H #include /** Manage FT_Glyph by insuring that FT_Glyph is handled correctly. */ class FreetypeGlyphMgr { //: public Manager { private: FT_Glyph _glyph; public: FreetypeGlyphMgr(); FreetypeGlyphMgr(FT_Glyph glyph); FreetypeGlyphMgr(const FreetypeGlyphMgr& ftgm); FreetypeGlyphMgr& operator=(const FreetypeGlyphMgr& ftgm); ~FreetypeGlyphMgr(); operator FT_Glyph() const; void assign(const FT_Glyph glyph); }; #endif libLASi-1.1.0/src/util.cpp100644 1752 1752 5151 10753200634 15315 0ustar00softwaresoftware/** @file * libLASi provides a C++ output stream interface for writing multi-language Postscript documents. * Copyright (C) 2003 Larry Siden. * See README file in project root directory for copyright and contact info. * See COPYING file in project root for terms of re-distribution. */ #include "util.h" #include #include #include #include FT_FREETYPE_H //#include using namespace std; static const std::string glyph_format_to_string(const FT_Glyph_Format format) { if (0 == format) return "none"; string s; s.append(1, (char)((format & 0xff000000) >> 24)); s.append(1, (char)((format & 0x00ff0000) >> 16)); s.append(1, (char)((format & 0x0000ff00) >> 8)); s.append(1, (char)((format & 0x000000ff))); return s; } static const std::string tag_to_string(const int tag) { switch (tag & 0x03) { case FT_Curve_Tag_On: return "on"; case FT_Curve_Tag_Conic: return "conic"; case FT_Curve_Tag_Cubic: return "cubic"; default: ostringstream ostr; ostr << "0x" << hex << (int) tag << dec; return ostr.str(); } } ostream& operator<<(ostream& os, const FT_Library ft_library) { os << "ft_library=" << hex << (unsigned char&)ft_library << dec << endl; FT_Int amajor, aminor, apatch; FT_Library_Version(ft_library, &amajor, &aminor, &apatch); os << "FreeType lib version " << amajor << "." << aminor << "-" << apatch << endl; return os; } ostream& operator<<(ostream& os, const FT_Face ft_face) { os << "ft_face=" << hex << (unsigned char&)ft_face << dec << endl; os << "family name: " << ft_face->family_name << endl; os << "style name: " << ft_face->family_name << endl; return os; } ostream& operator<<(ostream& os, const FT_Glyph ft_glyph) { os << "ft_glyph=" << hex << (unsigned char&)ft_glyph << dec << endl; os << "glyph format is " << glyph_format_to_string(ft_glyph->format) << endl; return os; } ostream& operator<<(ostream& os, const FT_Outline outline) { os << "n_contours=" << outline.n_contours << ", n_points=" << outline.n_points << endl; //const FT_Vector* pEndVector = &outline.points[outline.n_points]; int ipt = 0; // i-th point in outline.points[] for (int iContour=0 ; iContour < outline.n_contours ; ++iContour) { os << "countour[" << iContour << "]=" << outline.contours[iContour] << endl; for (; ipt <= outline.contours[iContour] ; ++ipt) { const FT_Vector ftvec = outline.points[ipt]; const char tag = outline.tags[ipt]; os << ftvec.x / 64.0 << " " << ftvec.y / 64.0 << " " << tag_to_string(tag) << endl; } } return os; } libLASi-1.1.0/Doxyfile.developer100644 1752 1752 141733 10753200634 16606 0ustar00softwaresoftware# Doxyfile 1.4.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = LASi # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = doc/developer # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, # Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, # Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, # Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, # Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # This tag can be used to specify the encoding used in the generated output. # The encoding is not always determined by the language that is chosen, # but also whether or not the output is meant for Windows or non-Windows users. # In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES # forces the Windows encoding (this is the default for the Windows binary), # whereas setting the tag to NO uses a Unix-style encoding (the default for # all platforms other than Windows). USE_WINDOWS_ENCODING = NO # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like the Qt-style comments (thus requiring an # explicit @brief command for a brief description. JAVADOC_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the DETAILS_AT_TOP tag is set to YES then Doxygen # will output the detailed description near the top, like JavaDoc. # If set to NO, the detailed description appears after the member # documentation. DETAILS_AT_TOP = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 2 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources # only. Doxygen will then generate output that is more tailored for Java. # For instance, namespaces will be presented as packages, qualified scopes # will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = yes # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = yes # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = yes # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. SHOW_DIRECTORIES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from the # version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the progam writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ./src \ ./include # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = NO # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. EXCLUDE_PATTERNS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES (the default) # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES (the default) # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compressed HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # If the GENERATE_TREEVIEW tag is set to YES, a side panel will be # generated containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_PREDEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will # generate a call dependency graph for every global function or class method. # Note that enabling this option will significantly increase the time of a run. # So in most cases it will be better to enable call graphs for selected # functions only using the \callgraph command. CALL_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_WIDTH = 1024 # The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height # (in pixels) of the graphs generated by dot. If a graph becomes larger than # this value, doxygen will try to truncate the graph, so that it fits within # the specified constraint. Beware that most browsers cannot cope with very # large images. MAX_DOT_GRAPH_HEIGHT = 1024 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that a graph may be further truncated if the graph's # image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH # and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), # the graph is not depth-constrained. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, which results in a white background. # Warning: Depending on the platform used, enabling this option may lead to # badly anti-aliased labels on the edges of a graph (i.e. they become hard to # read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO libLASi-1.1.0/AUTHORS100644 1752 1752 1441 10753200634 14113 0ustar00softwaresoftwareLarry Siden, lsiden@gmail.com, http://www.umich.edu/~lsiden is the original author. Edward H. Trager and Ritu Khanna have contributed a number of bug fixes, made a number of modifications, and enhanced the examples and documentation. Alan W. Irwin cleaned up a number of problems in the autotools-based build system of earlier versions and later replaced that build system with a CMake-based one. Andrew Ross has done essential bug fixing to make libLASi more robust against font problems and helped with the "missing glyphs" example. Werner Smekal has helped with Windows-related (Cygwin, MinGW, MinGW/MSYS, and commercial Windows compilers) testing and fixes. libLASi-1.1.0/README.Release_Manager_Cookbook100644 1752 1752 12635 10753200634 20611 0ustar00softwaresoftwareThis is a cookbook showing the steps required to create a libLASi release at SourceForge. * set environment variables (used extensively below) for versions export LASI_VERSION=1.1.0 export TAG_VERSION=v1_1_0 * Prepare a preliminary version of the ChangeLog file to see what has been accomplished since the last release. svn log --verbose > ChangeLog.preliminary * Update and commit the README.release file with a short overview of the specific changes noted in the ChangeLog since the last release. * Update and commit cmake/module/lasi_version.cmake to reflect the current version. Also, follow the instructions in this file for updating the SOVERSION, the minor number and the patch number. * Make a preliminary version of the source release tarball. (If starting from scratch do the usual build up to and including the "make" command to build the documentation in the source tree.) Then make the source distribution tarball (in the top of the build tree) with make package_source >& make_package_source.out * Check the generated tarball by checking its table of contents, unpacking it, and building and testing (ctest and install tree test of examples) libLASi from it. * Make sure your local version of libLASi is synched with the SourceForge one. svn update svn status * Create final version of complete ChangeLog and commit it. svn log --verbose > ChangeLog svn commit ChangeLog svn update * Create a server-side tag corresponding to the release version to provide a historical record (snapshot) of the trunk at the time of the release. svn copy \ https://lasi.svn.sourceforge.net/svnroot/lasi/trunk \ https://lasi.svn.sourceforge.net/svnroot/lasi/tags/$TAG_VERSION In the event that problems are found in libLASi during the release process, corrections should be made to trunk/ and then merged into the tags/vX_Y_Z branch as follows: cd tags/vX_Y_Z svn merge -r A:B /path/to/trunk Where A and B specify the range of revisions in trunk to be applied to tags/vX_Y_Z in the merge process. These can be determined by commit messages. N.B. the above directions have been copied from PLplot, but I have not had an opportunity to try such a merge yet so check the svn manual if you actually do need to do this. * Check out the tagged version into a new directory svn checkout \ https://lasi.svn.sourceforge.net/svnroot/lasi/tags/$TAG_VERSION lasi_tagged * Test that tagged version by building and ctest and installed examples test. * Create the release tarball from the tagged version following above tarball creation and testing steps. * Create an md5sum for the tarball so that users can check their downloads for problems. md5sum lasi-$LASI_VERSION.tar.gz > lasi-$LASI_VERSION.tar.gz.md5 Edit a local /tmp/ChangeLog.release (not under svn control) to be the appropriate date range from ChangeLog (i.e. only the changes that were made since the last release should be included). Also copy README.release to /tmp as a matter of convenience. These /tmp files will be uploaded to SourceForge later. Upload the libLASi-$LASI_VERSION.tar.gz.* files to the SF upload section ftp upload.sourceforge.net #username is ftp, password is your e-mail address cd incoming bin put libLASi-X.Y.Z.tar.gz put libLASi-X.Y.Z.tar.gz.md5 quit N.B. X.Y.Z used rather that $LASI_VERSION because ftp command mode does not understand enviroment variables. * Prepare a file release at SourceForge using their GUI Tool: Login to sf.net. Go to the libLASi project page. Select file releases in the drop down admin menu at the top of the page. Click add release at the bottom of the page. Enter the new release name and click "create this release". N.B. Release names guide our users to the release they want when they browse our file release area. The source release names should be of the form "X.Y.Z Source" (e.g., "1.1.0 Source"). The reason for this suggestion is to keep source release names distinct from binary release names. In the file release GUI (Step1): Browse to /tmp/README.release in "Upload Release Notes". Browse to /tmp/ChangeLog.release in "Upload Change Log". Select "preserve my pre-formatted text" Click "Submit/Refresh" In the file release GUI (Step2): Select (and only select) the uploaded libLASi files. Click "Add Files and/or Refresh View" In the edit file in release GUI (Step3): For libLASi-X.Y.Z.tar.gz select "any" for the processor type and "source.gz" for the file type. For libLASi-X.Y.Z.tar.gz.md5 select "any" for the processor type and "other source" for the file type. In the e-mail notification GUI (Step4): Select that you are sure that you want to send an e-mail to those who are monitoring the libLASi releases (once some SourceForge users sign up for this). Prepare the release notes (taken mostly from README.release): Return the libLASi project page Select Admin -> News Click on submit to create a new news item. Load an old release news item in another browser window and use that as a template for creating your new release news item. Make sure that you get the link to the release notes correct (none of the other links need to be changed). Click on submit. Download libLASi-X.Y.Z.tar.gz* from SourceForge and make sure those files are identical with the uploaded versions. Publicize release on lasi-devel mailing list. Publicize release at www.unifont.org/lasi. (Optional) publicize wherever software announcements are still accepted for free software (lwn.net, lxer.com, freshmeat.net, etc.). DONE!!! libLASi-1.1.0/doc/user/html/classLASi_1_1setFont-members.html100644 1752 1752 4543 10753200634 23677 0ustar00softwaresoftware LASi: Member List

LASi::setFont Member List

This is the complete list of members for LASi::setFont, including all inherited members.

apply(oPostscriptStream &os) const LASi::setFont [inline, protected]
operator<<(oPostscriptStream &os, const setFont &x)LASi::setFont [friend]
setFont(const char *const family="sans", const LASi::FontStyle style=LASi::NORMAL_STYLE, const LASi::FontWeight weight=LASi::NORMAL_WEIGHT, const LASi::FontVariant variant=LASi::NORMAL_VARIANT, const LASi::FontStretch stretch=LASi::NORMAL_STRETCH)LASi::setFont [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1PostscriptDocument_1_1GlyphId-members.html100644 1752 1752 5657 10753200634 30056 0ustar00softwaresoftware LASi: Member List

LASi::PostscriptDocument::GlyphId Member List

This is the complete list of members for LASi::PostscriptDocument::GlyphId, including all inherited members.

GlyphId()LASi::PostscriptDocument::GlyphId [inline]
GlyphId(FT_Face, const FT_UInt)LASi::PostscriptDocument::GlyphId
operator<(const GlyphId id1, const GlyphId id2)LASi::PostscriptDocument::GlyphId [friend]
operator==(const GlyphId id1, const GlyphId id2)LASi::PostscriptDocument::GlyphId [friend]
str() const LASi::PostscriptDocument::GlyphId [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/tab_l.gif100644 1752 1752 1302 10753200634 17276 0ustar00softwaresoftwareGIF89a ,薴ŝɯͻ, ,@P`H$!%CqVe2XJ(Ġ+3 2$ kv-u*"}|}|~q(" $f 'l(&&$r & !){rƲεҽͼиP?Bm A%V܈!k/Đ;^$Ɩ#Mf)f͇(WLK҄ I)L:eD Cx*4 Uh %A^NKbeXkx!2t !5t]$%X.i[]YfEkg`:zҞ;}jaaM׸c瞽vۺ8ȋ'?9積G_>yu_ߞ]zw߭Ǿm浏G~თ/>٫|W}v;libLASi-1.1.0/doc/user/html/classLASi_1_1PostscriptDocument-members.html100644 1752 1752 16367 10753200634 26155 0ustar00softwaresoftware LASi: Member List

LASi::PostscriptDocument Member List

This is the complete list of members for LASi::PostscriptDocument, including all inherited members.

accrue_dimensions(const GlyphMap::value_type &, void *contextData1)LASi::PostscriptDocument [protected]
for_each_glyph_do(const std::string &, const GLYPH_FUNC, void *contextData)LASi::PostscriptDocument [protected]
get_dimensions(const char *s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)LASi::PostscriptDocument
get_dimensions(std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)LASi::PostscriptDocument
getFontSize()LASi::PostscriptDocument [inline, protected]
GLYPH_FUNC typedefLASi::PostscriptDocument [protected]
GlyphMap typedefLASi::PostscriptDocument [protected]
glyphProcName() const LASi::PostscriptDocument [protected]
invoke_glyph_routine(const GlyphMap::value_type &, void *contextData)LASi::PostscriptDocument [protected]
osBody()LASi::PostscriptDocument [inline]
osFooter()LASi::PostscriptDocument [inline]
osHeader()LASi::PostscriptDocument [inline]
pangoContext() const LASi::PostscriptDocument [protected]
PostscriptDocument()LASi::PostscriptDocument
setFont(const char *const family="sans", LASi::FontStyle=LASi::NORMAL_STYLE, LASi::FontWeight=LASi::NORMAL_WEIGHT, LASi::FontVariant=LASi::NORMAL_VARIANT, LASi::FontStretch=LASi::NORMAL_STRETCH)LASi::PostscriptDocument
setFontSize(const double size)LASi::PostscriptDocument [inline]
show classLASi::PostscriptDocument [friend]
write(std::ostream &os, double llx=0, double lly=0, double urx=0, double ury=0)LASi::PostscriptDocument
write_glyph_routine_to_stream classLASi::PostscriptDocument [friend]
~PostscriptDocument()LASi::PostscriptDocument


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1oPostscriptStream.html100644 1752 1752 17045 10753200634 24353 0ustar00softwaresoftware LASi: LASi::oPostscriptStream Class Reference

LASi::oPostscriptStream Class Reference

Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...

#include <LASi.h>

List of all members.

Public Member Functions

 oPostscriptStream (PostscriptDocument &psDoc)

Protected Member Functions

PostscriptDocumentdoc ()

Friends

class PostscriptDocument
class show
class setFont
class setFontSize


Detailed Description

Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument.

Constructor & Destructor Documentation

LASi::oPostscriptStream::oPostscriptStream ( PostscriptDocument psDoc  )  [inline]


Member Function Documentation

PostscriptDocument& LASi::oPostscriptStream::doc (  )  [inline, protected]


Friends And Related Function Documentation

friend class PostscriptDocument [friend]

friend class show [friend]

friend class setFont [friend]

friend class setFontSize [friend]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespacemembers.html100644 1752 1752 11271 10753200634 21751 0ustar00softwaresoftware LASi: Class Members Here is a list of all namespace members with links to the namespace documentation for each member:


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/tab_b.gif100644 1752 1752 43 10753200634 17225 0ustar00softwaresoftwareGIF89a,D;libLASi-1.1.0/doc/user/html/classLASi_1_1setFontSize.html100644 1752 1752 15414 10753200634 23121 0ustar00softwaresoftware LASi: LASi::setFontSize Class Reference

LASi::setFontSize Class Reference

stream manipulator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 setFontSize (double size)
 Usage: os << setFontSize(12) << .

Protected Member Functions

void apply (oPostscriptStream &os) const

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const setFontSize &x)
 Stream inserter for 'setFontSize' stream manipulator.


Detailed Description

stream manipulator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::setFontSize::setFontSize ( double  size  )  [inline]

Usage: os << setFontSize(12) << .

..

Parameters:
size size in points


Member Function Documentation

void LASi::setFontSize::apply ( oPostscriptStream os  )  const [inline, protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const setFontSize x 
) [friend]

Stream inserter for 'setFontSize' stream manipulator.


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/doxygen.css100644 1752 1752 17641 10753200634 17752 0ustar00softwaresoftwareBODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; } BODY,TD { font-size: 90%; } H1 { text-align: center; font-size: 160%; } H2 { font-size: 120%; } H3 { font-size: 100%; } CAPTION { font-weight: bold } DIV.qindex { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.nav { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navtab { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } TD.navtab { font-size: 70%; } A.qindex { text-decoration: none; font-weight: bold; color: #1A419D; } A.qindex:visited { text-decoration: none; font-weight: bold; color: #1A419D } A.qindex:hover { text-decoration: none; background-color: #ddddff; } A.qindexHL { text-decoration: none; font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff; } A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } A.el { text-decoration: none; font-weight: bold } A.elRef { font-weight: bold } A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} A.codeRef:link { font-weight: normal; color: #0000FF} A.codeRef:visited { font-weight: normal; color: #0000FF} A:hover { text-decoration: none; background-color: #f2f2ff } DL.el { margin-left: -1cm } .fragment { font-family: monospace, fixed; font-size: 95%; } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } BODY { background: white; color: black; margin-right: 20px; margin-left: 20px; } TD.indexkey { background-color: #e8eef2; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #e8eef2; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } .mdescLeft { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplParams { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; color: #606060; background-color: #FAFAFA; font-size: 80%; } .search { color: #003399; font-weight: bold; } FORM.search { margin-bottom: 0px; margin-top: 0px; } INPUT.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } TD.tiny { font-size: 75%; } a { color: #1A41A8; } a:visited { color: #2A3798; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } TH.dirtab { background: #e8eef2; font-weight: bold; } HR { height: 1px; border: none; border-top: 1px solid black; } /* Style for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 4px; background-color: #eef3f5; border-width: 1px; border-style: solid; border-color: #dedeee; -moz-border-radius: 8px 8px 8px 8px; } .memname { white-space: nowrap; font-weight: bold; } .memdoc{ padding-left: 10px; } .memproto { background-color: #d5e1e8; width: 100%; border-width: 1px; border-style: solid; border-color: #84b0c7; font-weight: bold; -moz-border-radius: 8px 8px 8px 8px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; font-style: italic; white-space: nowrap; } /* End Styling for detailed member documentation */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin:0.5em; } .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream-members.html100644 1752 1752 4421 10753200634 35376 0ustar00softwaresoftwarelibLASi-1.1.0/doc/user/html LASi: Member List

LASi::PostscriptDocument::write_glyph_routine_to_stream Member List

This is the complete list of members for LASi::PostscriptDocument::write_glyph_routine_to_stream, including all inherited members.

operator()(PostscriptDocument::GlyphMap::value_type v)LASi::PostscriptDocument::write_glyph_routine_to_stream
write_glyph_routine_to_stream(std::ostream &os, PangoContext *pangoCtx)LASi::PostscriptDocument::write_glyph_routine_to_stream [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/tabs.css100644 1752 1752 3336 10753200634 17202 0ustar00softwaresoftware/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : x-small; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs INPUT { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : x-small; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.nav { background : none; border : none; border-bottom : 1px solid #84B0C7; } libLASi-1.1.0/doc/user/html/classLASi_1_1oPostscriptStream-members.html100644 1752 1752 5744 10753200634 25766 0ustar00softwaresoftware LASi: Member List

LASi::oPostscriptStream Member List

This is the complete list of members for LASi::oPostscriptStream, including all inherited members.

doc()LASi::oPostscriptStream [inline, protected]
oPostscriptStream(PostscriptDocument &psDoc)LASi::oPostscriptStream [inline]
PostscriptDocument classLASi::oPostscriptStream [friend]
setFont classLASi::oPostscriptStream [friend]
setFontSize classLASi::oPostscriptStream [friend]
show classLASi::oPostscriptStream [friend]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/dir_ced8ec04faf1f39c38b8acccde1582aa.html100644 1752 1752 3124 10753200634 24352 0ustar00softwaresoftware LASi: include/ Directory Reference

include Directory Reference


Files

file  LASi.h [code]
 Defines oPostscriptStream and PostscriptDocument and various stream manipulators.

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespacemembers_eval.html100644 1752 1752 10145 10753200634 22757 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/LASi_8h.html100644 1752 1752 30331 10753200634 17627 0ustar00softwaresoftware LASi: LASi.h File Reference

LASi.h File Reference

Defines oPostscriptStream and PostscriptDocument and various stream manipulators. More...

#include <string>
#include <ostream>
#include <sstream>
#include <map>
#include <pango/pango.h>
#include <freetype/ftglyph.h>

Go to the source code of this file.

Namespaces

namespace  LASi

Classes

class  LASi::oPostscriptStream
 Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...
class  LASi::PostscriptDocument
 Composes Postscript document as three separate and independant streams for header, body and footer. More...
class  LASi::PostscriptDocument::GlyphId
 For internal use only. More...
class  LASi::PostscriptDocument::write_glyph_routine_to_stream
 For internal use only. More...
class  LASi::setFont
 stream manipulator applied to oPostscriptStream. More...
class  LASi::setFontSize
 stream manipulator applied to oPostscriptStream. More...
class  LASi::show
 stream applicator applied to oPostscriptStream. More...

Defines

#define LASIDLLEXPORT
#define LASIDLLIMPORT
#define LASIDLLIMPEXP
#define LASIDLLIMPEXP_DATA(type)   type

Enumerations

enum  LASi::FontStyle { LASi::NORMAL_STYLE, LASi::OBLIQUE, LASi::ITALIC }
enum  LASi::FontWeight {
  LASi::ULTRALIGHT, LASi::LIGHT, LASi::NORMAL_WEIGHT, LASi::BOLD,
  LASi::ULTRABOLD, LASi::HEAVY
}
enum  LASi::FontVariant { LASi::NORMAL_VARIANT, LASi::SMALLCAPS }
enum  LASi::FontStretch {
  LASi::ULTRACONDENSED, LASi::EXTRACONDENSED, LASi::CONDENSED, LASi::SEMICONDENSED,
  LASi::NORMAL_STRETCH, LASi::SEMIEXPANDED, LASi::EXPANDED, LASi::EXTRAEXPANDED,
  LASi::ULTRAEXPANDED
}

Functions

template<class T>
oPostscriptStream & LASi::operator<< (oPostscriptStream &os, T t)


Detailed Description

Defines oPostscriptStream and PostscriptDocument and various stream manipulators.


Define Documentation

#define LASIDLLEXPORT

#define LASIDLLIMPEXP

#define LASIDLLIMPEXP_DATA ( type   )     type

#define LASIDLLIMPORT


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1show.html100644 1752 1752 16725 10753200634 21632 0ustar00softwaresoftware LASi: LASi::show Class Reference

LASi::show Class Reference

stream applicator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 show (const char *c_str)
 Usage: os << show("some UTF-8 text") << .
 show (std::string stl_str)

Protected Member Functions

void apply (oPostscriptStream &os) const

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const show &x)
 stream inserter for 'show' stream applicator


Detailed Description

stream applicator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::show::show ( const char *  c_str  )  [inline]

Usage: os << show("some UTF-8 text") << .

..

LASi::show::show ( std::string  stl_str  )  [inline]


Member Function Documentation

void LASi::show::apply ( oPostscriptStream os  )  const [protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const show x 
) [friend]

stream inserter for 'show' stream applicator


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/LASi_8h-source.html100644 1752 1752 121710 10753200634 21147 0ustar00softwaresoftware LASi: LASi.h Source File

LASi.h

Go to the documentation of this file.
00001 #ifndef LASI_H
00002 #define LASI_H
00003 
00009 #include <string>
00010 #include <ostream>
00011 #include <sstream>
00012 #include <map>
00013 #include <pango/pango.h>
00014 #include <freetype/ftglyph.h>
00015 
00016 class FreetypeGlyphMgr;
00017 class ContextMgr;
00018 
00019 // These macros are needed for Visual C++ and other Windows compilers.
00020 // All functions/classes marked with LASIDLLIMPEXP can be imported form/exported to the dll.
00021 // Has no impact on other platforms
00022 #if defined(WIN32)
00023   /* Visual C/C++, Borland, MinGW and Watcom */
00024   #if defined(__VISUALC__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) || defined(__CYGWIN__)
00025     #define LASIDLLEXPORT __declspec(dllexport)
00026     #define LASIDLLIMPORT __declspec(dllimport)
00027   #else
00028     #define LASIDLLEXPORT
00029     #define LASIDLLIMPORT
00030   #endif
00031 #else
00032   #define LASIDLLEXPORT
00033   #define LASIDLLIMPORT
00034 #endif
00035 
00036 #if defined(LASi_EXPORTS)
00037   #define LASIDLLIMPEXP LASIDLLEXPORT
00038   #define LASIDLLIMPEXP_DATA(type) LASIDLLEXPORT type
00039 #elif defined(LASi_DLL)
00040   #define LASIDLLIMPEXP LASIDLLIMPORT
00041   #define LASIDLLIMPEXP_DATA(type) LASIDLLIMPORT type
00042 #else
00043   #define LASIDLLIMPEXP
00044   #define LASIDLLIMPEXP_DATA(type) type
00045 #endif
00046 
00047 namespace LASi {
00048 
00049   enum FontStyle{
00050     NORMAL_STYLE,
00051     OBLIQUE,
00052     ITALIC
00053   };
00054 
00055   enum FontWeight{
00056     ULTRALIGHT,
00057     LIGHT,
00058     NORMAL_WEIGHT,
00059     BOLD,
00060     ULTRABOLD,
00061     HEAVY
00062   };
00063 
00064   enum FontVariant{
00065     NORMAL_VARIANT,
00066     SMALLCAPS
00067   };
00068 
00069   enum FontStretch{
00070     ULTRACONDENSED,
00071     EXTRACONDENSED,
00072     CONDENSED,
00073     SEMICONDENSED,
00074     NORMAL_STRETCH,
00075     SEMIEXPANDED,
00076     EXPANDED,
00077     EXTRAEXPANDED,
00078     ULTRAEXPANDED
00079   };
00080   
00081   class PostscriptDocument;
00082   class write_glyph_routine_to_stream;
00083 
00087   class LASIDLLIMPEXP oPostscriptStream : public std::ostringstream {
00088     public:
00089       friend class PostscriptDocument;
00090       friend class show;
00091       friend class setFont;
00092       friend class setFontSize;
00093 
00094       oPostscriptStream(PostscriptDocument& psDoc) : _psDoc(psDoc) {}
00095 
00096     protected:
00097       PostscriptDocument& doc() {return _psDoc;}
00098 
00099     private:
00100       PostscriptDocument& _psDoc;
00101   };
00102 
00103   template<class T>
00104     inline oPostscriptStream& operator<<(oPostscriptStream& os, T t) {
00105       static_cast<std::ostream&>(os) << t;
00106       return os;
00107     }
00108 
00114   class LASIDLLIMPEXP PostscriptDocument {
00115     public:
00116       friend class write_glyph_routine_to_stream; // helper class
00117       friend class show;
00118 
00119       PostscriptDocument();
00120       ~PostscriptDocument();
00121 
00125       void setFont(
00126           const char* const family = "sans",
00127           LASi::FontStyle   = LASi::NORMAL_STYLE,
00128           LASi::FontWeight  = LASi::NORMAL_WEIGHT,
00129           LASi::FontVariant = LASi::NORMAL_VARIANT,
00130           LASi::FontStretch = LASi::NORMAL_STRETCH
00131       );
00132 
00136       void setFontSize(const double size) {_fontSize = size;}
00137 
00140       std::ostringstream& osHeader() {return _osHeader;}
00141 
00144       oPostscriptStream& osBody() {return _osBody;}
00145 
00148       oPostscriptStream& osFooter() {return _osFooter;}
00149 
00159       void write(std::ostream& os, double llx=0, double lly=0, double urx=0, double ury=0);
00160 
00167       void get_dimensions(const char* s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL);
00168       void get_dimensions(std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL);
00169 
00170     protected:
00175       class GlyphId {
00176         public:
00177           friend bool operator==(const GlyphId id1, const GlyphId id2) {
00178             return id1._str == id2._str;
00179           }
00180 
00181           friend bool operator<(const GlyphId id1, const GlyphId id2) {
00182             return id1._str < id2._str;
00183           }
00184 
00185           GlyphId() {}
00186           GlyphId(FT_Face, const FT_UInt);
00187 
00189           std::string str() const {return _str;}
00190 
00191         private:
00193           std::string _str;
00194       };
00195 
00198       typedef std::map<GlyphId, FreetypeGlyphMgr> GlyphMap;
00199 
00204       typedef void (PostscriptDocument::*GLYPH_FUNC)(
00205           const GlyphMap::value_type&, void* contextData);
00206 
00207       void invoke_glyph_routine(const GlyphMap::value_type&, void* contextData);
00208 
00209       void accrue_dimensions( const GlyphMap::value_type&, void* contextData1);
00210 
00213       void for_each_glyph_do(const std::string&, const GLYPH_FUNC, void* contextData);
00214 
00215       PangoContext* pangoContext() const;
00216 
00219       std::string glyphProcName() const;
00220 
00223       double getFontSize() {return _fontSize;}
00224 
00227       class write_glyph_routine_to_stream {
00228         private:
00229           std::ostream& os;
00230           PangoContext* pangoCtx;
00231 
00232         public:
00233           write_glyph_routine_to_stream(std::ostream& os, PangoContext* pangoCtx) 
00234             : os(os), pangoCtx(pangoCtx) {}
00235           void operator()(PostscriptDocument::GlyphMap::value_type v);
00236       };
00237 
00238     private:
00239       GlyphMap _glyphMap;
00240 
00241       static const unsigned int DRAWING_SCALE;
00242 
00243       // Use pointers instead of objects in order to minimize namespace pollution of .h file user
00244       // Requires fwd declarations above.
00245       ContextMgr* _pContextMgr;     // manage PangoContext*
00246       double _fontSize;             // font size to be used when rendering next show()
00247       std::ostringstream _osHeader; // Postscript header
00248       oPostscriptStream _osBody;    // Postscript body
00249       oPostscriptStream _osFooter;  // Postscript footer
00250   };
00251 
00254   class LASIDLLIMPEXP setFont {
00255     public:
00258       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFont& x) {
00259         x.apply(os);
00260         return os;
00261       }
00262 
00266       setFont(
00267           const char* const family = "sans",
00268           const LASi::FontStyle   style   = LASi::NORMAL_STYLE,
00269           const LASi::FontWeight  weight  = LASi::NORMAL_WEIGHT,
00270           const LASi::FontVariant variant = LASi::NORMAL_VARIANT,
00271           const LASi::FontStretch stretch = LASi::NORMAL_STRETCH )
00272           : _family(family), _style(style), _weight(weight), _variant(variant), _stretch(stretch)
00273       {}
00274       
00275     protected:
00276       void apply(oPostscriptStream& os) const {
00277         os.doc().setFont(_family, _style,_weight, _variant,  _stretch);
00278       }
00279 
00280     private:
00281       const char* const  _family;
00282       const LASi::FontStyle   _style;
00283       const LASi::FontWeight  _weight;
00284       const LASi::FontVariant _variant;
00285       const LASi::FontStretch _stretch;
00286       
00287   };
00288 
00291   class LASIDLLIMPEXP setFontSize {
00292     public:
00295       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFontSize& x) {
00296         x.apply(os);
00297         return os;
00298       }
00299 
00304       setFontSize(double size) : _size(size) {}
00305 
00306     protected:
00307       void apply(oPostscriptStream& os) const {
00308         os.doc().setFontSize(_size);
00309       }
00310 
00311     private:
00312       double _size;
00313   };
00314 
00317   class LASIDLLIMPEXP show{
00318     public:
00321       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const show& x) {
00322         x.apply(os);
00323         return os;
00324       }
00325 
00329       show(const char* c_str   ) : _str(c_str  ) {}
00330       show(std::string stl_str ) : _str(stl_str) {}
00331 
00332     protected:
00333       void apply(oPostscriptStream& os) const;
00334 
00335     private:
00336       std::string _str;
00337   };
00338 }
00339 #endif
00340 

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/functions_type.html100644 1752 1752 3441 10753200634 21473 0ustar00softwaresoftware LASi: Class Members - Typedefs  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/globals.html100644 1752 1752 3461 10753200634 20047 0ustar00softwaresoftware LASi: Class Members Here is a list of all file members with links to the files they belong to:


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/globals_defs.html100644 1752 1752 3355 10753200634 21052 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/files.html100644 1752 1752 2727 10753200634 17532 0ustar00softwaresoftware LASi: File Index

LASi File List

Here is a list of all files with brief descriptions:
LASi.h [code]Defines oPostscriptStream and PostscriptDocument and various stream manipulators

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html100644 1752 1752 11417 10753200634 33771 0ustar00softwaresoftwarelibLASi-1.1.0/doc/user/html LASi: LASi::PostscriptDocument::write_glyph_routine_to_stream Class Reference

LASi::PostscriptDocument::write_glyph_routine_to_stream Class Reference

For internal use only. More...

#include <LASi.h>

List of all members.

Public Member Functions

 write_glyph_routine_to_stream (std::ostream &os, PangoContext *pangoCtx)
void operator() (PostscriptDocument::GlyphMap::value_type v)


Detailed Description

For internal use only.

Constructor & Destructor Documentation

LASi::PostscriptDocument::write_glyph_routine_to_stream::write_glyph_routine_to_stream ( std::ostream &  os,
PangoContext *  pangoCtx 
) [inline]


Member Function Documentation

void LASi::PostscriptDocument::write_glyph_routine_to_stream::operator() ( PostscriptDocument::GlyphMap::value_type  v  ) 


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1show-members.html100644 1752 1752 4473 10753200634 23237 0ustar00softwaresoftware LASi: Member List

LASi::show Member List

This is the complete list of members for LASi::show, including all inherited members.

apply(oPostscriptStream &os) const LASi::show [protected]
operator<<(oPostscriptStream &os, const show &x)LASi::show [friend]
show(const char *c_str)LASi::show [inline]
show(std::string stl_str)LASi::show [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/tab_r.gif100644 1752 1752 5031 10753200634 17307 0ustar00softwaresoftwareGIF89a,薴ŝɯͻ,,@pH,Ȥrl:ШtJZجv h d@L"F:򑐌$9 (8&Nz (GFB^!˨)WVl)1 w̥.wY0Ib|Hpf:e pJ}Ȧ6nz 80%"8v~ @JЂMBІ:D'ZPKF ּ&16юz HGJRb L5Җ0LgJӚ#(e>Ӟ@ PJԢHMRԦ:PTJժ&5;%Uծz` XJVCjYֶp\Uxͫ^׾i)$Mb:v, ಘͬf7z hGKҚMjWֺ*$SPͭnwm +Mr:E?9Zͮv9" xKbLz^A|ͯ0/LN(; n0'LaJ0{/{ؘG|(SCr. v1wc6@LdHNd/PLeOXp|+s2L_153M5t3_:wsgʹπp?/FFЎt!-JҖ1NӞuA-Pԝ>53UWծ4cYZѶsA׀5,aƶ3=e3~-3Sc6mo2Mq>7ӭn$D~7,y1m}v\/N3#S\gu-mO0C\'_S^|.c.0ל49~s=3d:u)?F;ˮW|;W)vt˽w|=xA;libLASi-1.1.0/doc/user/html/doxygen.png100644 1752 1752 2401 10753200634 17712 0ustar00softwaresoftwarePNG  IHDRd-ok>gAMAOX2tEXtSoftwareAdobe ImageReadyqe<]PLTEǾ"&ﶻޠ{ԍ눙נED9hg]_X<@:#mhU1tRNSvIDATxbC: d#h` @X",***LK.], X@t b @BD6%""  % B:Hf@ RPy"K`\PbC(!II!h(!Cąl!0[X\J\$TM(>a$S @ Ш@R.$LJBRAG1 (FPhhT%!`&q%u P    CT$B|Wl!B`R$( @A%%@,(%$RPmB U`1IYB  99\1 yCCCf"[N'=TGȒl8^K5<SRɤ%@@  b1qAXH&BR y nP4A j>  t!+(.WQA2MU܂ `1%`19F< 3cZ`e!\ D+. 83!lYYA -6EJV @XXX 4 @86`RdB4I " "@xrʌHA`f ȰC"XV0C b@2H ȓ p)!( 04)(%R $Tʀbb,s@7 Ѱ?f֗\PIx!I"Ȉ3 QYt^^gv- }>WJOAV`$&#88\FF SFJ$ƀƊ 4 - Hf ?5 k1d, ."FˀI"4Hgx|fm)))9. aMD& X@t b @%DK.], X@t b @d`ɽSOIENDB`libLASi-1.1.0/doc/user/html/functions_func.html100644 1752 1752 12305 10753200634 21464 0ustar00softwaresoftware LASi: Class Members - Functions  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1PostscriptDocument.html100644 1752 1752 76357 10753200634 24532 0ustar00softwaresoftware LASi: LASi::PostscriptDocument Class Reference

LASi::PostscriptDocument Class Reference

Composes Postscript document as three separate and independant streams for header, body and footer. More...

#include <LASi.h>

List of all members.

Public Member Functions

 PostscriptDocument ()
 ~PostscriptDocument ()
void setFont (const char *const family="sans", LASi::FontStyle=LASi::NORMAL_STYLE, LASi::FontWeight=LASi::NORMAL_WEIGHT, LASi::FontVariant=LASi::NORMAL_VARIANT, LASi::FontStretch=LASi::NORMAL_STRETCH)
 Sets the font that all subsequent text written to bodyStream() or footerStream() will be rendered with.
void setFontSize (const double size)
 Sets the font size, in points, that all subsequent text written to bodyStream() or footerStream() will be rendered with.
std::ostringstream & osHeader ()
 Returns stream for Postscript header.
oPostscriptStreamosBody ()
 Returns stream for Postscript body.
oPostscriptStreamosFooter ()
 Returns stream for Postscript footer.
void write (std::ostream &os, double llx=0, double lly=0, double urx=0, double ury=0)
 Closes all streams and writes completed Postscript document to os.
void get_dimensions (const char *s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)
 Return string dimensions: lineSpacing: inter-line spacing xAdvance: width of the string yMin: y-coordinate bounding the lowest descender, Indic under-consonantal vowel, etc.
void get_dimensions (std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)

Protected Types

typedef std::map< GlyphId,
FreetypeGlyphMgr > 
GlyphMap
 Maps glyph routine name to FT_Glyph instance.
typedef void(PostscriptDocument::* GLYPH_FUNC )(const GlyphMap::value_type &, void *contextData)
 Pointer to a function that takes a reference to a glyph and to x and y coordinates.

Protected Member Functions

void invoke_glyph_routine (const GlyphMap::value_type &, void *contextData)
void accrue_dimensions (const GlyphMap::value_type &, void *contextData1)
void for_each_glyph_do (const std::string &, const GLYPH_FUNC, void *contextData)
 Decomposes string into glyphs and applies GLYPH_FUNC to each glyph.
PangoContext * pangoContext () const
std::string glyphProcName () const
 
Returns:
name of Postscript glyph routine

double getFontSize ()
 
Returns:
font size in points (1/72 in.


Friends

class write_glyph_routine_to_stream
class show

Classes

class  GlyphId
 For internal use only. More...
class  write_glyph_routine_to_stream
 For internal use only. More...


Detailed Description

Composes Postscript document as three separate and independant streams for header, body and footer.

Body and footer streams respond to LASi::show applicator which generates Postscript commands to display a string by using glyph routines instead of a Postscript font.


Member Typedef Documentation

typedef std::map<GlyphId, FreetypeGlyphMgr> LASi::PostscriptDocument::GlyphMap [protected]

Maps glyph routine name to FT_Glyph instance.

typedef void(PostscriptDocument::* LASi::PostscriptDocument::GLYPH_FUNC)(const GlyphMap::value_type &, void *contextData) [protected]

Pointer to a function that takes a reference to a glyph and to x and y coordinates.

May return new x and y coordinates.


Constructor & Destructor Documentation

LASi::PostscriptDocument::PostscriptDocument (  ) 

LASi::PostscriptDocument::~PostscriptDocument (  ) 


Member Function Documentation

void LASi::PostscriptDocument::setFont ( const char *const   family = "sans",
LASi::FontStyle  = LASi::NORMAL_STYLE,
LASi::FontWeight  = LASi::NORMAL_WEIGHT,
LASi::FontVariant  = LASi::NORMAL_VARIANT,
LASi::FontStretch  = LASi::NORMAL_STRETCH 
)

Sets the font that all subsequent text written to bodyStream() or footerStream() will be rendered with.

void LASi::PostscriptDocument::setFontSize ( const double  size  )  [inline]

Sets the font size, in points, that all subsequent text written to bodyStream() or footerStream() will be rendered with.

std::ostringstream& LASi::PostscriptDocument::osHeader (  )  [inline]

Returns stream for Postscript header.

oPostscriptStream& LASi::PostscriptDocument::osBody (  )  [inline]

Returns stream for Postscript body.

oPostscriptStream& LASi::PostscriptDocument::osFooter (  )  [inline]

Returns stream for Postscript footer.

void LASi::PostscriptDocument::write ( std::ostream &  os,
double  llx = 0,
double  lly = 0,
double  urx = 0,
double  ury = 0 
)

Closes all streams and writes completed Postscript document to os.

Header will include glyph routines for all text glyphs in body and footer.

2006.05.01.ET Addendum: To create an EPS document, just include the the four BoundingBox coordinates llx, lly, urx, ury (dimensions in points). These are optional parameters -- When not included, you'll get a regular PS document. When included, you'll get an EPS document.

void LASi::PostscriptDocument::get_dimensions ( const char *  s,
double *  lineSpacing,
double *  xAdvance = NULL,
double *  yMin = NULL,
double *  yMax = NULL 
)

Return string dimensions: lineSpacing: inter-line spacing xAdvance: width of the string yMin: y-coordinate bounding the lowest descender, Indic under-consonantal vowel, etc.

yMax: y-coordinate bounding the highest ascender, diacritic, Indic over-letter vowel, etc.

void LASi::PostscriptDocument::get_dimensions ( std::string  s,
double *  lineSpacing,
double *  xAdvance = NULL,
double *  yMin = NULL,
double *  yMax = NULL 
)

void LASi::PostscriptDocument::invoke_glyph_routine ( const GlyphMap::value_type &  ,
void *  contextData 
) [protected]

void LASi::PostscriptDocument::accrue_dimensions ( const GlyphMap::value_type &  ,
void *  contextData1 
) [protected]

void LASi::PostscriptDocument::for_each_glyph_do ( const std::string &  ,
const   GLYPH_FUNC,
void *  contextData 
) [protected]

Decomposes string into glyphs and applies GLYPH_FUNC to each glyph.

PangoContext* LASi::PostscriptDocument::pangoContext (  )  const [protected]

std::string LASi::PostscriptDocument::glyphProcName (  )  const [protected]

Returns:
name of Postscript glyph routine

double LASi::PostscriptDocument::getFontSize (  )  [inline, protected]

Returns:
font size in points (1/72 in.

)


Friends And Related Function Documentation

friend class write_glyph_routine_to_stream [friend]

friend class show [friend]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/dirs.html100644 1752 1752 2234 10753200634 17362 0ustar00softwaresoftware LASi: Directory Hierarchy

LASi Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/functions_rela.html100644 1752 1752 5713 10753200634 21441 0ustar00softwaresoftware LASi: Class Members - Related Functions  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/annotated.html100644 1752 1752 6510 10753200634 20377 0ustar00softwaresoftware LASi: Class List

LASi Class List

Here are the classes, structs, unions and interfaces with brief descriptions:
LASi::oPostscriptStreamJust like any ordinary ostringstream, but maintains a reference to the PostscriptDocument
LASi::PostscriptDocumentComposes Postscript document as three separate and independant streams for header, body and footer
LASi::PostscriptDocument::GlyphIdFor internal use only
LASi::PostscriptDocument::write_glyph_routine_to_streamFor internal use only
LASi::setFontStream manipulator applied to oPostscriptStream
LASi::setFontSizeStream manipulator applied to oPostscriptStream
LASi::showStream applicator applied to oPostscriptStream

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1setFontSize-members.html100644 1752 1752 4256 10753200634 24533 0ustar00softwaresoftware LASi: Member List

LASi::setFontSize Member List

This is the complete list of members for LASi::setFontSize, including all inherited members.

apply(oPostscriptStream &os) const LASi::setFontSize [inline, protected]
operator<<(oPostscriptStream &os, const setFontSize &x)LASi::setFontSize [friend]
setFontSize(double size)LASi::setFontSize [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespacemembers_enum.html100644 1752 1752 3662 10753200634 22762 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1PostscriptDocument_1_1GlyphId.html100644 1752 1752 20606 10753200634 26435 0ustar00softwaresoftware LASi: LASi::PostscriptDocument::GlyphId Class Reference

LASi::PostscriptDocument::GlyphId Class Reference

For internal use only. More...

#include <LASi.h>

List of all members.

Public Member Functions

 GlyphId ()
 GlyphId (FT_Face, const FT_UInt)
std::string str () const
 
Returns:
string representation of glyph id


Friends

bool operator== (const GlyphId id1, const GlyphId id2)
bool operator< (const GlyphId id1, const GlyphId id2)


Detailed Description

For internal use only.

Constructor & Destructor Documentation

LASi::PostscriptDocument::GlyphId::GlyphId (  )  [inline]

LASi::PostscriptDocument::GlyphId::GlyphId ( FT_Face  ,
const   FT_UInt 
)


Member Function Documentation

std::string LASi::PostscriptDocument::GlyphId::str (  )  const [inline]

Returns:
string representation of glyph id


Friends And Related Function Documentation

bool operator== ( const GlyphId  id1,
const GlyphId  id2 
) [friend]

bool operator< ( const GlyphId  id1,
const GlyphId  id2 
) [friend]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/index.html100644 1752 1752 6674 10753200634 17544 0ustar00softwaresoftware LASi: Main Page

LASi Documentation

Purpose

LASi is Copyright (C) 2003, 2004, 2006 by Larry Siden.

LASi is hosted on http://www.unifont.org

LASi provides a C++ output stream interface for writing Postscript documents containing any of the world's scripts supported by Unicode 4.0 and by Pango. Right-to-left scripts like Hebrew and Arabic are accomodated as easily as left-to-right scripts. Complex text layout (CTL) scripts such as Devanagari, Thai, Lao and Tibetan are supported to the extent provided by Pango and by the OpenType fonts installed on your system.

Postscript's show operator and font dictionaries can only provide glyphs for up to 255 code points and thus are hopelessly inadequate for many of the world's scripts, much less any kind of multilingual or scientific text encoded in Unicode.

LASi works around the limitations of Postscript's built-in font technology by generating a Postscript routine for each glyph in a string. A LASi user writes a Postscript program much as he or she may have done in the past, but now uses LASi's show() method instead of the Postscript show operator. The user simply passes UTF-8 text strings directly to LASi's show() method.

To draw the text string, LASi generates a sequence of calls to LASi-generated Postscript glyph routines. Glyph routines are only generated for glyphs that are actually used in the text. In this respect, LASi is efficient even for Chinese, Japanese, or Korean (CJK).

In addition to being efficient, the Postscript code and routines created by LASi are intelligible to human readers which facilitates debugging of Postscript programs.

Usage

Please view the examples provided in the examples directory to see how LASi is used. The only header your program need include is LASi.h. View the examples' Makefiles to see how a program may link with libLASi.
Generated on Fri Feb 8 17:25:19 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/classLASi_1_1setFont.html100644 1752 1752 22414 10753200634 22264 0ustar00softwaresoftware LASi: LASi::setFont Class Reference

LASi::setFont Class Reference

stream manipulator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 setFont (const char *const family="sans", const LASi::FontStyle style=LASi::NORMAL_STYLE, const LASi::FontWeight weight=LASi::NORMAL_WEIGHT, const LASi::FontVariant variant=LASi::NORMAL_VARIANT, const LASi::FontStretch stretch=LASi::NORMAL_STRETCH)
 Usage: os << setFont("Vera Sans",LASi::ITALIC,LASi::BOLD) << .

Protected Member Functions

void apply (oPostscriptStream &os) const

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const setFont &x)
 Stream inserter for 'setFont' stream manipulator.


Detailed Description

stream manipulator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::setFont::setFont ( const char *const   family = "sans",
const LASi::FontStyle  style = LASi::NORMAL_STYLE,
const LASi::FontWeight  weight = LASi::NORMAL_WEIGHT,
const LASi::FontVariant  variant = LASi::NORMAL_VARIANT,
const LASi::FontStretch  stretch = LASi::NORMAL_STRETCH 
) [inline]

Usage: os << setFont("Vera Sans",LASi::ITALIC,LASi::BOLD) << .

..


Member Function Documentation

void LASi::setFont::apply ( oPostscriptStream os  )  const [inline, protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const setFont x 
) [friend]

Stream inserter for 'setFont' stream manipulator.


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespacemembers_func.html100644 1752 1752 3220 10753200634 22737 0ustar00softwaresoftware LASi: Class Members  

  • operator<<() : LASi

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/functions.html100644 1752 1752 17754 10753200634 20466 0ustar00softwaresoftware LASi: Class Members

Here is a list of all class members with links to the classes they belong to:

- a -

- d -

- f -

- g -

- i -

- o -

- p -

- s -

- w -

- ~ -


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespaces.html100644 1752 1752 2603 10753200634 20540 0ustar00softwaresoftware LASi: Namespace Index

LASi Namespace List

Here is a list of all namespaces with brief descriptions:
LASi

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/user/html/namespaceLASi.html100644 1752 1752 41164 10753200634 21113 0ustar00softwaresoftware LASi: LASi Namespace Reference

LASi Namespace Reference


Classes

class  oPostscriptStream
 Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...
class  PostscriptDocument
 Composes Postscript document as three separate and independant streams for header, body and footer. More...
class  setFont
 stream manipulator applied to oPostscriptStream. More...
class  setFontSize
 stream manipulator applied to oPostscriptStream. More...
class  show
 stream applicator applied to oPostscriptStream. More...

Enumerations

enum  FontStyle { NORMAL_STYLE, OBLIQUE, ITALIC }
enum  FontWeight {
  ULTRALIGHT, LIGHT, NORMAL_WEIGHT, BOLD,
  ULTRABOLD, HEAVY
}
enum  FontVariant { NORMAL_VARIANT, SMALLCAPS }
enum  FontStretch {
  ULTRACONDENSED, EXTRACONDENSED, CONDENSED, SEMICONDENSED,
  NORMAL_STRETCH, SEMIEXPANDED, EXPANDED, EXTRAEXPANDED,
  ULTRAEXPANDED
}

Functions

template<class T>
oPostscriptStreamoperator<< (oPostscriptStream &os, T t)


Enumeration Type Documentation

Enumerator:
ULTRACONDENSED 
EXTRACONDENSED 
CONDENSED 
SEMICONDENSED 
NORMAL_STRETCH 
SEMIEXPANDED 
EXPANDED 
EXTRAEXPANDED 
ULTRAEXPANDED 

Enumerator:
NORMAL_STYLE 
OBLIQUE 
ITALIC 

Enumerator:
NORMAL_VARIANT 
SMALLCAPS 

Enumerator:
ULTRALIGHT 
LIGHT 
NORMAL_WEIGHT 
BOLD 
ULTRABOLD 
HEAVY 


Function Documentation

template<class T>
oPostscriptStream& LASi::operator<< ( oPostscriptStream &  os,
t 
) [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1setFont-members.html100644 1752 1752 7075 10753200634 24711 0ustar00softwaresoftware LASi: Member List

LASi::setFont Member List

This is the complete list of members for LASi::setFont, including all inherited members.

_familyLASi::setFont [private]
_stretchLASi::setFont [private]
_styleLASi::setFont [private]
_variantLASi::setFont [private]
_weightLASi::setFont [private]
apply(oPostscriptStream &os) const LASi::setFont [inline, protected]
operator<<(oPostscriptStream &os, const setFont &x)LASi::setFont [friend]
setFont(const char *const family="sans", const LASi::FontStyle style=LASi::NORMAL_STYLE, const LASi::FontWeight weight=LASi::NORMAL_WEIGHT, const LASi::FontVariant variant=LASi::NORMAL_VARIANT, const LASi::FontStretch stretch=LASi::NORMAL_STRETCH)LASi::setFont [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1PostscriptDocument_1_1GlyphId-members.html100644 1752 1752 6441 10753200634 31055 0ustar00softwaresoftware LASi: Member List

LASi::PostscriptDocument::GlyphId Member List

This is the complete list of members for LASi::PostscriptDocument::GlyphId, including all inherited members.

_strLASi::PostscriptDocument::GlyphId [private]
GlyphId()LASi::PostscriptDocument::GlyphId [inline]
GlyphId(FT_Face, const FT_UInt)LASi::PostscriptDocument::GlyphId
operator<(const GlyphId id1, const GlyphId id2)LASi::PostscriptDocument::GlyphId [friend]
operator==(const GlyphId id1, const GlyphId id2)LASi::PostscriptDocument::GlyphId [friend]
str() const LASi::PostscriptDocument::GlyphId [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classStringDimensions.html100644 1752 1752 34302 10753200634 23776 0ustar00softwaresoftware LASi: StringDimensions Class Reference

StringDimensions Class Reference

Class StringDimensions maintains the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size. More...

#include <stringDimensions.h>

List of all members.

Public Member Functions

 StringDimensions (double xAdv=0.0, double yMin=0.0, double yMax=0.0, double spacingFactor=1.2)
void accrueXAdvance (const double xAdv)
 Sum up the individual x advances of each glyph:.
void setYMin (const double yMin)
 Keep a running tab on the minimum y value (descent) from all glyphs:.
void setYMax (const double yMax)
 Keep a running tab on the maximum y value (ascent) from all glyphs:.
const double getXAdvance ()
const double getYMin ()
const double getYMax ()
const double getLineSpacing ()
 Line spacing is just the maximum ascent minus the maximum descent multiplied by the line spacing factor:.

Private Attributes

double xadv
double ymin
double ymax
double lineSpacingFactor


Detailed Description

Class StringDimensions maintains the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size.

Used internally by LASi.


Constructor & Destructor Documentation

StringDimensions::StringDimensions ( double  xAdv = 0.0,
double  yMin = 0.0,
double  yMax = 0.0,
double  spacingFactor = 1.2 
) [inline]


Member Function Documentation

void StringDimensions::accrueXAdvance ( const double  xAdv  )  [inline]

Sum up the individual x advances of each glyph:.

void StringDimensions::setYMin ( const double  yMin  )  [inline]

Keep a running tab on the minimum y value (descent) from all glyphs:.

void StringDimensions::setYMax ( const double  yMax  )  [inline]

Keep a running tab on the maximum y value (ascent) from all glyphs:.

const double StringDimensions::getXAdvance (  )  [inline]

const double StringDimensions::getYMin (  )  [inline]

const double StringDimensions::getYMax (  )  [inline]

const double StringDimensions::getLineSpacing (  )  [inline]

Line spacing is just the maximum ascent minus the maximum descent multiplied by the line spacing factor:.


Member Data Documentation

double StringDimensions::xadv [private]

double StringDimensions::ymin [private]

double StringDimensions::ymax [private]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/tab_l.gif100644 1752 1752 1302 10753200634 20305 0ustar00softwaresoftwareGIF89a ,薴ŝɯͻ, ,@P`H$!%CqVe2XJ(Ġ+3 2$ kv-u*"}|}|~q(" $f 'l(&&$r & !){rƲεҽͼиP?Bm A%V܈!k/Đ;^$Ɩ#Mf)f͇(WLK҄ I)L:eD Cx*4 Uh %A^NKbeXkx!2t !5t]$%X.i[]YfEkg`:zҞ;}jaaM׸c瞽vۺ8ȋ'?9積G_>yu_ߞ]zw߭Ǿm浏G~თ/>٫|W}v;libLASi-1.1.0/doc/developer/html/classLASi_1_1PostscriptDocument-members.html100644 1752 1752 22254 10753200634 27154 0ustar00softwaresoftware LASi: Member List

LASi::PostscriptDocument Member List

This is the complete list of members for LASi::PostscriptDocument, including all inherited members.

_fontSizeLASi::PostscriptDocument [private]
_glyphMapLASi::PostscriptDocument [private]
_osBodyLASi::PostscriptDocument [private]
_osFooterLASi::PostscriptDocument [private]
_osHeaderLASi::PostscriptDocument [private]
_pContextMgrLASi::PostscriptDocument [private]
accrue_dimensions(const GlyphMap::value_type &, void *contextData1)LASi::PostscriptDocument [protected]
DRAWING_SCALELASi::PostscriptDocument [private, static]
for_each_glyph_do(const std::string &, const GLYPH_FUNC, void *contextData)LASi::PostscriptDocument [protected]
get_dimensions(const char *s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)LASi::PostscriptDocument
get_dimensions(std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)LASi::PostscriptDocument
getFontSize()LASi::PostscriptDocument [inline, protected]
GLYPH_FUNC typedefLASi::PostscriptDocument [protected]
GlyphMap typedefLASi::PostscriptDocument [protected]
glyphProcName() const LASi::PostscriptDocument [protected]
invoke_glyph_routine(const GlyphMap::value_type &, void *contextData)LASi::PostscriptDocument [protected]
osBody()LASi::PostscriptDocument [inline]
osFooter()LASi::PostscriptDocument [inline]
osHeader()LASi::PostscriptDocument [inline]
pangoContext() const LASi::PostscriptDocument [inline, protected]
PostscriptDocument()LASi::PostscriptDocument
setFont(const char *const family="sans", LASi::FontStyle=LASi::NORMAL_STYLE, LASi::FontWeight=LASi::NORMAL_WEIGHT, LASi::FontVariant=LASi::NORMAL_VARIANT, LASi::FontStretch=LASi::NORMAL_STRETCH)LASi::PostscriptDocument
setFontSize(const double size)LASi::PostscriptDocument [inline]
show classLASi::PostscriptDocument [friend]
write(std::ostream &os, double llx=0, double lly=0, double urx=0, double ury=0)LASi::PostscriptDocument
write_glyph_routine_to_stream classLASi::PostscriptDocument [friend]
~PostscriptDocument()LASi::PostscriptDocument


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/drawGlyph_8cpp.html100644 1752 1752 40103 10753200634 22340 0ustar00softwaresoftware LASi: drawGlyph.cpp File Reference

drawGlyph.cpp File Reference

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. More...

#include <ostream>
#include <freetype/ftoutln.h>
#include <algorithm>
#include <LASi.h>
#include <config.h>
#include "glyphMgr.h"
#include "util.h"
#include "memory.h"

Namespaces

namespace  std

Classes

struct  StateOfDrawGlyph

Functions

static FT_Vector operator+ (const FT_Vector &vec1, const FT_Vector &vec2)
static FT_Vector operator * (const FT_Vector &vec1, const int n)
static FT_Vector operator * (const int n, const FT_Vector &vec1)
static FT_Vector operator/ (const FT_Vector &vec1, const int n)
static ostream & operator<< (ostream &os, const FT_Vector &ftVec)
static int xTo (const FT_Vector *pftVec, void *const data, const char *const cmd)
static int moveTo (FT_Vector *pftVec, void *data)
static int lineTo (FT_Vector *pftVec, void *data)
static int cubicTo (FT_Vector *ctrlPt1, FT_Vector *ctrlPt2, FT_Vector *pEndPt, void *data)
static int conicTo (FT_Vector *pCtrlPt, FT_Vector *pEndPt, void *data)

Variables

static const FT_Outline_Funcs outlineFuncs = {moveTo, lineTo, conicTo, cubicTo}


Detailed Description

libLASi provides a C++ output stream interface for writing multi-language Postscript documents.

Copyright (C) 2003 Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Function Documentation

static int conicTo ( FT_Vector *  pCtrlPt,
FT_Vector *  pEndPt,
void *  data 
) [static]

static int cubicTo ( FT_Vector *  ctrlPt1,
FT_Vector *  ctrlPt2,
FT_Vector *  pEndPt,
void *  data 
) [static]

static int lineTo ( FT_Vector *  pftVec,
void *  data 
) [static]

static int moveTo ( FT_Vector *  pftVec,
void *  data 
) [static]

static FT_Vector operator * ( const int  n,
const FT_Vector &  vec1 
) [static]

static FT_Vector operator * ( const FT_Vector &  vec1,
const int  n 
) [static]

static FT_Vector operator+ ( const FT_Vector &  vec1,
const FT_Vector &  vec2 
) [static]

static FT_Vector operator/ ( const FT_Vector &  vec1,
const int  n 
) [static]

static ostream& operator<< ( ostream &  os,
const FT_Vector &  ftVec 
) [static]

static int xTo ( const FT_Vector *  pftVec,
void *const   data,
const char *const   cmd 
) [static]


Variable Documentation

const FT_Outline_Funcs outlineFuncs = {moveTo, lineTo, conicTo, cubicTo} [static]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/glyphMgr_8cpp.html100644 1752 1752 3771 10753200634 22162 0ustar00softwaresoftware LASi: glyphMgr.cpp File Reference

glyphMgr.cpp File Reference

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. More...

#include <stdexcept>
#include <ft2build.h>
#include <freetype/ftglyph.h>
#include <cassert>
#include "util.h"
#include "glyphMgr.h"


Detailed Description

libLASi provides a C++ output stream interface for writing multi-language Postscript documents.

Copyright (C) 2003, 2004 Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/structStateOfDrawGlyph.html100644 1752 1752 22003 10753200634 24100 0ustar00softwaresoftware LASi: StateOfDrawGlyph Struct Reference

StateOfDrawGlyph Struct Reference

List of all members.

Public Member Functions

 StateOfDrawGlyph (std::ostream &os)
std::ostream & os ()
FT_Vector startPt ()
void setStartPt (const FT_Vector pt)
bool isNewPath ()
void setNewPathFalse ()

Private Attributes

std::ostream & _os
FT_Vector _startPt
bool _isNewPath


Constructor & Destructor Documentation

StateOfDrawGlyph::StateOfDrawGlyph ( std::ostream &  os  )  [inline]


Member Function Documentation

std::ostream& StateOfDrawGlyph::os (  )  [inline]

FT_Vector StateOfDrawGlyph::startPt (  )  [inline]

void StateOfDrawGlyph::setStartPt ( const FT_Vector  pt  )  [inline]

bool StateOfDrawGlyph::isNewPath (  )  [inline]

void StateOfDrawGlyph::setNewPathFalse (  )  [inline]


Member Data Documentation

std::ostream& StateOfDrawGlyph::_os [private]

FT_Vector StateOfDrawGlyph::_startPt [private]


The documentation for this struct was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1oPostscriptStream.html100644 1752 1752 21166 10753200634 25361 0ustar00softwaresoftware LASi: LASi::oPostscriptStream Class Reference

LASi::oPostscriptStream Class Reference

Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...

#include <LASi.h>

List of all members.

Public Member Functions

 oPostscriptStream (PostscriptDocument &psDoc)

Protected Member Functions

PostscriptDocumentdoc ()

Private Attributes

PostscriptDocument_psDoc

Friends

class PostscriptDocument
class show
class setFont
class setFontSize


Detailed Description

Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument.

Constructor & Destructor Documentation

LASi::oPostscriptStream::oPostscriptStream ( PostscriptDocument psDoc  )  [inline]


Member Function Documentation

PostscriptDocument& LASi::oPostscriptStream::doc (  )  [inline, protected]


Friends And Related Function Documentation

friend class PostscriptDocument [friend]

friend class show [friend]

friend class setFont [friend]

friend class setFontSize [friend]


Member Data Documentation


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespacemembers.html100644 1752 1752 11271 10753200634 22760 0ustar00softwaresoftware LASi: Class Members Here is a list of all namespace members with links to the namespace documentation for each member:


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classFreetypeGlyphMgr.html100644 1752 1752 22657 10753200634 23746 0ustar00softwaresoftware LASi: FreetypeGlyphMgr Class Reference

FreetypeGlyphMgr Class Reference

Manage FT_Glyph by insuring that FT_Glyph is handled correctly. More...

#include <glyphMgr.h>

List of all members.

Public Member Functions

 FreetypeGlyphMgr ()
 Manage FT_Glyph by insuring that resources are freed when done.
 FreetypeGlyphMgr (FT_Glyph glyph)
 FreetypeGlyphMgr (const FreetypeGlyphMgr &ftgm)
FreetypeGlyphMgroperator= (const FreetypeGlyphMgr &ftgm)
 ~FreetypeGlyphMgr ()
 operator FT_Glyph () const
void assign (const FT_Glyph glyph)

Private Attributes

FT_Glyph _glyph


Detailed Description

Manage FT_Glyph by insuring that FT_Glyph is handled correctly.

Constructor & Destructor Documentation

FreetypeGlyphMgr::FreetypeGlyphMgr (  ) 

Manage FT_Glyph by insuring that resources are freed when done.

FreetypeGlyphMgr::FreetypeGlyphMgr ( FT_Glyph  glyph  ) 

FreetypeGlyphMgr::FreetypeGlyphMgr ( const FreetypeGlyphMgr ftgm  ) 

FreetypeGlyphMgr::~FreetypeGlyphMgr (  ) 


Member Function Documentation

FreetypeGlyphMgr & FreetypeGlyphMgr::operator= ( const FreetypeGlyphMgr ftgm  ) 

FreetypeGlyphMgr::operator FT_Glyph (  )  const

void FreetypeGlyphMgr::assign ( const FT_Glyph  glyph  ) 


Member Data Documentation

FT_Glyph FreetypeGlyphMgr::_glyph [private]


The documentation for this class was generated from the following files:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/tab_b.gif100644 1752 1752 43 10753200634 20234 0ustar00softwaresoftwareGIF89a,D;libLASi-1.1.0/doc/developer/html/contextMgr_8h-source.html100644 1752 1752 10246 10753200634 23501 0ustar00softwaresoftware LASi: contextMgr.h Source File

contextMgr.h

Go to the documentation of this file.
00001 
00008 #ifndef CONTEXT_MGR_H
00009 #define CONTEXT_MGR_H
00010 
00011 #include <pango/pango.h>
00012 #include <pango/pangoft2.h>
00013 #include "manager.h"
00014 
00017 class ContextMgr : public Manager<PangoContext*> {
00018   public:
00019     ContextMgr(
00020         const char* const lang="en_US.UTF-8",
00021         const int dpiX = 72,
00022         const int dpiY = 72) {
00023       _t = pango_ft2_get_context(dpiX, dpiY);
00024       pango_context_set_language(_t, pango_language_from_string(lang));
00025       pango_context_set_base_dir(_t, PANGO_DIRECTION_LTR);
00026     }
00027 
00028     ~ContextMgr() {
00029       if (_t && isOwner())
00030       g_object_unref(_t);
00031     }
00032 };
00033 #endif

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/util_8h.html100644 1752 1752 20126 10753200634 21024 0ustar00softwaresoftware LASi: util.h File Reference

util.h File Reference

Convert return-code of Freetype library calls to std::runtime_error. More...

#include <stdexcept>
#include <string>
#include <iostream>
#include <ft2build.h>
#include <freetype/ftglyph.h>

Go to the source code of this file.

Functions

std::ostream & operator<< (std::ostream &, const FT_Library)
std::ostream & operator<< (std::ostream &, const FT_Face)
std::ostream & operator<< (std::ostream &, const FT_Glyph)
std::ostream & operator<< (std::ostream &, const FT_Outline)
void evalReturnCode (const int errCode, const char *funcName) throw (std::runtime_error)
 Converts a freetype return code into an exception.


Detailed Description

Convert return-code of Freetype library calls to std::runtime_error.

Usage: place every call to Freetype library inside FtEval::eval().

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. Copyright (C) 2003, 2004 by Larry Siden.

See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Function Documentation

void evalReturnCode ( const int  errCode,
const char *  funcName 
) throw (std::runtime_error) [inline]

Converts a freetype return code into an exception.

std::ostream& operator<< ( std::ostream &  ,
const   FT_Outline 
)

std::ostream& operator<< ( std::ostream &  ,
const   FT_Glyph 
)

std::ostream& operator<< ( std::ostream &  ,
const   FT_Face 
)

std::ostream& operator<< ( std::ostream &  ,
const   FT_Library 
)


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/manager_8h.html100644 1752 1752 4606 10753200634 21446 0ustar00softwaresoftware LASi: manager.h File Reference

manager.h File Reference

Convert return-code of Freetype library calls to std::runtime_error. More...

#include <stdexcept>
#include <string>
#include <iostream>

Go to the source code of this file.

Classes

class  Manager< T >
 Manager template. More...


Detailed Description

Convert return-code of Freetype library calls to std::runtime_error.

Usage: place every call to Freetype library inside FtEval::eval().

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. Copyright (C) 2003, 2004 Larry Siden.

See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/drawGlyph_8h-source.html100644 1752 1752 4300 10753200634 23262 0ustar00softwaresoftware LASi: drawGlyph.h Source File

drawGlyph.h

Go to the documentation of this file.
00001 
00008 #ifndef DRAW_GLYPH_H
00009 #define DRAW_GLYPH_H
00010 
00011 #include <iostream>
00012 #include <pango/pango.h>
00013 #include <freetype/freetype.h>
00014 
00018 void writeGlyphRoutine(std::ostream& os, PangoContext * const pPangoCtx, FT_Glyph glyph);
00019 #endif

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/globals_vars.html100644 1752 1752 3127 10753200634 22110 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1setFontSize.html100644 1752 1752 17243 10753200634 24132 0ustar00softwaresoftware LASi: LASi::setFontSize Class Reference

LASi::setFontSize Class Reference

stream manipulator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 setFontSize (double size)
 Usage: os << setFontSize(12) << .

Protected Member Functions

void apply (oPostscriptStream &os) const

Private Attributes

double _size

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const setFontSize &x)
 Stream inserter for 'setFontSize' stream manipulator.


Detailed Description

stream manipulator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::setFontSize::setFontSize ( double  size  )  [inline]

Usage: os << setFontSize(12) << .

..

Parameters:
size size in points


Member Function Documentation

void LASi::setFontSize::apply ( oPostscriptStream os  )  const [inline, protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const setFontSize x 
) [friend]

Stream inserter for 'setFontSize' stream manipulator.


Member Data Documentation

double LASi::setFontSize::_size [private]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/doxygen.css100644 1752 1752 17641 10753200634 20761 0ustar00softwaresoftwareBODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; } BODY,TD { font-size: 90%; } H1 { text-align: center; font-size: 160%; } H2 { font-size: 120%; } H3 { font-size: 100%; } CAPTION { font-weight: bold } DIV.qindex { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.nav { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navtab { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } TD.navtab { font-size: 70%; } A.qindex { text-decoration: none; font-weight: bold; color: #1A419D; } A.qindex:visited { text-decoration: none; font-weight: bold; color: #1A419D } A.qindex:hover { text-decoration: none; background-color: #ddddff; } A.qindexHL { text-decoration: none; font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff; } A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } A.el { text-decoration: none; font-weight: bold } A.elRef { font-weight: bold } A.code:link { text-decoration: none; font-weight: normal; color: #0000FF} A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF} A.codeRef:link { font-weight: normal; color: #0000FF} A.codeRef:visited { font-weight: normal; color: #0000FF} A:hover { text-decoration: none; background-color: #f2f2ff } DL.el { margin-left: -1cm } .fragment { font-family: monospace, fixed; font-size: 95%; } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } BODY { background: white; color: black; margin-right: 20px; margin-left: 20px; } TD.indexkey { background-color: #e8eef2; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #e8eef2; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } .mdescLeft { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplParams { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; color: #606060; background-color: #FAFAFA; font-size: 80%; } .search { color: #003399; font-weight: bold; } FORM.search { margin-bottom: 0px; margin-top: 0px; } INPUT.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } TD.tiny { font-size: 75%; } a { color: #1A41A8; } a:visited { color: #2A3798; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } TH.dirtab { background: #e8eef2; font-weight: bold; } HR { height: 1px; border: none; border-top: 1px solid black; } /* Style for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 4px; background-color: #eef3f5; border-width: 1px; border-style: solid; border-color: #dedeee; -moz-border-radius: 8px 8px 8px 8px; } .memname { white-space: nowrap; font-weight: bold; } .memdoc{ padding-left: 10px; } .memproto { background-color: #d5e1e8; width: 100%; border-width: 1px; border-style: solid; border-color: #84b0c7; font-weight: bold; -moz-border-radius: 8px 8px 8px 8px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; font-style: italic; white-space: nowrap; } /* End Styling for detailed member documentation */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin:0.5em; } .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } libLASi-1.1.0/doc/developer/html/stringDimensions_8h.html100644 1752 1752 5353 10753200634 23373 0ustar00softwaresoftware LASi: stringDimensions.h File Reference

stringDimensions.h File Reference

Added to LASi on 2004.12.14 by ET. More...

Go to the source code of this file.

Classes

class  StringDimensions
 Class StringDimensions maintains the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size. More...


Detailed Description

Added to LASi on 2004.12.14 by ET.

StringDimensions is a simple class for maintaining the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size.

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. Copyright (C) 2003, 2004 Larry Siden.

See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream-members.html100644 1752 1752 6077 10753200634 36416 0ustar00softwaresoftwarelibLASi-1.1.0/doc/developer/html LASi: Member List

LASi::PostscriptDocument::write_glyph_routine_to_stream Member List

This is the complete list of members for LASi::PostscriptDocument::write_glyph_routine_to_stream, including all inherited members.

operator()(PostscriptDocument::GlyphMap::value_type v)LASi::PostscriptDocument::write_glyph_routine_to_stream
osLASi::PostscriptDocument::write_glyph_routine_to_stream [private]
pangoCtxLASi::PostscriptDocument::write_glyph_routine_to_stream [private]
write_glyph_routine_to_stream(std::ostream &os, PangoContext *pangoCtx)LASi::PostscriptDocument::write_glyph_routine_to_stream [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/functions_vars.html100644 1752 1752 12211 10753200634 22507 0ustar00softwaresoftware LASi: Class Members - Variables  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/tabs.css100644 1752 1752 3336 10753200634 20211 0ustar00softwaresoftware/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ DIV.tabs { float : left; width : 100%; background : url("tab_b.gif") repeat-x bottom; margin-bottom : 4px; } DIV.tabs UL { margin : 0px; padding-left : 10px; list-style : none; } DIV.tabs LI, DIV.tabs FORM { display : inline; margin : 0px; padding : 0px; } DIV.tabs FORM { float : right; } DIV.tabs A { float : left; background : url("tab_r.gif") no-repeat right top; border-bottom : 1px solid #84B0C7; font-size : x-small; font-weight : bold; text-decoration : none; } DIV.tabs A:hover { background-position: 100% -150px; } DIV.tabs A:link, DIV.tabs A:visited, DIV.tabs A:active, DIV.tabs A:hover { color: #1A419D; } DIV.tabs SPAN { float : left; display : block; background : url("tab_l.gif") no-repeat left top; padding : 5px 9px; white-space : nowrap; } DIV.tabs INPUT { float : right; display : inline; font-size : 1em; } DIV.tabs TD { font-size : x-small; font-weight : bold; text-decoration : none; } /* Commented Backslash Hack hides rule from IE5-Mac \*/ DIV.tabs SPAN {float : none;} /* End IE5-Mac hack */ DIV.tabs A:hover SPAN { background-position: 0% -150px; } DIV.tabs LI.current A { background-position: 100% -150px; border-width : 0px; } DIV.tabs LI.current SPAN { background-position: 0% -150px; padding-bottom : 6px; } DIV.nav { background : none; border : none; border-bottom : 1px solid #84B0C7; } libLASi-1.1.0/doc/developer/html/contextMgr_8h.html100644 1752 1752 4426 10753200634 22166 0ustar00softwaresoftware LASi: contextMgr.h File Reference

contextMgr.h File Reference

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. More...

#include <pango/pango.h>
#include <pango/pangoft2.h>
#include "manager.h"

Go to the source code of this file.

Classes

class  ContextMgr
 Manage PangoContext*. More...


Detailed Description

libLASi provides a C++ output stream interface for writing multi-language Postscript documents.

Copyright (C) 2003 Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1oPostscriptStream-members.html100644 1752 1752 6466 10753200634 26777 0ustar00softwaresoftware LASi: Member List

LASi::oPostscriptStream Member List

This is the complete list of members for LASi::oPostscriptStream, including all inherited members.

_psDocLASi::oPostscriptStream [private]
doc()LASi::oPostscriptStream [inline, protected]
oPostscriptStream(PostscriptDocument &psDoc)LASi::oPostscriptStream [inline]
PostscriptDocument classLASi::oPostscriptStream [friend]
setFont classLASi::oPostscriptStream [friend]
setFontSize classLASi::oPostscriptStream [friend]
show classLASi::oPostscriptStream [friend]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/globals_func.html100644 1752 1752 6305 10753200634 22071 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/dir_ced8ec04faf1f39c38b8acccde1582aa.html100644 1752 1752 3124 10753200634 25361 0ustar00softwaresoftware LASi: include/ Directory Reference

include Directory Reference


Files

file  LASi.h [code]
 Defines oPostscriptStream and PostscriptDocument and various stream manipulators.

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classManager.html100644 1752 1752 21004 10753200634 22044 0ustar00softwaresoftware LASi: Manager< T > Class Template Reference

Manager< T > Class Template Reference

Manager template. More...

#include <manager.h>

List of all members.

Public Member Functions

 Manager ()
 Manager (const T t)
 operator T () const

Protected Member Functions

bool isOwner () const
void release ()

Protected Attributes

_t

Private Attributes

bool _isOwner


Detailed Description

template<class T>
class Manager< T >

Manager template.

Make underlying types exception-safe.


Constructor & Destructor Documentation

template<class T>
Manager< T >::Manager (  )  [inline]

template<class T>
Manager< T >::Manager ( const T  t  )  [inline]


Member Function Documentation

template<class T>
Manager< T >::operator T (  )  const [inline]

template<class T>
bool Manager< T >::isOwner (  )  const [inline, protected]

template<class T>
void Manager< T >::release (  )  [inline, protected]


Member Data Documentation

template<class T>
T Manager< T >::_t [protected]

template<class T>
bool Manager< T >::_isOwner [private]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespacemembers_eval.html100644 1752 1752 10145 10753200634 23766 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/glyphMgr_8h-source.html100644 1752 1752 10646 10753200634 23144 0ustar00softwaresoftware LASi: glyphMgr.h Source File

glyphMgr.h

Go to the documentation of this file.
00001 
00013 #ifndef GLYPH_MANAGER_H
00014 #define GLYPH_MANAGER_H
00015 
00016 #include <ft2build.h>
00017 #include FT_FREETYPE_H
00018 
00019 #include <freetype/ftglyph.h>
00020 
00023 class FreetypeGlyphMgr { //: public Manager<FT_GlyphRec*> {
00024   private:
00025     FT_Glyph _glyph;
00026 
00027   public:
00028     FreetypeGlyphMgr();
00029     FreetypeGlyphMgr(FT_Glyph glyph);
00030     FreetypeGlyphMgr(const FreetypeGlyphMgr& ftgm);
00031     FreetypeGlyphMgr& operator=(const FreetypeGlyphMgr& ftgm);
00032     ~FreetypeGlyphMgr();
00033     operator FT_Glyph() const;
00034     void assign(const FT_Glyph glyph);
00035 };
00036 #endif

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/manager_8h-source.html100644 1752 1752 11414 10753200634 22757 0ustar00softwaresoftware LASi: manager.h Source File

manager.h

Go to the documentation of this file.
00001 
00013 #ifndef MANAGER_H
00014 #define MANAGER_H
00015 
00016 #include <stdexcept>
00017 #include <string>
00018 #include <iostream>
00019 
00023 template <class T>
00024 class Manager {
00025   protected: 
00026     T _t;
00027 
00028   public: 
00029     Manager() : _t(0), _isOwner(false) {}
00030     Manager<T>(const T t) : _t(t), _isOwner(true) {}
00031     operator T() const {return _t;}
00032 
00033   protected:
00034     bool isOwner() const {return _isOwner;}
00035     void release() {_isOwner = false;}
00036 
00037   private:
00038     bool _isOwner;
00039 };
00040 
00041 #endif

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/LASi_8h.html100644 1752 1752 30331 10753200634 20636 0ustar00softwaresoftware LASi: LASi.h File Reference

LASi.h File Reference

Defines oPostscriptStream and PostscriptDocument and various stream manipulators. More...

#include <string>
#include <ostream>
#include <sstream>
#include <map>
#include <pango/pango.h>
#include <freetype/ftglyph.h>

Go to the source code of this file.

Namespaces

namespace  LASi

Classes

class  LASi::oPostscriptStream
 Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...
class  LASi::PostscriptDocument
 Composes Postscript document as three separate and independant streams for header, body and footer. More...
class  LASi::PostscriptDocument::GlyphId
 For internal use only. More...
class  LASi::PostscriptDocument::write_glyph_routine_to_stream
 For internal use only. More...
class  LASi::setFont
 stream manipulator applied to oPostscriptStream. More...
class  LASi::setFontSize
 stream manipulator applied to oPostscriptStream. More...
class  LASi::show
 stream applicator applied to oPostscriptStream. More...

Defines

#define LASIDLLEXPORT
#define LASIDLLIMPORT
#define LASIDLLIMPEXP
#define LASIDLLIMPEXP_DATA(type)   type

Enumerations

enum  LASi::FontStyle { LASi::NORMAL_STYLE, LASi::OBLIQUE, LASi::ITALIC }
enum  LASi::FontWeight {
  LASi::ULTRALIGHT, LASi::LIGHT, LASi::NORMAL_WEIGHT, LASi::BOLD,
  LASi::ULTRABOLD, LASi::HEAVY
}
enum  LASi::FontVariant { LASi::NORMAL_VARIANT, LASi::SMALLCAPS }
enum  LASi::FontStretch {
  LASi::ULTRACONDENSED, LASi::EXTRACONDENSED, LASi::CONDENSED, LASi::SEMICONDENSED,
  LASi::NORMAL_STRETCH, LASi::SEMIEXPANDED, LASi::EXPANDED, LASi::EXTRAEXPANDED,
  LASi::ULTRAEXPANDED
}

Functions

template<class T>
oPostscriptStream & LASi::operator<< (oPostscriptStream &os, T t)


Detailed Description

Defines oPostscriptStream and PostscriptDocument and various stream manipulators.


Define Documentation

#define LASIDLLEXPORT

#define LASIDLLIMPEXP

#define LASIDLLIMPEXP_DATA ( type   )     type

#define LASIDLLIMPORT


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classStringDimensions-members.html100644 1752 1752 10551 10753200634 25426 0ustar00softwaresoftware LASi: Member List

StringDimensions Member List

This is the complete list of members for StringDimensions, including all inherited members.

accrueXAdvance(const double xAdv)StringDimensions [inline]
getLineSpacing()StringDimensions [inline]
getXAdvance()StringDimensions [inline]
getYMax()StringDimensions [inline]
getYMin()StringDimensions [inline]
lineSpacingFactorStringDimensions [private]
setYMax(const double yMax)StringDimensions [inline]
setYMin(const double yMin)StringDimensions [inline]
StringDimensions(double xAdv=0.0, double yMin=0.0, double yMax=0.0, double spacingFactor=1.2)StringDimensions [inline]
xadvStringDimensions [private]
ymaxStringDimensions [private]
yminStringDimensions [private]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1show.html100644 1752 1752 20610 10753200634 22625 0ustar00softwaresoftware LASi: LASi::show Class Reference

LASi::show Class Reference

stream applicator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 show (const char *c_str)
 Usage: os << show("some UTF-8 text") << .
 show (std::string stl_str)

Protected Member Functions

void apply (oPostscriptStream &os) const

Private Attributes

std::string _str

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const show &x)
 stream inserter for 'show' stream applicator


Detailed Description

stream applicator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::show::show ( const char *  c_str  )  [inline]

Usage: os << show("some UTF-8 text") << .

..

LASi::show::show ( std::string  stl_str  )  [inline]


Member Function Documentation

void show::apply ( oPostscriptStream os  )  const [protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const show x 
) [friend]

stream inserter for 'show' stream applicator


Member Data Documentation

std::string LASi::show::_str [private]


The documentation for this class was generated from the following files:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/LASi_8h-source.html100644 1752 1752 125674 10753200634 22173 0ustar00softwaresoftware LASi: LASi.h Source File

LASi.h

Go to the documentation of this file.
00001 #ifndef LASI_H
00002 #define LASI_H
00003 
00009 #include <string>
00010 #include <ostream>
00011 #include <sstream>
00012 #include <map>
00013 #include <pango/pango.h>
00014 #include <freetype/ftglyph.h>
00015 
00016 class FreetypeGlyphMgr;
00017 class ContextMgr;
00018 
00019 // These macros are needed for Visual C++ and other Windows compilers.
00020 // All functions/classes marked with LASIDLLIMPEXP can be imported form/exported to the dll.
00021 // Has no impact on other platforms
00022 #if defined(WIN32)
00023   /* Visual C/C++, Borland, MinGW and Watcom */
00024   #if defined(__VISUALC__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) || defined(__CYGWIN__)
00025     #define LASIDLLEXPORT __declspec(dllexport)
00026     #define LASIDLLIMPORT __declspec(dllimport)
00027   #else
00028     #define LASIDLLEXPORT
00029     #define LASIDLLIMPORT
00030   #endif
00031 #else
00032   #define LASIDLLEXPORT
00033   #define LASIDLLIMPORT
00034 #endif
00035 
00036 #if defined(LASi_EXPORTS)
00037   #define LASIDLLIMPEXP LASIDLLEXPORT
00038   #define LASIDLLIMPEXP_DATA(type) LASIDLLEXPORT type
00039 #elif defined(LASi_DLL)
00040   #define LASIDLLIMPEXP LASIDLLIMPORT
00041   #define LASIDLLIMPEXP_DATA(type) LASIDLLIMPORT type
00042 #else
00043   #define LASIDLLIMPEXP
00044   #define LASIDLLIMPEXP_DATA(type) type
00045 #endif
00046 
00047 namespace LASi {
00048 
00049   enum FontStyle{
00050     NORMAL_STYLE,
00051     OBLIQUE,
00052     ITALIC
00053   };
00054 
00055   enum FontWeight{
00056     ULTRALIGHT,
00057     LIGHT,
00058     NORMAL_WEIGHT,
00059     BOLD,
00060     ULTRABOLD,
00061     HEAVY
00062   };
00063 
00064   enum FontVariant{
00065     NORMAL_VARIANT,
00066     SMALLCAPS
00067   };
00068 
00069   enum FontStretch{
00070     ULTRACONDENSED,
00071     EXTRACONDENSED,
00072     CONDENSED,
00073     SEMICONDENSED,
00074     NORMAL_STRETCH,
00075     SEMIEXPANDED,
00076     EXPANDED,
00077     EXTRAEXPANDED,
00078     ULTRAEXPANDED
00079   };
00080   
00081   class PostscriptDocument;
00082   class write_glyph_routine_to_stream;
00083 
00087   class LASIDLLIMPEXP oPostscriptStream : public std::ostringstream {
00088     public:
00089       friend class PostscriptDocument;
00090       friend class show;
00091       friend class setFont;
00092       friend class setFontSize;
00093 
00094       oPostscriptStream(PostscriptDocument& psDoc) : _psDoc(psDoc) {}
00095 
00096     protected:
00097       PostscriptDocument& doc() {return _psDoc;}
00098 
00099     private:
00100       PostscriptDocument& _psDoc;
00101   };
00102 
00103   template<class T>
00104     inline oPostscriptStream& operator<<(oPostscriptStream& os, T t) {
00105       static_cast<std::ostream&>(os) << t;
00106       return os;
00107     }
00108 
00114   class LASIDLLIMPEXP PostscriptDocument {
00115     public:
00116       friend class write_glyph_routine_to_stream; // helper class
00117       friend class show;
00118 
00119       PostscriptDocument();
00120       ~PostscriptDocument();
00121 
00125       void setFont(
00126           const char* const family = "sans",
00127           LASi::FontStyle   = LASi::NORMAL_STYLE,
00128           LASi::FontWeight  = LASi::NORMAL_WEIGHT,
00129           LASi::FontVariant = LASi::NORMAL_VARIANT,
00130           LASi::FontStretch = LASi::NORMAL_STRETCH
00131       );
00132 
00136       void setFontSize(const double size) {_fontSize = size;}
00137 
00140       std::ostringstream& osHeader() {return _osHeader;}
00141 
00144       oPostscriptStream& osBody() {return _osBody;}
00145 
00148       oPostscriptStream& osFooter() {return _osFooter;}
00149 
00159       void write(std::ostream& os, double llx=0, double lly=0, double urx=0, double ury=0);
00160 
00167       void get_dimensions(const char* s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL);
00168       void get_dimensions(std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL);
00169 
00170     protected:
00175       class GlyphId {
00176         public:
00177           friend bool operator==(const GlyphId id1, const GlyphId id2) {
00178             return id1._str == id2._str;
00179           }
00180 
00181           friend bool operator<(const GlyphId id1, const GlyphId id2) {
00182             return id1._str < id2._str;
00183           }
00184 
00185           GlyphId() {}
00186           GlyphId(FT_Face, const FT_UInt);
00187 
00189           std::string str() const {return _str;}
00190 
00191         private:
00193           std::string _str;
00194       };
00195 
00198       typedef std::map<GlyphId, FreetypeGlyphMgr> GlyphMap;
00199 
00204       typedef void (PostscriptDocument::*GLYPH_FUNC)(
00205           const GlyphMap::value_type&, void* contextData);
00206 
00207       void invoke_glyph_routine(const GlyphMap::value_type&, void* contextData);
00208 
00209       void accrue_dimensions( const GlyphMap::value_type&, void* contextData1);
00210 
00213       void for_each_glyph_do(const std::string&, const GLYPH_FUNC, void* contextData);
00214 
00215       PangoContext* pangoContext() const;
00216 
00219       std::string glyphProcName() const;
00220 
00223       double getFontSize() {return _fontSize;}
00224 
00227       class write_glyph_routine_to_stream {
00228         private:
00229           std::ostream& os;
00230           PangoContext* pangoCtx;
00231 
00232         public:
00233           write_glyph_routine_to_stream(std::ostream& os, PangoContext* pangoCtx) 
00234             : os(os), pangoCtx(pangoCtx) {}
00235           void operator()(PostscriptDocument::GlyphMap::value_type v);
00236       };
00237 
00238     private:
00239       GlyphMap _glyphMap;
00240 
00241       static const unsigned int DRAWING_SCALE;
00242 
00243       // Use pointers instead of objects in order to minimize namespace pollution of .h file user
00244       // Requires fwd declarations above.
00245       ContextMgr* _pContextMgr;     // manage PangoContext*
00246       double _fontSize;             // font size to be used when rendering next show()
00247       std::ostringstream _osHeader; // Postscript header
00248       oPostscriptStream _osBody;    // Postscript body
00249       oPostscriptStream _osFooter;  // Postscript footer
00250   };
00251 
00254   class LASIDLLIMPEXP setFont {
00255     public:
00258       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFont& x) {
00259         x.apply(os);
00260         return os;
00261       }
00262 
00266       setFont(
00267           const char* const family = "sans",
00268           const LASi::FontStyle   style   = LASi::NORMAL_STYLE,
00269           const LASi::FontWeight  weight  = LASi::NORMAL_WEIGHT,
00270           const LASi::FontVariant variant = LASi::NORMAL_VARIANT,
00271           const LASi::FontStretch stretch = LASi::NORMAL_STRETCH )
00272           : _family(family), _style(style), _weight(weight), _variant(variant), _stretch(stretch)
00273       {}
00274       
00275     protected:
00276       void apply(oPostscriptStream& os) const {
00277         os.doc().setFont(_family, _style,_weight, _variant,  _stretch);
00278       }
00279 
00280     private:
00281       const char* const  _family;
00282       const LASi::FontStyle   _style;
00283       const LASi::FontWeight  _weight;
00284       const LASi::FontVariant _variant;
00285       const LASi::FontStretch _stretch;
00286       
00287   };
00288 
00291   class LASIDLLIMPEXP setFontSize {
00292     public:
00295       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFontSize& x) {
00296         x.apply(os);
00297         return os;
00298       }
00299 
00304       setFontSize(double size) : _size(size) {}
00305 
00306     protected:
00307       void apply(oPostscriptStream& os) const {
00308         os.doc().setFontSize(_size);
00309       }
00310 
00311     private:
00312       double _size;
00313   };
00314 
00317   class LASIDLLIMPEXP show{
00318     public:
00321       friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const show& x) {
00322         x.apply(os);
00323         return os;
00324       }
00325 
00329       show(const char* c_str   ) : _str(c_str  ) {}
00330       show(std::string stl_str ) : _str(stl_str) {}
00331 
00332     protected:
00333       void apply(oPostscriptStream& os) const;
00334 
00335     private:
00336       std::string _str;
00337   };
00338 }
00339 #endif
00340 

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/functions_type.html100644 1752 1752 3663 10753200634 22510 0ustar00softwaresoftware LASi: Class Members - Typedefs  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/globals.html100644 1752 1752 7775 10753200634 21072 0ustar00softwaresoftware LASi: Class Members Here is a list of all file members with links to the files they belong to:


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/psDoc_8cpp.html100644 1752 1752 7636 10753200634 21445 0ustar00softwaresoftware LASi: psDoc.cpp File Reference

psDoc.cpp File Reference

libLASi provides a C++ output stream interface for writing Postscript documents containing text strings in any of the world's scripts supported by Unicode 4.0 and Pango. More...

#include <ostream>
#include <stdexcept>
#include <pango/pango.h>
#include <ctype.h>
#include <algorithm>
#include <cmath>
#include <LASi.h>
#include "contextMgr.h"
#include "glyphMgr.h"
#include "util.h"
#include "memory.h"
#include "stringDimensions.h"
#include <iomanip>
#include <stdlib.h>

Functions

static string nameof (const FT_Face &face, const FT_UInt glyph_index)


Detailed Description

libLASi provides a C++ output stream interface for writing Postscript documents containing text strings in any of the world's scripts supported by Unicode 4.0 and Pango.

Copyright (C) 2003, 2004, 2006 by Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Function Documentation

static string nameof ( const FT_Face &  face,
const FT_UInt  glyph_index 
) [static]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/globals_defs.html100644 1752 1752 3565 10753200634 22064 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/glyphMgr_8h.html100644 1752 1752 4544 10753200634 21626 0ustar00softwaresoftware LASi: glyphMgr.h File Reference

glyphMgr.h File Reference

Convert return-code of Freetype library calls to std::runtime_error. More...

#include <ft2build.h>
#include <freetype/ftglyph.h>

Go to the source code of this file.

Classes

class  FreetypeGlyphMgr
 Manage FT_Glyph by insuring that FT_Glyph is handled correctly. More...


Detailed Description

Convert return-code of Freetype library calls to std::runtime_error.

Usage: place every call to Freetype library inside FtEval::eval().

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. Copyright (C) 2003, 2004 Larry Siden.

See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/files.html100644 1752 1752 7465 10753200634 20545 0ustar00softwaresoftware LASi: File Index

LASi File List

Here is a list of all files with brief descriptions:
contextMgr.h [code]LibLASi provides a C++ output stream interface for writing multi-language Postscript documents
drawGlyph.cppLibLASi provides a C++ output stream interface for writing multi-language Postscript documents
drawGlyph.h [code]LibLASi provides a C++ output stream interface for writing multi-language Postscript documents
glyphMgr.cppLibLASi provides a C++ output stream interface for writing multi-language Postscript documents
glyphMgr.h [code]Convert return-code of Freetype library calls to std::runtime_error
LASi.h [code]Defines oPostscriptStream and PostscriptDocument and various stream manipulators
manager.h [code]Convert return-code of Freetype library calls to std::runtime_error
psDoc.cppLibLASi provides a C++ output stream interface for writing Postscript documents containing text strings in any of the world's scripts supported by Unicode 4.0 and Pango
stringDimensions.h [code]Added to LASi on 2004.12.14 by ET
util.cppLibLASi provides a C++ output stream interface for writing multi-language Postscript documents
util.h [code]Convert return-code of Freetype library calls to std::runtime_error

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
classLASi_1_1PostscriptDocument_1_1write__glyph__routine__to__stream.html100644 1752 1752 16073 10753200634 35003 0ustar00softwaresoftwarelibLASi-1.1.0/doc/developer/html LASi: LASi::PostscriptDocument::write_glyph_routine_to_stream Class Reference

LASi::PostscriptDocument::write_glyph_routine_to_stream Class Reference

For internal use only. More...

#include <LASi.h>

List of all members.

Public Member Functions

 write_glyph_routine_to_stream (std::ostream &os, PangoContext *pangoCtx)
void operator() (PostscriptDocument::GlyphMap::value_type v)

Private Attributes

std::ostream & os
PangoContext * pangoCtx


Detailed Description

For internal use only.

Constructor & Destructor Documentation

LASi::PostscriptDocument::write_glyph_routine_to_stream::write_glyph_routine_to_stream ( std::ostream &  os,
PangoContext *  pangoCtx 
) [inline]


Member Function Documentation

void PostscriptDocument::write_glyph_routine_to_stream::operator() ( PostscriptDocument::GlyphMap::value_type  v  ) 


Member Data Documentation


The documentation for this class was generated from the following files:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/util_8cpp.html100644 1752 1752 20603 10753200634 21357 0ustar00softwaresoftware LASi: util.cpp File Reference

util.cpp File Reference

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. More...

#include "util.h"
#include <sstream>
#include <iostream>
#include <ft2build.h>

Functions

static const std::string glyph_format_to_string (const FT_Glyph_Format format)
static const std::string tag_to_string (const int tag)
ostream & operator<< (ostream &os, const FT_Library ft_library)
ostream & operator<< (ostream &os, const FT_Face ft_face)
ostream & operator<< (ostream &os, const FT_Glyph ft_glyph)
ostream & operator<< (ostream &os, const FT_Outline outline)


Detailed Description

libLASi provides a C++ output stream interface for writing multi-language Postscript documents.

Copyright (C) 2003 Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Function Documentation

static const std::string glyph_format_to_string ( const FT_Glyph_Format  format  )  [static]

ostream& operator<< ( ostream &  os,
const FT_Outline  outline 
)

ostream& operator<< ( ostream &  os,
const FT_Glyph  ft_glyph 
)

ostream& operator<< ( ostream &  os,
const FT_Face  ft_face 
)

ostream& operator<< ( ostream &  os,
const FT_Library  ft_library 
)

static const std::string tag_to_string ( const int  tag  )  [static]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/drawGlyph_8h.html100644 1752 1752 7156 10753200634 22000 0ustar00softwaresoftware LASi: drawGlyph.h File Reference

drawGlyph.h File Reference

libLASi provides a C++ output stream interface for writing multi-language Postscript documents. More...

#include <iostream>
#include <pango/pango.h>
#include <freetype/freetype.h>

Go to the source code of this file.

Functions

void writeGlyphRoutine (std::ostream &os, PangoContext *const pPangoCtx, FT_Glyph glyph)
 Generate the Postscript commands to draw the glyph using the font in pPangoCtx.


Detailed Description

libLASi provides a C++ output stream interface for writing multi-language Postscript documents.

Copyright (C) 2003 Larry Siden. See README file in project root directory for copyright and contact info. See COPYING file in project root for terms of re-distribution.


Function Documentation

void writeGlyphRoutine ( std::ostream &  os,
PangoContext *const   pPangoCtx,
FT_Glyph  glyph 
)

Generate the Postscript commands to draw the glyph using the font in pPangoCtx.


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1show-members.html100644 1752 1752 5144 10753200634 24242 0ustar00softwaresoftware LASi: Member List

LASi::show Member List

This is the complete list of members for LASi::show, including all inherited members.

_strLASi::show [private]
apply(oPostscriptStream &os) const LASi::show [protected]
operator<<(oPostscriptStream &os, const show &x)LASi::show [friend]
show(const char *c_str)LASi::show [inline]
show(std::string stl_str)LASi::show [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/tab_r.gif100644 1752 1752 5031 10753200634 20316 0ustar00softwaresoftwareGIF89a,薴ŝɯͻ,,@pH,Ȥrl:ШtJZجv h d@L"F:򑐌$9 (8&Nz (GFB^!˨)WVl)1 w̥.wY0Ib|Hpf:e pJ}Ȧ6nz 80%"8v~ @JЂMBІ:D'ZPKF ּ&16юz HGJRb L5Җ0LgJӚ#(e>Ӟ@ PJԢHMRԦ:PTJժ&5;%Uծz` XJVCjYֶp\Uxͫ^׾i)$Mb:v, ಘͬf7z hGKҚMjWֺ*$SPͭnwm +Mr:E?9Zͮv9" xKbLz^A|ͯ0/LN(; n0'LaJ0{/{ؘG|(SCr. v1wc6@LdHNd/PLeOXp|+s2L_153M5t3_:wsgʹπp?/FFЎt!-JҖ1NӞuA-Pԝ>53UWծ4cYZѶsA׀5,aƶ3=e3~-3Sc6mo2Mq>7ӭn$D~7,y1m}v\/N3#S\gu-mO0C\'_S^|.c.0ל49~s=3d:u)?F;ˮW|;W)vt˽w|=xA;libLASi-1.1.0/doc/developer/html/doxygen.png100644 1752 1752 2401 10753200634 20721 0ustar00softwaresoftwarePNG  IHDRd-ok>gAMAOX2tEXtSoftwareAdobe ImageReadyqe<]PLTEǾ"&ﶻޠ{ԍ눙נED9hg]_X<@:#mhU1tRNSvIDATxbC: d#h` @X",***LK.], X@t b @BD6%""  % B:Hf@ RPy"K`\PbC(!II!h(!Cąl!0[X\J\$TM(>a$S @ Ш@R.$LJBRAG1 (FPhhT%!`&q%u P    CT$B|Wl!B`R$( @A%%@,(%$RPmB U`1IYB  99\1 yCCCf"[N'=TGȒl8^K5<SRɤ%@@  b1qAXH&BR y nP4A j>  t!+(.WQA2MU܂ `1%`19F< 3cZ`e!\ D+. 83!lYYA -6EJV @XXX 4 @86`RdB4I " "@xrʌHA`f ȰC"XV0C b@2H ȓ p)!( 04)(%R $Tʀbb,s@7 Ѱ?f֗\PIx!I"Ȉ3 QYt^^gv- }>WJOAV`$&#88\FF SFJ$ƀƊ 4 - Hf ?5 k1d, ."FˀI"4Hgx|fm)))9. aMD& X@t b @%DK.], X@t b @d`ɽSOIENDB`libLASi-1.1.0/doc/developer/html/stringDimensions_8h-source.html100644 1752 1752 20714 10753200634 24707 0ustar00softwaresoftware LASi: stringDimensions.h Source File

stringDimensions.h

Go to the documentation of this file.
00001 
00023 class StringDimensions {
00024 
00025   private:
00026   
00027   double xadv;
00028   double ymin;
00029   double ymax;
00030   double lineSpacingFactor;
00031   
00032   public:
00033   
00034   // Constructor:
00035   StringDimensions(double xAdv=0.0, double yMin=0.0,double yMax=0.0,double spacingFactor=1.2){
00036     xadv = xAdv;
00037     ymin = yMin;
00038     ymax = yMax;
00039     lineSpacingFactor = spacingFactor;
00040     
00041   }
00042   
00043   //
00044   // Set methods: Accrue mins and maxs:
00045   // On the Y-axis, just take the true min and max.
00046   // 
00047   // On the X-axis, sum up all the individual x-advances
00048   // in order to get the overall bounding box:
00049   // 
00050   
00054   void accrueXAdvance(const double xAdv){ xadv += xAdv; }
00055   
00059   void setYMin(const double yMin){ if( yMin < ymin ) ymin = yMin; }
00063   void setYMax(const double yMax){ if( yMax > ymax ) ymax = yMax; }
00064   
00065   // Get methods:
00066   const double getXAdvance(){ return xadv; }
00067   const double getYMin(){ return ymin; }
00068   const double getYMax(){ return ymax; }
00069   
00074   const double getLineSpacing(){ return (ymax-ymin)*lineSpacingFactor; }
00075   
00076 };
00077 

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/functions_func.html100644 1752 1752 23343 10753200634 22477 0ustar00softwaresoftware LASi: Class Members - Functions

 

- a -

- c -

- d -

- f -

- g -

- i -

- m -

- o -

- p -

- r -

- s -

- w -

- ~ -


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classFreetypeGlyphMgr-members.html100644 1752 1752 6424 10753200634 25350 0ustar00softwaresoftware LASi: Member List

FreetypeGlyphMgr Member List

This is the complete list of members for FreetypeGlyphMgr, including all inherited members.

_glyphFreetypeGlyphMgr [private]
assign(const FT_Glyph glyph)FreetypeGlyphMgr
FreetypeGlyphMgr()FreetypeGlyphMgr
FreetypeGlyphMgr(FT_Glyph glyph)FreetypeGlyphMgr
FreetypeGlyphMgr(const FreetypeGlyphMgr &ftgm)FreetypeGlyphMgr
operator FT_Glyph() const FreetypeGlyphMgr
operator=(const FreetypeGlyphMgr &ftgm)FreetypeGlyphMgr
~FreetypeGlyphMgr()FreetypeGlyphMgr


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1PostscriptDocument.html100644 1752 1752 115474 10753200634 25553 0ustar00softwaresoftware LASi: LASi::PostscriptDocument Class Reference

LASi::PostscriptDocument Class Reference

Composes Postscript document as three separate and independant streams for header, body and footer. More...

#include <LASi.h>

List of all members.

Public Member Functions

 PostscriptDocument ()
 ~PostscriptDocument ()
void setFont (const char *const family="sans", LASi::FontStyle=LASi::NORMAL_STYLE, LASi::FontWeight=LASi::NORMAL_WEIGHT, LASi::FontVariant=LASi::NORMAL_VARIANT, LASi::FontStretch=LASi::NORMAL_STRETCH)
 Sets the font that all subsequent text written to bodyStream() or footerStream() will be rendered with.
void setFontSize (const double size)
 Sets the font size, in points, that all subsequent text written to bodyStream() or footerStream() will be rendered with.
std::ostringstream & osHeader ()
 Returns stream for Postscript header.
oPostscriptStreamosBody ()
 Returns stream for Postscript body.
oPostscriptStreamosFooter ()
 Returns stream for Postscript footer.
void write (std::ostream &os, double llx=0, double lly=0, double urx=0, double ury=0)
 Closes all streams and writes completed Postscript document to os.
void get_dimensions (const char *s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)
 Return string dimensions: lineSpacing: inter-line spacing xAdvance: width of the string yMin: y-coordinate bounding the lowest descender, Indic under-consonantal vowel, etc.
void get_dimensions (std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL)
 Returns the line spacing, x-advance, y-minimum and y-maximum based on the current font face and font size.

Protected Types

typedef std::map< GlyphId,
FreetypeGlyphMgr
GlyphMap
 Maps glyph routine name to FT_Glyph instance.
typedef void(PostscriptDocument::* GLYPH_FUNC )(const GlyphMap::value_type &, void *contextData)
 Pointer to a function that takes a reference to a glyph and to x and y coordinates.

Protected Member Functions

void invoke_glyph_routine (const GlyphMap::value_type &, void *contextData)
void accrue_dimensions (const GlyphMap::value_type &, void *contextData1)
void for_each_glyph_do (const std::string &, const GLYPH_FUNC, void *contextData)
 Decomposes string into glyphs and applies GLYPH_FUNC to each glyph.
PangoContext * pangoContext () const
std::string glyphProcName () const
 
Returns:
name of Postscript glyph routine

double getFontSize ()
 
Returns:
font size in points (1/72 in.


Private Attributes

GlyphMap _glyphMap
ContextMgr_pContextMgr
double _fontSize
std::ostringstream _osHeader
oPostscriptStream _osBody
oPostscriptStream _osFooter

Static Private Attributes

static const unsigned int DRAWING_SCALE = PANGO_SCALE

Friends

class write_glyph_routine_to_stream
class show

Classes

class  GlyphId
 For internal use only. More...
class  write_glyph_routine_to_stream
 For internal use only. More...


Detailed Description

Composes Postscript document as three separate and independant streams for header, body and footer.

Body and footer streams respond to LASi::show applicator which generates Postscript commands to display a string by using glyph routines instead of a Postscript font.


Member Typedef Documentation

Maps glyph routine name to FT_Glyph instance.

typedef void(PostscriptDocument::* LASi::PostscriptDocument::GLYPH_FUNC)(const GlyphMap::value_type &, void *contextData) [protected]

Pointer to a function that takes a reference to a glyph and to x and y coordinates.

May return new x and y coordinates.


Constructor & Destructor Documentation

PostscriptDocument::PostscriptDocument (  ) 

PostscriptDocument::~PostscriptDocument (  ) 


Member Function Documentation

void PostscriptDocument::setFont ( const char *const   family = "sans",
LASi::FontStyle  style = LASi::NORMAL_STYLE,
LASi::FontWeight  weight = LASi::NORMAL_WEIGHT,
LASi::FontVariant  variant = LASi::NORMAL_VARIANT,
LASi::FontStretch  stretch = LASi::NORMAL_STRETCH 
)

Sets the font that all subsequent text written to bodyStream() or footerStream() will be rendered with.

void LASi::PostscriptDocument::setFontSize ( const double  size  )  [inline]

Sets the font size, in points, that all subsequent text written to bodyStream() or footerStream() will be rendered with.

std::ostringstream& LASi::PostscriptDocument::osHeader (  )  [inline]

Returns stream for Postscript header.

oPostscriptStream& LASi::PostscriptDocument::osBody (  )  [inline]

Returns stream for Postscript body.

oPostscriptStream& LASi::PostscriptDocument::osFooter (  )  [inline]

Returns stream for Postscript footer.

void PostscriptDocument::write ( std::ostream &  os,
double  llx = 0,
double  lly = 0,
double  urx = 0,
double  ury = 0 
)

Closes all streams and writes completed Postscript document to os.

Writes out the document.

Header will include glyph routines for all text glyphs in body and footer.

2006.05.01.ET Addendum: To create an EPS document, just include the the four BoundingBox coordinates llx, lly, urx, ury (dimensions in points). These are optional parameters -- When not included, you'll get a regular PS document. When included, you'll get an EPS document.

void PostscriptDocument::get_dimensions ( const char *  s,
double *  lineSpacing,
double *  xAdvance = NULL,
double *  yMin = NULL,
double *  yMax = NULL 
)

Return string dimensions: lineSpacing: inter-line spacing xAdvance: width of the string yMin: y-coordinate bounding the lowest descender, Indic under-consonantal vowel, etc.

Returns the line spacing, x-advance, y-minimum and y-maximum based on the current font face and font size.

yMax: y-coordinate bounding the highest ascender, diacritic, Indic over-letter vowel, etc.

A bounding box around the text string, s, can be constructed from the xAdvance, yMinimum, and yMaximum. yMinimum tells you the descent from the baseline. yMaximum tells you the ascent from the baseline. The line spacing provides an inter-line spacing for multi-line text layout.

This version accepts a const C-style character string.

void PostscriptDocument::get_dimensions ( std::string  s,
double *  lineSpacing,
double *  xAdvance = NULL,
double *  yMin = NULL,
double *  yMax = NULL 
)

Returns the line spacing, x-advance, y-minimum and y-maximum based on the current font face and font size.

A bounding box around the text string, s, can be constructed from the xAdvance, yMinimum, and yMaximum. yMinimum tells you the descent from the baseline. yMaximum tells you the ascent from the baseline. The line spacing provides an inter-line spacing for multi-line text layout.

This version accepts an STL standard string class string.

void LASi::PostscriptDocument::invoke_glyph_routine ( const GlyphMap::value_type &  ,
void *  contextData 
) [protected]

void LASi::PostscriptDocument::accrue_dimensions ( const GlyphMap::value_type &  ,
void *  contextData1 
) [protected]

void LASi::PostscriptDocument::for_each_glyph_do ( const std::string &  ,
const   GLYPH_FUNC,
void *  contextData 
) [protected]

Decomposes string into glyphs and applies GLYPH_FUNC to each glyph.

PangoContext * PostscriptDocument::pangoContext (  )  const [inline, protected]

std::string LASi::PostscriptDocument::glyphProcName (  )  const [protected]

Returns:
name of Postscript glyph routine

double LASi::PostscriptDocument::getFontSize (  )  [inline, protected]

Returns:
font size in points (1/72 in.

)


Friends And Related Function Documentation

friend class write_glyph_routine_to_stream [friend]

friend class show [friend]


Member Data Documentation

const unsigned int PostscriptDocument::DRAWING_SCALE = PANGO_SCALE [static, private]

std::ostringstream LASi::PostscriptDocument::_osHeader [private]


The documentation for this class was generated from the following files:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespacestd.html100644 1752 1752 2427 10753200634 22103 0ustar00softwaresoftware LASi: std Namespace Reference

std Namespace Reference


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classContextMgr.png100644 1752 1752 1036 10753200634 22367 0ustar00softwaresoftwarePNG  IHDRPPLTE`{tRNS@fIDATXYr H7'ʓjaK\/[d1 }"c}}xu 7e8=j}C12'B6=dpL& ,tB@z&IENDB`libLASi-1.1.0/doc/developer/html/classContextMgr-members.html100644 1752 1752 6557 10753200634 24214 0ustar00softwaresoftware LASi: Member List

ContextMgr Member List

This is the complete list of members for ContextMgr, including all inherited members.

_tManager< PangoContext * > [protected]
ContextMgr(const char *const lang="en_US.UTF-8", const int dpiX=72, const int dpiY=72)ContextMgr [inline]
isOwner() const Manager< PangoContext * > [inline, protected]
Manager()Manager< PangoContext * > [inline]
Manager(const PangoContext *t)Manager< PangoContext * > [inline]
operator PangoContext *() const Manager< PangoContext * > [inline]
release()Manager< PangoContext * > [inline, protected]
~ContextMgr()ContextMgr [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/dirs.html100644 1752 1752 2347 10753200634 20376 0ustar00softwaresoftware LASi: Directory Hierarchy

LASi Directories

This directory hierarchy is sorted roughly, but not completely, alphabetically:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/dir_844ccf4c9c5f524017223c512b74160f.html100644 1752 1752 11740 10753200634 24440 0ustar00softwaresoftware LASi: src/ Directory Reference

src Directory Reference


Files

file  contextMgr.h [code]
 libLASi provides a C++ output stream interface for writing multi-language Postscript documents.
file  drawGlyph.cpp
 libLASi provides a C++ output stream interface for writing multi-language Postscript documents.
file  drawGlyph.h [code]
 libLASi provides a C++ output stream interface for writing multi-language Postscript documents.
file  glyphMgr.cpp
 libLASi provides a C++ output stream interface for writing multi-language Postscript documents.
file  glyphMgr.h [code]
 Convert return-code of Freetype library calls to std::runtime_error.
file  manager.h [code]
 Convert return-code of Freetype library calls to std::runtime_error.
file  psDoc.cpp
 libLASi provides a C++ output stream interface for writing Postscript documents containing text strings in any of the world's scripts supported by Unicode 4.0 and Pango.
file  stringDimensions.h [code]
 Added to LASi on 2004.12.14 by ET.
file  util.cpp
 libLASi provides a C++ output stream interface for writing multi-language Postscript documents.
file  util.h [code]
 Convert return-code of Freetype library calls to std::runtime_error.

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/functions_rela.html100644 1752 1752 6135 10753200634 22447 0ustar00softwaresoftware LASi: Class Members - Related Functions  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/annotated.html100644 1752 1752 10740 10753200634 21426 0ustar00softwaresoftware LASi: Class List

LASi Class List

Here are the classes, structs, unions and interfaces with brief descriptions:
ContextMgrManage PangoContext*
FreetypeGlyphMgrManage FT_Glyph by insuring that FT_Glyph is handled correctly
Manager< T >Manager template
LASi::oPostscriptStreamJust like any ordinary ostringstream, but maintains a reference to the PostscriptDocument
LASi::PostscriptDocumentComposes Postscript document as three separate and independant streams for header, body and footer
LASi::PostscriptDocument::GlyphIdFor internal use only
LASi::PostscriptDocument::write_glyph_routine_to_streamFor internal use only
LASi::setFontStream manipulator applied to oPostscriptStream
LASi::setFontSizeStream manipulator applied to oPostscriptStream
LASi::showStream applicator applied to oPostscriptStream
StateOfDrawGlyph
StringDimensionsClass StringDimensions maintains the relevant dimensions of a text string realized (i.e., drawn) in a given font face and font size

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1setFontSize-members.html100644 1752 1752 4755 10753200634 25546 0ustar00softwaresoftware LASi: Member List

LASi::setFontSize Member List

This is the complete list of members for LASi::setFontSize, including all inherited members.

_sizeLASi::setFontSize [private]
apply(oPostscriptStream &os) const LASi::setFontSize [inline, protected]
operator<<(oPostscriptStream &os, const setFontSize &x)LASi::setFontSize [friend]
setFontSize(double size)LASi::setFontSize [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespacemembers_enum.html100644 1752 1752 3662 10753200634 23771 0ustar00softwaresoftware LASi: Class Members  


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/structStateOfDrawGlyph-members.html100644 1752 1752 7115 10753200634 25517 0ustar00softwaresoftware LASi: Member List

StateOfDrawGlyph Member List

This is the complete list of members for StateOfDrawGlyph, including all inherited members.

_isNewPathStateOfDrawGlyph [private]
_osStateOfDrawGlyph [private]
_startPtStateOfDrawGlyph [private]
isNewPath()StateOfDrawGlyph [inline]
os()StateOfDrawGlyph [inline]
setNewPathFalse()StateOfDrawGlyph [inline]
setStartPt(const FT_Vector pt)StateOfDrawGlyph [inline]
startPt()StateOfDrawGlyph [inline]
StateOfDrawGlyph(std::ostream &os)StateOfDrawGlyph [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1PostscriptDocument_1_1GlyphId.html100644 1752 1752 23563 10753200634 27451 0ustar00softwaresoftware LASi: LASi::PostscriptDocument::GlyphId Class Reference

LASi::PostscriptDocument::GlyphId Class Reference

For internal use only. More...

#include <LASi.h>

List of all members.

Public Member Functions

 GlyphId ()
 GlyphId (FT_Face, const FT_UInt)
std::string str () const
 
Returns:
string representation of glyph id


Private Attributes

std::string _str
 
Returns:
string representation of glyph id


Friends

bool operator== (const GlyphId id1, const GlyphId id2)
bool operator< (const GlyphId id1, const GlyphId id2)


Detailed Description

For internal use only.

For internal use only.

A unique id for a glyph that is composed of its font face and a unique integer.


Constructor & Destructor Documentation

LASi::PostscriptDocument::GlyphId::GlyphId (  )  [inline]

PostscriptDocument::GlyphId::GlyphId ( FT_Face  face,
const   FT_UInt 
)


Member Function Documentation

std::string LASi::PostscriptDocument::GlyphId::str (  )  const [inline]

Returns:
string representation of glyph id


Friends And Related Function Documentation

bool operator== ( const GlyphId  id1,
const GlyphId  id2 
) [friend]

bool operator< ( const GlyphId  id1,
const GlyphId  id2 
) [friend]


Member Data Documentation

Returns:
string representation of glyph id


The documentation for this class was generated from the following files:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/index.html100644 1752 1752 6674 10753200634 20553 0ustar00softwaresoftware LASi: Main Page

LASi Documentation

Purpose

LASi is Copyright (C) 2003, 2004, 2006 by Larry Siden.

LASi is hosted on http://www.unifont.org

LASi provides a C++ output stream interface for writing Postscript documents containing any of the world's scripts supported by Unicode 4.0 and by Pango. Right-to-left scripts like Hebrew and Arabic are accomodated as easily as left-to-right scripts. Complex text layout (CTL) scripts such as Devanagari, Thai, Lao and Tibetan are supported to the extent provided by Pango and by the OpenType fonts installed on your system.

Postscript's show operator and font dictionaries can only provide glyphs for up to 255 code points and thus are hopelessly inadequate for many of the world's scripts, much less any kind of multilingual or scientific text encoded in Unicode.

LASi works around the limitations of Postscript's built-in font technology by generating a Postscript routine for each glyph in a string. A LASi user writes a Postscript program much as he or she may have done in the past, but now uses LASi's show() method instead of the Postscript show operator. The user simply passes UTF-8 text strings directly to LASi's show() method.

To draw the text string, LASi generates a sequence of calls to LASi-generated Postscript glyph routines. Glyph routines are only generated for glyphs that are actually used in the text. In this respect, LASi is efficient even for Chinese, Japanese, or Korean (CJK).

In addition to being efficient, the Postscript code and routines created by LASi are intelligible to human readers which facilitates debugging of Postscript programs.

Usage

Please view the examples provided in the examples directory to see how LASi is used. The only header your program need include is LASi.h. View the examples' Makefiles to see how a program may link with libLASi.
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/hierarchy.html100644 1752 1752 4653 10753200634 21415 0ustar00softwaresoftware LASi: Hierarchical Index

LASi Class Hierarchy

This inheritance list is sorted roughly, but not completely, alphabetically:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classLASi_1_1setFont.html100644 1752 1752 33414 10753200634 23275 0ustar00softwaresoftware LASi: LASi::setFont Class Reference

LASi::setFont Class Reference

stream manipulator applied to oPostscriptStream. More...

#include <LASi.h>

List of all members.

Public Member Functions

 setFont (const char *const family="sans", const LASi::FontStyle style=LASi::NORMAL_STYLE, const LASi::FontWeight weight=LASi::NORMAL_WEIGHT, const LASi::FontVariant variant=LASi::NORMAL_VARIANT, const LASi::FontStretch stretch=LASi::NORMAL_STRETCH)
 Usage: os << setFont("Vera Sans",LASi::ITALIC,LASi::BOLD) << .

Protected Member Functions

void apply (oPostscriptStream &os) const

Private Attributes

const char *const _family
const LASi::FontStyle _style
const LASi::FontWeight _weight
const LASi::FontVariant _variant
const LASi::FontStretch _stretch

Friends

oPostscriptStreamoperator<< (oPostscriptStream &os, const setFont &x)
 Stream inserter for 'setFont' stream manipulator.


Detailed Description

stream manipulator applied to oPostscriptStream.

Constructor & Destructor Documentation

LASi::setFont::setFont ( const char *const   family = "sans",
const LASi::FontStyle  style = LASi::NORMAL_STYLE,
const LASi::FontWeight  weight = LASi::NORMAL_WEIGHT,
const LASi::FontVariant  variant = LASi::NORMAL_VARIANT,
const LASi::FontStretch  stretch = LASi::NORMAL_STRETCH 
) [inline]

Usage: os << setFont("Vera Sans",LASi::ITALIC,LASi::BOLD) << .

..


Member Function Documentation

void LASi::setFont::apply ( oPostscriptStream os  )  const [inline, protected]


Friends And Related Function Documentation

oPostscriptStream& operator<< ( oPostscriptStream os,
const setFont x 
) [friend]

Stream inserter for 'setFont' stream manipulator.


Member Data Documentation

const char* const LASi::setFont::_family [private]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespacemembers_func.html100644 1752 1752 3220 10753200634 23746 0ustar00softwaresoftware LASi: Class Members  

  • operator<<() : LASi

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/functions.html100644 1752 1752 36431 10753200634 21466 0ustar00softwaresoftware LASi: Class Members

Here is a list of all class members with links to the classes they belong to:

- _ -

- a -

- c -

- d -

- f -

- g -

- i -

- l -

- m -

- o -

- p -

- r -

- s -

- w -

- x -

- y -

- ~ -


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespaces.html100644 1752 1752 2763 10753200634 21556 0ustar00softwaresoftware LASi: Namespace Index

LASi Namespace List

Here is a list of all namespaces with brief descriptions:
LASi
std

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/namespaceLASi.html100644 1752 1752 41164 10753200634 22122 0ustar00softwaresoftware LASi: LASi Namespace Reference

LASi Namespace Reference


Classes

class  oPostscriptStream
 Just like any ordinary ostringstream, but maintains a reference to the PostscriptDocument. More...
class  PostscriptDocument
 Composes Postscript document as three separate and independant streams for header, body and footer. More...
class  setFont
 stream manipulator applied to oPostscriptStream. More...
class  setFontSize
 stream manipulator applied to oPostscriptStream. More...
class  show
 stream applicator applied to oPostscriptStream. More...

Enumerations

enum  FontStyle { NORMAL_STYLE, OBLIQUE, ITALIC }
enum  FontWeight {
  ULTRALIGHT, LIGHT, NORMAL_WEIGHT, BOLD,
  ULTRABOLD, HEAVY
}
enum  FontVariant { NORMAL_VARIANT, SMALLCAPS }
enum  FontStretch {
  ULTRACONDENSED, EXTRACONDENSED, CONDENSED, SEMICONDENSED,
  NORMAL_STRETCH, SEMIEXPANDED, EXPANDED, EXTRAEXPANDED,
  ULTRAEXPANDED
}

Functions

template<class T>
oPostscriptStreamoperator<< (oPostscriptStream &os, T t)


Enumeration Type Documentation

Enumerator:
ULTRACONDENSED 
EXTRACONDENSED 
CONDENSED 
SEMICONDENSED 
NORMAL_STRETCH 
SEMIEXPANDED 
EXPANDED 
EXTRAEXPANDED 
ULTRAEXPANDED 

Enumerator:
NORMAL_STYLE 
OBLIQUE 
ITALIC 

Enumerator:
NORMAL_VARIANT 
SMALLCAPS 

Enumerator:
ULTRALIGHT 
LIGHT 
NORMAL_WEIGHT 
BOLD 
ULTRABOLD 
HEAVY 


Function Documentation

template<class T>
oPostscriptStream& LASi::operator<< ( oPostscriptStream &  os,
t 
) [inline]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classManager-members.html100644 1752 1752 5737 10753200634 23473 0ustar00softwaresoftware LASi: Member List

Manager< T > Member List

This is the complete list of members for Manager< T >, including all inherited members.

_isOwnerManager< T > [private]
_tManager< T > [protected]
isOwner() const Manager< T > [inline, protected]
Manager()Manager< T > [inline]
Manager(const T t)Manager< T > [inline]
operator T() const Manager< T > [inline]
release()Manager< T > [inline, protected]


Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/util_8h-source.html100644 1752 1752 7427 10753200634 22313 0ustar00softwaresoftware LASi: util.h Source File

util.h

Go to the documentation of this file.
00001 
00012 #ifndef UTIL_H
00013 #define UTIL_H
00014 
00015 #include <stdexcept>
00016 #include <string>
00017 #include <iostream>
00018 
00019 #include <ft2build.h>
00020 #include FT_FREETYPE_H
00021 #include <freetype/ftglyph.h>
00022 
00023 std::ostream& operator<<(std::ostream&, const FT_Library);
00024 std::ostream& operator<<(std::ostream&, const FT_Face);
00025 std::ostream& operator<<(std::ostream&, const FT_Glyph);
00026 std::ostream& operator<<(std::ostream&, const FT_Outline);
00027 
00030 inline void evalReturnCode(const int errCode, const char* funcName) throw (std::runtime_error) {
00031   if (errCode)
00032     throw std::runtime_error(std::string("Error returned from ") + funcName);
00033 }
00034 #endif

Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/doc/developer/html/classContextMgr.html100644 1752 1752 11110 10753200634 22561 0ustar00softwaresoftware LASi: ContextMgr Class Reference

ContextMgr Class Reference

Manage PangoContext*. More...

#include <contextMgr.h>

Inheritance diagram for ContextMgr:

Manager< PangoContext * >

List of all members.

Public Member Functions

 ContextMgr (const char *const lang="en_US.UTF-8", const int dpiX=72, const int dpiY=72)
 ~ContextMgr ()


Detailed Description

Manage PangoContext*.

Constructor & Destructor Documentation

ContextMgr::ContextMgr ( const char *const   lang = "en_US.UTF-8",
const int  dpiX = 72,
const int  dpiY = 72 
) [inline]

ContextMgr::~ContextMgr (  )  [inline]


The documentation for this class was generated from the following file:
Generated on Fri Feb 8 17:25:20 2008 for LASi by  doxygen 1.5.4
libLASi-1.1.0/include/LASi.h100644 1752 1752 27704 10753200634 15461 0ustar00softwaresoftware#ifndef LASI_H #define LASI_H /** @file * Defines oPostscriptStream and PostscriptDocument and various * stream manipulators. */ #include #include #include #include #include #include class FreetypeGlyphMgr; class ContextMgr; // These macros are needed for Visual C++ and other Windows compilers. // All functions/classes marked with LASIDLLIMPEXP can be imported form/exported to the dll. // Has no impact on other platforms #if defined(WIN32) /* Visual C/C++, Borland, MinGW and Watcom */ #if defined(__VISUALC__) || defined(_MSC_VER) || defined(__BORLANDC__) || defined(__GNUC__) || defined(__WATCOMC__) || defined(__CYGWIN__) #define LASIDLLEXPORT __declspec(dllexport) #define LASIDLLIMPORT __declspec(dllimport) #else #define LASIDLLEXPORT #define LASIDLLIMPORT #endif #else #define LASIDLLEXPORT #define LASIDLLIMPORT #endif #if defined(LASi_EXPORTS) #define LASIDLLIMPEXP LASIDLLEXPORT #define LASIDLLIMPEXP_DATA(type) LASIDLLEXPORT type #elif defined(LASi_DLL) #define LASIDLLIMPEXP LASIDLLIMPORT #define LASIDLLIMPEXP_DATA(type) LASIDLLIMPORT type #else #define LASIDLLIMPEXP #define LASIDLLIMPEXP_DATA(type) type #endif namespace LASi { enum FontStyle{ NORMAL_STYLE, OBLIQUE, ITALIC }; enum FontWeight{ ULTRALIGHT, LIGHT, NORMAL_WEIGHT, BOLD, ULTRABOLD, HEAVY }; enum FontVariant{ NORMAL_VARIANT, SMALLCAPS }; enum FontStretch{ ULTRACONDENSED, EXTRACONDENSED, CONDENSED, SEMICONDENSED, NORMAL_STRETCH, SEMIEXPANDED, EXPANDED, EXTRAEXPANDED, ULTRAEXPANDED }; class PostscriptDocument; class write_glyph_routine_to_stream; /** Just like any ordinary ostringstream, * but maintains a reference to the PostscriptDocument. */ class LASIDLLIMPEXP oPostscriptStream : public std::ostringstream { public: friend class PostscriptDocument; friend class show; friend class setFont; friend class setFontSize; oPostscriptStream(PostscriptDocument& psDoc) : _psDoc(psDoc) {} protected: PostscriptDocument& doc() {return _psDoc;} private: PostscriptDocument& _psDoc; }; template inline oPostscriptStream& operator<<(oPostscriptStream& os, T t) { static_cast(os) << t; return os; } /** Composes Postscript document as three separate and independant streams * for header, body and footer. Body and footer streams respond to * LASi::show applicator which generates Postscript commands to display a * string by using glyph routines instead of a Postscript font. */ class LASIDLLIMPEXP PostscriptDocument { public: friend class write_glyph_routine_to_stream; // helper class friend class show; PostscriptDocument(); ~PostscriptDocument(); /** Sets the font that all subsequent text written * to bodyStream() or footerStream() will be rendered with. */ void setFont( const char* const family = "sans", LASi::FontStyle = LASi::NORMAL_STYLE, LASi::FontWeight = LASi::NORMAL_WEIGHT, LASi::FontVariant = LASi::NORMAL_VARIANT, LASi::FontStretch = LASi::NORMAL_STRETCH ); /** Sets the font size, in points, that all subsequent text written * to bodyStream() or footerStream() will be rendered with. */ void setFontSize(const double size) {_fontSize = size;} /** Returns stream for Postscript header. */ std::ostringstream& osHeader() {return _osHeader;} /** Returns stream for Postscript body. */ oPostscriptStream& osBody() {return _osBody;} /** Returns stream for Postscript footer. */ oPostscriptStream& osFooter() {return _osFooter;} /** Closes all streams and writes completed Postscript document to os. * Header will include glyph routines for all text glyphs in body and footer. * * 2006.05.01.ET Addendum: To create an EPS document, just include the * the four BoundingBox coordinates llx, lly, urx, ury (dimensions in points). * These are optional parameters -- When not included, you'll get a regular PS * document. When included, you'll get an EPS document. * */ void write(std::ostream& os, double llx=0, double lly=0, double urx=0, double ury=0); /** Return string dimensions: * lineSpacing: inter-line spacing * xAdvance: width of the string * yMin: y-coordinate bounding the lowest descender, Indic under-consonantal vowel, etc. * yMax: y-coordinate bounding the highest ascender, diacritic, Indic over-letter vowel, etc. */ void get_dimensions(const char* s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL); void get_dimensions(std::string s, double *lineSpacing, double *xAdvance=NULL, double *yMin=NULL, double *yMax=NULL); protected: /** For internal use only. * @internal * A unique id for a glyph that is composed of its font face and a unique integer. */ class GlyphId { public: friend bool operator==(const GlyphId id1, const GlyphId id2) { return id1._str == id2._str; } friend bool operator<(const GlyphId id1, const GlyphId id2) { return id1._str < id2._str; } GlyphId() {} GlyphId(FT_Face, const FT_UInt); /** @return string representation of glyph id */ std::string str() const {return _str;} private: /** @return string representation of glyph id */ std::string _str; }; /** Maps glyph routine name to FT_Glyph instance. */ typedef std::map GlyphMap; /** Pointer to a function that takes a reference to a glyph * and to x and y coordinates. * May return new x and y coordinates. */ typedef void (PostscriptDocument::*GLYPH_FUNC)( const GlyphMap::value_type&, void* contextData); void invoke_glyph_routine(const GlyphMap::value_type&, void* contextData); void accrue_dimensions( const GlyphMap::value_type&, void* contextData1); /** Decomposes string into glyphs and applies GLYPH_FUNC to each glyph. */ void for_each_glyph_do(const std::string&, const GLYPH_FUNC, void* contextData); PangoContext* pangoContext() const; /** @returns name of Postscript glyph routine */ std::string glyphProcName() const; /** @return font size in points (1/72 in.) */ double getFontSize() {return _fontSize;} /** For internal use only. */ class write_glyph_routine_to_stream { private: std::ostream& os; PangoContext* pangoCtx; public: write_glyph_routine_to_stream(std::ostream& os, PangoContext* pangoCtx) : os(os), pangoCtx(pangoCtx) {} void operator()(PostscriptDocument::GlyphMap::value_type v); }; private: GlyphMap _glyphMap; static const unsigned int DRAWING_SCALE; // Use pointers instead of objects in order to minimize namespace pollution of .h file user // Requires fwd declarations above. ContextMgr* _pContextMgr; // manage PangoContext* double _fontSize; // font size to be used when rendering next show() std::ostringstream _osHeader; // Postscript header oPostscriptStream _osBody; // Postscript body oPostscriptStream _osFooter; // Postscript footer }; /** stream manipulator applied to oPostscriptStream. */ class LASIDLLIMPEXP setFont { public: /** Stream inserter for 'setFont' stream manipulator */ friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFont& x) { x.apply(os); return os; } /** Usage: * os << setFont("Vera Sans",LASi::ITALIC,LASi::BOLD) << ... */ setFont( const char* const family = "sans", const LASi::FontStyle style = LASi::NORMAL_STYLE, const LASi::FontWeight weight = LASi::NORMAL_WEIGHT, const LASi::FontVariant variant = LASi::NORMAL_VARIANT, const LASi::FontStretch stretch = LASi::NORMAL_STRETCH ) : _family(family), _style(style), _weight(weight), _variant(variant), _stretch(stretch) {} protected: void apply(oPostscriptStream& os) const { os.doc().setFont(_family, _style,_weight, _variant, _stretch); } private: const char* const _family; const LASi::FontStyle _style; const LASi::FontWeight _weight; const LASi::FontVariant _variant; const LASi::FontStretch _stretch; }; /** stream manipulator applied to oPostscriptStream. */ class LASIDLLIMPEXP setFontSize { public: /** Stream inserter for 'setFontSize' stream manipulator */ friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const setFontSize& x) { x.apply(os); return os; } /** Usage: * os << setFontSize(12) << ... * @param size size in points */ setFontSize(double size) : _size(size) {} protected: void apply(oPostscriptStream& os) const { os.doc().setFontSize(_size); } private: double _size; }; /** stream applicator applied to oPostscriptStream. */ class LASIDLLIMPEXP show{ public: /** stream inserter for 'show' stream applicator */ friend inline oPostscriptStream& operator<<(oPostscriptStream& os, const show& x) { x.apply(os); return os; } /** Usage: * os << show("some UTF-8 text") << ... */ show(const char* c_str ) : _str(c_str ) {} show(std::string stl_str ) : _str(stl_str) {} protected: void apply(oPostscriptStream& os) const; private: std::string _str; }; } #endif /** @mainpage * @section purpose Purpose * * LASi is Copyright (C) 2003, 2004, 2006 by Larry Siden. * * LASi is hosted on http://www.unifont.org * * LASi provides a C++ output stream interface for writing Postscript * documents containing any of the world's scripts supported by Unicode * 4.0 and by Pango. Right-to-left scripts like Hebrew and Arabic are * accomodated as easily as left-to-right scripts. Complex text layout (CTL) * scripts such as Devanagari, Thai, Lao and Tibetan are supported to the * extent provided by Pango and by the OpenType fonts installed on your system. * * Postscript's show operator and font dictionaries can * only provide glyphs for up to 255 code points and thus are hopelessly * inadequate for many of the world's scripts, much less any kind of * multilingual or scientific text encoded in Unicode. * * LASi works around the limitations of Postscript's built-in font technology * by generating a Postscript routine for each glyph in a string. * A LASi user writes a Postscript program much as he or she may have done in the * past, but now uses LASi's show() method instead of the Postscript * show operator. The user simply passes UTF-8 text strings * directly to LASi's show() method. * * To draw the text string, LASi generates a sequence of calls * to LASi-generated Postscript glyph routines. Glyph routines are only * generated for glyphs that are actually used in the text. In this respect, * LASi is efficient even for Chinese, Japanese, or Korean (CJK). * * In addition to being efficient, the Postscript code and routines * created by LASi are intelligible to human readers which facilitates * debugging of Postscript programs. * * @section usage Usage * * Please view the examples provided in the examples directory to see how LASi is used. * The only header your program need include is LASi.h. * View the examples' Makefiles to see how a program may link with libLASi. * */ libLASi-1.1.0/INSTALL100644 1752 1752 554 10753200634 14060 0ustar00softwaresoftwareThe build system is now based on CMake. It has been tested on Linux, Mac OS-X and Windows platforms. For directions on how to use CMake to build libLASi, please consult http://www.unifont.org/lasi/. In particular, the new build system has the capability of detecting the FreeType version so the previous split release (1.0.5p1 and 1.0.6) is no longer necessary. libLASi-1.1.0/cmake/modules/instdirs.cmake100644 1752 1752 3321 10753200634 20433 0ustar00softwaresoftware# cmake/modules/installdirs.cmake # Module for determining all installation directories for libLASi. # Note, use absolute install locations only since relative ones are # automatically prefixed with ${CMAKE_INSTALL_PREFIX} which may destroy # the fine-tuning of installation locations that we desire. # Cached install locations following what is done for the autotools configure # script: (CMAKE_INSTALL_SBINDIR, CMAKE_INSTALL_LIBEXECDIR, # CMAKE_INSTALL_SHAREDSTATEDIR, CMAKE_INSTALL_LOCALSTATEDIR, and # CMAKE_INSTALL_OLDINCLUDEDIR not set because PLplot does not use those # install locations). set( CMAKE_INSTALL_EXEC_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "install location for architecture-dependent files" ) set( CMAKE_INSTALL_BINDIR ${CMAKE_INSTALL_EXEC_PREFIX}/bin CACHE PATH "install location for user executables" ) set( CMAKE_INSTALL_DATADIR ${CMAKE_INSTALL_PREFIX}/share CACHE PATH "install location for read-only architecture-independent data" ) set( CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_EXEC_PREFIX}/lib CACHE PATH "install location for object code libraries" ) set( CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "install location for C header files" ) set( CMAKE_INSTALL_INFODIR ${CMAKE_INSTALL_DATADIR}/info CACHE PATH "install location for info documentation" ) set( CMAKE_INSTALL_MANDIR ${CMAKE_INSTALL_DATADIR}/man CACHE PATH "install location for man documentation" ) set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${CMAKE_INSTALL_EXEC_PREFIX}) set(libdir ${CMAKE_INSTALL_LIBDIR}) set(bindir ${CMAKE_INSTALL_BINDIR}) set(includedir ${CMAKE_INSTALL_INCLUDEDIR}) set(docdir ${CMAKE_INSTALL_DATADIR}/doc/libLASi-${VERSION}) set(DATA_DIR ${CMAKE_INSTALL_DATADIR}/${PACKAGE}${VERSION}) libLASi-1.1.0/cmake/modules/summary.cmake100644 1752 1752 3514 10753200634 20275 0ustar00softwaresoftware# cmake/modules/summary.cmake # Macro for outputting all the most important CMake variables for libLASi macro(summary) set(_output_results " Summary of CMake build system results for libLASi Install location variables which can be set by the user: CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} CMAKE_INSTALL_EXEC_PREFIX: ${CMAKE_INSTALL_EXEC_PREFIX} CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR} CMAKE_INSTALL_DATADIR: ${CMAKE_INSTALL_DATADIR} CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR} CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR} CMAKE_INSTALL_INFODIR: ${CMAKE_INSTALL_INFODIR} CMAKE_INSTALL_MANDIR: ${CMAKE_INSTALL_MANDIR} Other important CMake variables: CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME} UNIX: ${UNIX} WIN32: ${WIN32} APPLE: ${APPLE} MSVC: ${MSVC} (MSVC_VERSION: ${MSVC_VERSION}) MINGW: ${MINGW} MSYS: ${MSYS} CYGWIN: ${CYGWIN} BORLAND: ${BORLAND} WATCOM: ${WATCOM} CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE} CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}") if(NOT CMAKE_BUILD_TYPE) set(_output_results "${_output_results} CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") elseif(CMAKE_BUILD_TYPE STREQUAL "Release") set(_output_results "${_output_results} CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}") elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") set(_output_results "${_output_results} CMAKE_CXX_FLAGS_DEBUG: ${CMAKE_CXX_FLAGS_DEBUG}") elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") set(_output_results "${_output_results} CMAKE_CXX_FLAGS_RELWITHDEBINFO: ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") set(_output_results "${_output_results} CMAKE_CXX_FLAGS_MINSIZEREL: ${CMAKE_CXX_FLAGS_MINSIZEREL}") else(NOT CMAKE_BUILD_TYPE) message(FATAL_ERROR "Invalid CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") endif(NOT CMAKE_BUILD_TYPE) message("${_output_results}") endmacro(summary) libLASi-1.1.0/cmake/modules/FindPkgConfig.cmake100644 1752 1752 36064 10753200634 21276 0ustar00softwaresoftware# - a pkg-config module for CMake # # Usage: # pkg_check_modules( [REQUIRED] []*) # checks for all the given modules # # pkg_search_module( [REQUIRED] []*) # checks for given modules and uses the first working one # # When the 'REQUIRED' argument was set, macros will fail with an error # when module(s) could not be found # # It sets the following variables: # PKG_CONFIG_FOUND ... true iff pkg-config works on the system # PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program # _FOUND ... set to 1 iff module(s) exist # # For the following variables two sets of values exist; first one is the # common one and has the given PREFIX. The second set contains flags # which are given out when pkgconfig was called with the '--static' # option. # _LIBRARIES ... only the libraries (w/o the '-l') # _LIBRARY_DIRS ... the paths of the libraries (w/o the '-L') # _LDFLAGS ... all required linker flags # _LDFLAGS_OTHER ... all other linker flags # _INCLUDE_DIRS ... the '-I' preprocessor flags (w/o the '-I') # _CFLAGS ... all required cflags # _CFLAGS_OTHER ... the other compiler flags # # = for common case # = _STATIC for static linking # # There are some special variables whose prefix depends on the count # of given modules. When there is only one module, stays # unchanged. When there are multiple modules, the prefix will be # changed to _: # _VERSION ... version of the module # _PREFIX ... prefix-directory of the module # _INCLUDEDIR ... include-dir of the module # _LIBDIR ... lib-dir of the module # # = when |MODULES| == 1, else # = _ # # A parameter can have the following formats: # {MODNAME} ... matches any version # {MODNAME}>={VERSION} ... at least version is required # {MODNAME}={VERSION} ... exactly version is required # {MODNAME}<={VERSION} ... modules must not be newer than # # Examples # pkg_check_modules (GLIB2 glib-2.0) # # pkg_check_modules (GLIB2 glib-2.0>=2.10) # requires at least version 2.10 of glib2 and defines e.g. # GLIB2_VERSION=2.10.3 # # pkg_check_modules (FOO glib-2.0>=2.10 gtk+-2.0) # requires both glib2 and gtk2, and defines e.g. # FOO_glib-2.0_VERSION=2.10.3 # FOO_gtk+-2.0_VERSION=2.8.20 # # pkg_check_modules (XRENDER REQUIRED xrender) # defines e.g.: # XRENDER_LIBRARIES=Xrender;X11 # XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp # # pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) # Copyright (C) 2006 Enrico Scholz # # Redistribution and use, with or without modification, are permitted # provided that the following conditions are met: # # 1. Redistributions must retain the above copyright notice, this # list of conditions and the following disclaimer. # 2. The name of the author may not be used to endorse or promote # products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ### Common stuff #### set(PKG_CONFIG_VERSION 1) set(PKG_CONFIG_FOUND 0) find_program(PKG_CONFIG_EXECUTABLE NAMES pkg-config DOC "pkg-config executable") mark_as_advanced(PKG_CONFIG_EXECUTABLE) if(PKG_CONFIG_EXECUTABLE) set(PKG_CONFIG_FOUND 1) endif(PKG_CONFIG_EXECUTABLE) # Unsets the given variables macro(_pkgconfig_unset var) set(${var} "" CACHE INTERNAL "") endmacro(_pkgconfig_unset) macro(_pkgconfig_set var value) set(${var} ${value} CACHE INTERNAL "") endmacro(_pkgconfig_set) # Invokes pkgconfig, cleans up the result and sets variables macro(_pkgconfig_invoke _pkglist _prefix _varname _regexp) set(_pkgconfig_invoke_result) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} ${ARGN} ${_pkglist} OUTPUT_VARIABLE _pkgconfig_invoke_result RESULT_VARIABLE _pkgconfig_failed) if (_pkgconfig_failed) set(_pkgconfig_${_varname} "") _pkgconfig_unset(${_prefix}_${_varname}) else(_pkgconfig_failed) string(REGEX REPLACE "[\r\n]" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") string(REGEX REPLACE " +$" "" _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") if (NOT ${_regexp} STREQUAL "") string(REGEX REPLACE "${_regexp}" " " _pkgconfig_invoke_result "${_pkgconfig_invoke_result}") endif(NOT ${_regexp} STREQUAL "") separate_arguments(_pkgconfig_invoke_result) #message(STATUS " ${_varname} ... ${_pkgconfig_invoke_result}") set(_pkgconfig_${_varname} ${_pkgconfig_invoke_result}) _pkgconfig_set(${_prefix}_${_varname} "${_pkgconfig_invoke_result}") endif(_pkgconfig_failed) endmacro(_pkgconfig_invoke) # Invokes pkgconfig two times; once without '--static' and once with # '--static' macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) _pkgconfig_invoke("${_pkglist}" ${_prefix} ${_varname} "${cleanup_regexp}" ${ARGN}) _pkgconfig_invoke("${_pkglist}" ${_prefix} STATIC_${_varname} "${cleanup_regexp}" --static ${ARGN}) endmacro(_pkgconfig_invoke_dyn) # Splits given arguments into options and a package list macro(_pkgconfig_parse_options _result _is_req) set(${_is_req} 0) foreach(_pkg ${ARGN}) if (_pkg STREQUAL "REQUIRED") set(${_is_req} 1) endif (_pkg STREQUAL "REQUIRED") endforeach(_pkg ${ARGN}) set(${_result} ${ARGN}) list(REMOVE_ITEM ${_result} "REQUIRED") endmacro(_pkgconfig_parse_options) ### macro(_pkg_check_modules_internal _is_required _is_silent _prefix) _pkgconfig_unset(${_prefix}_FOUND) _pkgconfig_unset(${_prefix}_VERSION) _pkgconfig_unset(${_prefix}_PREFIX) _pkgconfig_unset(${_prefix}_INCLUDEDIR) _pkgconfig_unset(${_prefix}_LIBDIR) _pkgconfig_unset(${_prefix}_LIBRARIES) _pkgconfig_unset(${_prefix}_LIBRARY_DIRS) _pkgconfig_unset(${_prefix}_LDFLAGS) _pkgconfig_unset(${_prefix}_LDFLAGS_OTHER) _pkgconfig_unset(${_prefix}_INCLUDE_DIRS) _pkgconfig_unset(${_prefix}_CFLAGS) _pkgconfig_unset(${_prefix}_CFLAGS_OTHER) _pkgconfig_unset(${_prefix}_STATIC_LIBRARIES) _pkgconfig_unset(${_prefix}_STATIC_LIBRARY_DIRS) _pkgconfig_unset(${_prefix}_STATIC_LDFLAGS) _pkgconfig_unset(${_prefix}_STATIC_LDFLAGS_OTHER) _pkgconfig_unset(${_prefix}_STATIC_INCLUDE_DIRS) _pkgconfig_unset(${_prefix}_STATIC_CFLAGS) _pkgconfig_unset(${_prefix}_STATIC_CFLAGS_OTHER) # create a better addressable variable of the modules and calculate its size set(_pkg_check_modules_list ${ARGN}) list(LENGTH _pkg_check_modules_list _pkg_check_modules_cnt) if(PKG_CONFIG_EXECUTABLE) # give out status message telling checked module if (NOT ${_is_silent}) if (_pkg_check_modules_cnt EQUAL 1) message(STATUS "checking for module '${_pkg_check_modules_list}'") else(_pkg_check_modules_cnt EQUAL 1) message(STATUS "checking for modules '${_pkg_check_modules_list}'") endif(_pkg_check_modules_cnt EQUAL 1) endif(NOT ${_is_silent}) set(_pkg_check_modules_packages) set(_pkg_check_modules_failed) # iterate through module list and check whether they exist and match the required version foreach (_pkg_check_modules_pkg ${_pkg_check_modules_list}) set(_pkg_check_modules_exist_query) # check whether version is given if (_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\1" _pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\2" _pkg_check_modules_pkg_op "${_pkg_check_modules_pkg}") string(REGEX REPLACE "(.*[^><])(>=|=|<=)(.*)" "\\3" _pkg_check_modules_pkg_ver "${_pkg_check_modules_pkg}") else(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") set(_pkg_check_modules_pkg_name "${_pkg_check_modules_pkg}") set(_pkg_check_modules_pkg_op) set(_pkg_check_modules_pkg_ver) endif(_pkg_check_modules_pkg MATCHES ".*(>=|=|<=).*") # handle the operands if (_pkg_check_modules_pkg_op STREQUAL ">=") list(APPEND _pkg_check_modules_exist_query --atleast-version) endif(_pkg_check_modules_pkg_op STREQUAL ">=") if (_pkg_check_modules_pkg_op STREQUAL "=") list(APPEND _pkg_check_modules_exist_query --exact-version) endif(_pkg_check_modules_pkg_op STREQUAL "=") if (_pkg_check_modules_pkg_op STREQUAL "<=") list(APPEND _pkg_check_modules_exist_query --max-version) endif(_pkg_check_modules_pkg_op STREQUAL "<=") # create the final query which is of the format: # * --atleast-version # * --exact-version # * --max-version # * --exists if (_pkg_check_modules_pkg_op) list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_ver}") else(_pkg_check_modules_pkg_op) list(APPEND _pkg_check_modules_exist_query --exists) endif(_pkg_check_modules_pkg_op) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_VERSION) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_PREFIX) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_INCLUDEDIR) _pkgconfig_unset(${_prefix}_${_pkg_check_modules_pkg_name}_LIBDIR) list(APPEND _pkg_check_modules_exist_query "${_pkg_check_modules_pkg_name}") list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") # execute the query execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} ${_pkg_check_modules_exist_query} RESULT_VARIABLE _pkgconfig_retval) # evaluate result and tell failures if (_pkgconfig_retval) if(NOT ${_is_silent}) message(STATUS " package '${_pkg_check_modules_pkg}' not found") endif(NOT ${_is_silent}) set(_pkg_check_modules_failed 1) endif(_pkgconfig_retval) endforeach(_pkg_check_modules_pkg) if(_pkg_check_modules_failed) # fail when requested if (${_is_required}) message(SEND_ERROR "A required package was not found") endif (${_is_required}) else(_pkg_check_modules_failed) # when we are here, we checked whether requested modules # exist. Now, go through them and set variables _pkgconfig_set(${_prefix}_FOUND 1) list(LENGTH _pkg_check_modules_packages pkg_count) # iterate through all modules again and set individual variables foreach (_pkg_check_modules_pkg ${_pkg_check_modules_packages}) # handle case when there is only one package required if (pkg_count EQUAL 1) set(_pkg_check_prefix "${_prefix}") else(pkg_count EQUAL 1) set(_pkg_check_prefix "${_prefix}_${_pkg_check_modules_pkg}") endif(pkg_count EQUAL 1) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" VERSION "" --modversion ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" PREFIX "" --variable=prefix ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" INCLUDEDIR "" --variable=includedir ) _pkgconfig_invoke(${_pkg_check_modules_pkg} "${_pkg_check_prefix}" LIBDIR "" --variable=libdir ) message(STATUS " found ${_pkg_check_modules_pkg}, version ${_pkgconfig_VERSION}") endforeach(_pkg_check_modules_pkg) # set variables which are combined for multiple modules _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARIES "(^| )-l" --libs-only-l ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LIBRARY_DIRS "(^| )-L" --libs-only-L ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS "" --libs ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" LDFLAGS_OTHER "" --libs-only-other ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" INCLUDE_DIRS "(^| )-I" --cflags-only-I ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) endif(_pkg_check_modules_failed) else(PKG_CONFIG_EXECUTABLE) if (${_is_required}) message(SEND_ERROR "pkg-config tool not found") endif (${_is_required}) endif(PKG_CONFIG_EXECUTABLE) endmacro(_pkg_check_modules_internal) ### ### User visible macros start here ### ### macro(pkg_check_modules _prefix _module0) # check cached value if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) _pkgconfig_parse_options (_pkg_modules _pkg_is_required "${_module0}" ${ARGN}) _pkg_check_modules_internal("${_pkg_is_required}" 0 "${_prefix}" ${_pkg_modules}) _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) endmacro(pkg_check_modules) ### macro(pkg_search_module _prefix _module0) # check cached value if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) set(_pkg_modules_found 0) _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required "${_module0}" ${ARGN}) message(STATUS "checking for one of the modules '${_pkg_modules_alt}'") # iterate through all modules and stop at the first working one. foreach(_pkg_alt ${_pkg_modules_alt}) if(NOT _pkg_modules_found) _pkg_check_modules_internal(0 1 "${_prefix}" "${_pkg_alt}") endif(NOT _pkg_modules_found) if (${_prefix}_FOUND) set(_pkg_modules_found 1) endif(${_prefix}_FOUND) endforeach(_pkg_alt) if (NOT ${_prefix}_FOUND) if(${_pkg_is_required}) message(SEND_ERROR "None of the required '${_pkg_modules_alt}' found") endif(${_pkg_is_required}) endif(NOT ${_prefix}_FOUND) _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) endif(NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION}) endmacro(pkg_search_module) ### Local Variables: ### mode: cmake ### End: libLASi-1.1.0/cmake/modules/lasi_version.cmake100644 1752 1752 2232 10753200634 21271 0ustar00softwaresoftware# cmake/modules/lasi_version.cmake # Version data that need review and possible modification for each release. set(VERSION 1.1.0) # CPack version numbers for release tarball name. set(CPACK_PACKAGE_VERSION_MAJOR 1) set(CPACK_PACKAGE_VERSION_MINOR 1) set(CPACK_PACKAGE_VERSION_PATCH 0) # libLASi version information. # Rules: # (1) If a backwards incompatible API change has been made in the library # API (e.g., if old compiled and linked applications will no longer work) # then increment SOVERSION and zero the corresponding minor and patch # numbers just before release. # (2) If the library changes are limited to additions to the API, then # then leave SOVERSION alone, increment the minor number and zero the # patch number just before release. # (3) If the library changes are limited to implementation changes with # no API changes at all, then leave SOVERSION and minor number alone, and # increment the patch number just before the release. # (4) If there are no library source code changes at all, then leave all # library version numbers the same for the release. set(LASi_SOVERSION 0) set(LASi_VERSION ${LASi_SOVERSION}.0.1) libLASi-1.1.0/cmake/modules/lasi.cmake100644 1752 1752 11350 10753200634 17545 0ustar00softwaresoftware# cmake/modules/lasi.cmake # Module for determining all configuration variables for libLASi. # libraries are all shared by default option(BUILD_SHARED_LIBS "Build shared libraries" ON) # for win32 we set the DLLFLAG (used in lasi.pc) # to import the functions correctly from the dll if(WIN32 AND BUILD_SHARED_LIBS) set( DLLFLAG "-DLASi_DLL" ) endif(WIN32 AND BUILD_SHARED_LIBS) # Set executable suffix for the Makefiles for the installation tree examples. # WIN32 covers CYGWIN as well (and possibly MINGW, but we will make sure). if(WIN32 OR MINGW) set(EXEEXT .exe) endif(WIN32 OR MINGW) # Useful macro for helping to do version tests. May be needed for future # development of CMake build system for libLASi. macro(TRANSFORM_VERSION _numerical_result _version) # _version must be a period-delimited triplet string of the form # "major.minor.patch". # This macro transforms that into a numerical result that can be compared. if(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$") string(REGEX REPLACE "^([0-9]*)\\.[0-9]*\\.[0-9]*$" "\\1" _major ${_version}) string(REGEX REPLACE "^[0-9]*\\.([0-9]*)\\.[0-9]*$" "\\1" _minor ${_version}) string(REGEX REPLACE "^[0-9]*\\.[0-9]*\\.([0-9]*)$" "\\1" _patch ${_version}) math(EXPR ${_numerical_result} "${_major}*1000000 + ${_minor}*1000 + ${_patch} ") else(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$") set(${_numerical_result} 0) endif(${_version} MATCHES "^[0-9]*\\.[0-9]*\\.[0-9]*$") endmacro(TRANSFORM_VERSION) # On windows systems the math library is not separated so do not specify # it unless you are on a non-windows system. if(NOT WIN32) set(MATH_LIB m) endif(NOT WIN32) # Fundamental install locations (used in, e.g., configured lasi.pc file). include(instdirs) # ======================================================================= # pkg-config support # ======================================================================= include(pkg-config) pkg_check_modules(PANGO pango) if(PANGO_FOUND) include_directories(${PANGO_INCLUDE_DIRS}) link_directories(${PANGO_LIBRARY_DIRS}) link_libraries(${PANGO_LIBRARIES}) add_definitions(${PANGO_CFLAGS}) set(PANGO_RPATH ${PANGO_LIBDIR}) else(PANGO_FOUND) message(FATAL_ERROR "Pango " "(http://ftp.gnome.org/pub/GNOME/sources/pango/) is required to build " "libLASi.") endif(PANGO_FOUND) pkg_check_modules(PANGOFT2 pangoft2) if(PANGOFT2_FOUND) include_directories(${PANGOFT2_INCLUDE_DIRS}) link_directories(${PANGOFT2_LIBRARY_DIRS}) link_libraries(${PANGOFT2_LIBRARIES}) add_definitions(${PANGOFT2_CFLAGS}) else(PANGOFT2_FOUND) message(FATAL_ERROR "Pangoft2 not found") endif(PANGOFT2_FOUND) pkg_check_modules(FT2 freetype2) if(FT2_FOUND) include_directories(${FT2_INCLUDE_DIRS}) link_directories(${FT2_LIBRARY_DIRS}) link_libraries(${FT2_LIBRARIES}) add_definitions(${FT2_CFLAGS}) else(FT2_FOUND) message(FATAL_ERROR "ft2 not found") endif(FT2_FOUND) if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # No rpath on Darwin. Setting it will only cause trouble. else(CMAKE_SYSTEM_NAME STREQUAL "Darwin") option(USE_RPATH "Use -rpath when linking libraries, executables" ON) endif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # ======================================================================= # Test of FreeType API. # ======================================================================= if(FT2_VERSION) transform_version(NUMERICAL_FT2_MINIMUM_VERSION "9.0.0") transform_version(NUMERICAL_FT2_2_2_VERSION "9.10.0") transform_version(NUMERICAL_FT2_VERSION "${FT2_VERSION}") if(NUMERICAL_FT2_VERSION LESS "${NUMERICAL_FT2_MINIMUM_VERSION}") message(FATAL "FreeType2 Library version 9.0.0+ is required. " "Library version is ${FT2_VERSION}" ) elseif(NUMERICAL_FT2_VERSION LESS "${NUMERICAL_FT2_2_2_VERSION}") set(HAVE_FT2_2PLUS OFF) message(STATUS "FOUND FreeType 2.1 (OLD API): Library version is ${FT2_VERSION}" ) else(NUMERICAL_FT2_VERSION LESS "${NUMERICAL_FT2_MINIMUM_VERSION}") set(HAVE_FT2_2PLUS ON) message(STATUS "FOUND FreeType 2.2+ (NEW API): Library version is ${FT2_VERSION}" ) endif(NUMERICAL_FT2_VERSION LESS "${NUMERICAL_FT2_MINIMUM_VERSION}") else(FT2_VERSION) message(FATAL "Cannot determine FreeType2 Library version with pkg-config") endif(FT2_VERSION) # ======================================================================= # doxygen support # ======================================================================= find_package(Doxygen) if(NOT DOXYGEN_EXECUTABLE) message(STATUS "WARNING: Doxygen not found so documentation not generated.") endif(NOT DOXYGEN_EXECUTABLE) # ======================================================================= # Prepare summary macro that is used later. # ======================================================================= include(summary) libLASi-1.1.0/cmake/modules/pkg-config.cmake100644 1752 1752 745 10753200634 20607 0ustar00softwaresoftware# cmake/modules/pkg-config.cmake # Make PKG_CONFIG_EXECUTABLE available as well as the pkg_check_modules macro. find_package(PkgConfig) if(PKG_CONFIG_EXECUTABLE) message(STATUS "Looking for pkg-config - found") set(pkg_config_true "") set(PKG_CONFIG_DIR ${libdir}/pkgconfig) else(PKG_CONFIG_EXECUTABLE) message(STATUS "Looking for pkg-config - not found") set(pkg_config_true "#") message(FATAL_ERROR "Build of libLASi requires pkg-config.") endif(PKG_CONFIG_EXECUTABLE)